Allow drags of URLs from treeview windows to browser windows.

svn path=/trunk/netsurf/; revision=10921
This commit is contained in:
Chris Young 2010-10-30 10:44:44 +00:00
parent 755e45028d
commit d185dc310a
3 changed files with 59 additions and 17 deletions

View File

@ -59,6 +59,7 @@
struct Window *drag_icon = NULL;
ULONG drag_icon_width;
ULONG drag_icon_height;
BOOL drag_in_progress = FALSE;
struct gui_download_window *gui_download_window_create(download_context *ctx,
struct gui_window *gui)
@ -381,7 +382,7 @@ void ami_drag_save(struct Window *win)
char *source_data;
ULONG source_size;
if(drag_icon) ami_drag_icon_close(NULL);
ami_drag_icon_close(NULL);
ami_autoscroll = FALSE;
if(strcmp(option_use_pubscreen,"Workbench") == 0)
@ -502,6 +503,8 @@ void ami_drag_icon_show(struct Window *win, char *type)
int err = 0;
int deftype = WBPROJECT;
drag_in_progress = TRUE;
if(option_drag_save_icons == false)
{
ami_update_pointer(win, AMI_GUI_POINTER_DRAG);
@ -567,6 +570,12 @@ void ami_drag_icon_close(struct Window *win)
if(drag_icon) CloseWindow(drag_icon);
if(win) ami_update_pointer(win, GUI_POINTER_DEFAULT);
drag_icon = NULL;
drag_in_progress = FALSE;
}
BOOL ami_drag_in_progress(void)
{
return drag_in_progress;
}
void ami_superimpose_favicon(STRPTR path, struct hlcache_handle *icon, STRPTR type)

View File

@ -52,6 +52,7 @@ void ami_drag_save(struct Window *win);
void ami_drag_icon_show(struct Window *win, char *type);
void ami_drag_icon_close(struct Window *win);
void ami_drag_icon_move(void);
BOOL ami_drag_in_progress(void);
void ami_free_download_list(struct List *dllist);
void ami_superimpose_favicon(STRPTR path, struct hlcache_handle *icon, STRPTR type);

View File

@ -267,6 +267,13 @@ void ami_tree_scroll(struct treeview_window *twin, int sx, int sy)
void ami_tree_drag_icon_show(struct treeview_window *twin)
{
if((tree_drag_status(twin->tree) == TREE_NO_DRAG) ||
(tree_drag_status(twin->tree) == TREE_SELECT_DRAG))
return;
if((twin->type == AMI_TREE_COOKIES) ||
(twin->type == AMI_TREE_SSLCERT)) return; /* No permissable drag operations */
if(tree_node_is_folder(
tree_get_selected_node(
tree_get_root(twin->tree))))
@ -279,6 +286,41 @@ 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 node *selected_node;
BOOL drag;
if(drag = ami_drag_in_progress()) ami_drag_icon_close(twin->win);
if(drag && (gwin = ami_window_at_pointer()))
{
selected_node = tree_get_selected_node(tree_get_root(twin->tree));
if(tree_node_is_folder(selected_node))
{
DisplayBeep(scrn);
}
else
{
browser_window_go(gwin->bw, tree_url_node_get_url(selected_node),
NULL, true);
}
tree_drag_end(twin->tree, twin->mouse_state,
twin->drag_x, twin->drag_y,
twin->drag_x, twin->drag_y); /* Keep the tree happy */
}
else
{
if(tree_drag_status(twin->tree) == TREE_UNKNOWN_DRAG)
DisplayBeep(scrn);
tree_drag_end(twin->tree, twin->mouse_state,
twin->drag_x, twin->drag_y, x, y);
}
}
void ami_tree_scroller_hook(struct Hook *hook,Object *object,struct IntuiMessage *msg)
{
ULONG gid,x,y;
@ -729,8 +771,7 @@ 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);
ami_tree_drag_icon_show(twin);
}
else if(twin->mouse_state & BROWSER_MOUSE_PRESS_2)
{
@ -740,8 +781,7 @@ 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);
ami_tree_drag_icon_show(twin);
}
else
{
@ -813,12 +853,8 @@ BOOL ami_tree_event(struct treeview_window *twin)
twin->lastclick.tv_usec = curtime.tv_usec;
}
}
else
{
ami_drag_icon_close(twin->win);
tree_drag_end(twin->tree, twin->mouse_state,
twin->drag_x, twin->drag_y, x, y);
}
else ami_tree_drag_end(twin, x, y);
twin->mouse_state=0;
twin->drag_x = 0;
twin->drag_y = 0;
@ -829,12 +865,8 @@ BOOL ami_tree_event(struct treeview_window *twin)
tree_mouse_action(twin->tree,
BROWSER_MOUSE_CLICK_2 | twin->key_state, x, y);
}
else
{
ami_drag_icon_close(twin->win);
tree_drag_end(twin->tree, twin->mouse_state,
twin->drag_x, twin->drag_y, x, y);
}
else ami_tree_drag_end(twin, x, y);
twin->mouse_state=0;
twin->drag_x = 0;
twin->drag_y = 0;