summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--amiga/download.c11
-rwxr-xr-xamiga/download.h1
-rwxr-xr-xamiga/tree.c64
3 files changed, 59 insertions, 17 deletions
diff --git a/amiga/download.c b/amiga/download.c
index 370fbbc42..5ae7301b2 100644
--- a/amiga/download.c
+++ b/amiga/download.c
@@ -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)
diff --git a/amiga/download.h b/amiga/download.h
index 66ddf490a..6d7a782ff 100755
--- a/amiga/download.h
+++ b/amiga/download.h
@@ -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);
diff --git a/amiga/tree.c b/amiga/tree.c
index c71e05d64..75886844f 100755
--- a/amiga/tree.c
+++ b/amiga/tree.c
@@ -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;