From 25e9b79f5c944837192186c733feb4a3a311a051 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Fri, 29 Oct 2010 17:40:36 +0000 Subject: Allow getting the tree's drag property. This ensures we can see whether the current drag is something we might need to display an icon for. svn path=/trunk/netsurf/; revision=10917 --- amiga/download.c | 2 +- amiga/tree.c | 20 +++++++++++++++++--- desktop/tree.c | 19 ++++++++++++------- desktop/tree.h | 8 +++++++- 4 files changed, 37 insertions(+), 12 deletions(-) diff --git a/amiga/download.c b/amiga/download.c index 15a0286d5..370fbbc42 100644 --- a/amiga/download.c +++ b/amiga/download.c @@ -512,7 +512,7 @@ void ami_drag_icon_show(struct Window *win, char *type) ami_update_pointer(win, GUI_POINTER_DEFAULT); } - if(type == "drawer") deftype = WBDRAWER; + if(!strcmp(type, "drawer")) deftype = WBDRAWER; dobj = GetIconTags(NULL, ICONGETA_GetDefaultName, type, ICONGETA_GetDefaultType, deftype, diff --git a/amiga/tree.c b/amiga/tree.c index 7b91b78e9..c71e05d64 100755 --- a/amiga/tree.c +++ b/amiga/tree.c @@ -265,6 +265,19 @@ void ami_tree_scroll(struct treeview_window *twin, int sx, int sy) ami_tree_draw(twin); } +void ami_tree_drag_icon_show(struct treeview_window *twin) +{ + if(tree_node_is_folder( + tree_get_selected_node( + tree_get_root(twin->tree)))) + { + ami_drag_icon_show(twin->win, "drawer"); + } + else + { + ami_drag_icon_show(twin->win, "html"); + } +} void ami_tree_scroller_hook(struct Hook *hook,Object *object,struct IntuiMessage *msg) { @@ -688,8 +701,6 @@ BOOL ami_tree_event(struct treeview_window *twin) { int drag_x_move = 0, drag_y_move = 0; - /* TODO: Show drag icons on TREE_MOVE_DRAG start. - * Until then, the below line does nothing. */ ami_drag_icon_move(); if(twin->win->MouseX < bbox->Left) @@ -718,7 +729,8 @@ BOOL ami_tree_event(struct treeview_window *twin) BROWSER_MOUSE_DRAG_ON; if(twin->drag_x == 0) twin->drag_x = x; if(twin->drag_y == 0) twin->drag_y = y; - + if(tree_drag_status(twin->tree) == TREE_MOVE_DRAG) + ami_tree_drag_icon_show(twin); } else if(twin->mouse_state & BROWSER_MOUSE_PRESS_2) { @@ -728,6 +740,8 @@ BOOL ami_tree_event(struct treeview_window *twin) BROWSER_MOUSE_DRAG_ON; if(twin->drag_x == 0) twin->drag_x = x; if(twin->drag_y == 0) twin->drag_y = y; + if(tree_drag_status(twin->tree) == TREE_MOVE_DRAG) + ami_tree_drag_icon_show(twin); } else { diff --git a/desktop/tree.c b/desktop/tree.c index 3ea3dbeda..566781ef7 100644 --- a/desktop/tree.c +++ b/desktop/tree.c @@ -40,13 +40,6 @@ #include "utils/utils.h" #include "utils/url.h" -typedef enum { - TREE_NO_DRAG = 0, - TREE_SELECT_DRAG, - TREE_MOVE_DRAG -} tree_drag_type; - - #define MAXIMUM_URL_LENGTH 1024 #define TREE_ICON_SIZE 16 @@ -1430,6 +1423,18 @@ bool tree_is_edited(struct tree *tree) } +/** + * Get the drag state of a tree + * + * \param tree the tree to get the state of + * \return drag type (defined in desktop/tree.h) + */ +tree_drag_type tree_drag_status(struct tree *tree) +{ + return tree->drag; +} + + /** * Returns the first child of a node * diff --git a/desktop/tree.h b/desktop/tree.h index 707f3d126..30d142005 100644 --- a/desktop/tree.h +++ b/desktop/tree.h @@ -63,6 +63,12 @@ struct tree; struct node; struct node_element; +typedef enum { + TREE_NO_DRAG = 0, + TREE_SELECT_DRAG, + TREE_MOVE_DRAG +} tree_drag_type; + typedef enum { NODE_ELEMENT_TEXT, /**< Text only */ NODE_ELEMENT_TEXT_PLUS_ICON, /**< Text and icon */ @@ -163,7 +169,7 @@ bool tree_update_element_text(struct tree *tree, struct node_element *element, c const char *tree_node_element_get_text(struct node_element *element); struct node *tree_get_root(struct tree *tree); bool tree_is_edited(struct tree *tree); - +tree_drag_type tree_drag_status(struct tree *tree); /* functions for traversing the tree */ struct node *tree_node_get_child(struct node *node); -- cgit v1.2.3