From ce37fdb128c42cd623cca1e665d32250944c41c5 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Fri, 2 Dec 2011 13:24:40 +0000 Subject: Support dragging from global history to hotlist svn path=/trunk/netsurf/; revision=13219 --- amiga/clipboard.c | 2 +- amiga/drag.c | 8 ++++---- amiga/drag.h | 2 +- amiga/tree.c | 17 +++++++++++++---- 4 files changed, 19 insertions(+), 10 deletions(-) (limited to 'amiga') diff --git a/amiga/clipboard.c b/amiga/clipboard.c index 01bcd87f1..30e768a6a 100755 --- a/amiga/clipboard.c +++ b/amiga/clipboard.c @@ -334,7 +334,7 @@ void ami_drag_selection(struct selection *s) char *utf8text; struct ami_text_selection *sel; struct IFFHandle *old_iffh = iffh; - struct gui_window_2 *gwin = ami_window_at_pointer(); + struct gui_window_2 *gwin = ami_window_at_pointer(AMINS_WINDOW); if(!gwin) { diff --git a/amiga/drag.c b/amiga/drag.c index 835db6724..2c065ef37 100644 --- a/amiga/drag.c +++ b/amiga/drag.c @@ -276,7 +276,7 @@ BOOL ami_drag_in_progress(void) return drag_in_progress; } -struct gui_window_2 *ami_find_gwin_by_id(struct Window *win) +void *ami_find_gwin_by_id(struct Window *win, int type) { struct nsObject *node, *nnode; struct gui_window_2 *gwin; @@ -289,7 +289,7 @@ struct gui_window_2 *ami_find_gwin_by_id(struct Window *win) { nnode=(struct nsObject *)GetSucc((struct Node *)node); - if(node->Type == AMINS_WINDOW) // or frame? + if(node->Type == type) { gwin = node->objstruct; if(win == gwin->win) return gwin; @@ -299,7 +299,7 @@ struct gui_window_2 *ami_find_gwin_by_id(struct Window *win) return NULL; } -struct gui_window_2 *ami_window_at_pointer(void) +void *ami_window_at_pointer(int type) { struct Layer *layer; @@ -309,6 +309,6 @@ struct gui_window_2 *ami_window_at_pointer(void) UnlockLayerInfo(&scrn->LayerInfo); - if(layer) return ami_find_gwin_by_id(layer->Window); + if(layer) return ami_find_gwin_by_id(layer->Window, type); else return NULL; } diff --git a/amiga/drag.h b/amiga/drag.h index 80275d7fe..218aa67f8 100644 --- a/amiga/drag.h +++ b/amiga/drag.h @@ -32,5 +32,5 @@ void ami_drag_icon_close(struct Window *win); void ami_drag_icon_move(void); BOOL ami_drag_in_progress(void); -struct gui_window_2 *ami_window_at_pointer(void); +void *ami_window_at_pointer(int type); #endif diff --git a/amiga/tree.c b/amiga/tree.c index ef0bf5cfd..5ce96926b 100755 --- a/amiga/tree.c +++ b/amiga/tree.c @@ -78,9 +78,9 @@ enum { struct treeview_window { + struct nsObject *node; struct Window *win; Object *objects[GID_TREE_LAST]; - struct nsObject *node; int type; struct NewMenu *menu; char *menu_name[AMI_TREE_MENU_ITEMS]; @@ -289,12 +289,13 @@ void ami_tree_drag_icon_show(struct treeview_window *twin) void ami_tree_drag_end(struct treeview_window *twin, int x, int y) { struct gui_window_2 *gwin; + struct treeview_window *tw; struct node *selected_node; BOOL drag; if(drag = ami_drag_in_progress()) ami_drag_icon_close(twin->win); - if(drag && (gwin = ami_window_at_pointer())) + if(drag && (twin != ami_window_at_pointer(AMINS_TVWINDOW))) { selected_node = tree_get_selected_node(tree_get_root(twin->tree)); @@ -304,8 +305,16 @@ void ami_tree_drag_end(struct treeview_window *twin, int x, int y) } else { - browser_window_go(gwin->bw, tree_url_node_get_url(selected_node), - NULL, true); + if(gwin = ami_window_at_pointer(AMINS_WINDOW)) + { + browser_window_go(gwin->bw, tree_url_node_get_url(selected_node), + NULL, true); + } + else if((tw = ami_window_at_pointer(AMINS_TVWINDOW)) && + (tw != twin) && (tw->type == AMI_TREE_HOTLIST)) + { + hotlist_add_page_xy(tree_url_node_get_url(selected_node), x, y); + } } tree_drag_end(twin->tree, twin->mouse_state, twin->drag_x, twin->drag_y, -- cgit v1.2.3