summaryrefslogtreecommitdiff
path: root/amiga
diff options
context:
space:
mode:
Diffstat (limited to 'amiga')
-rw-r--r--amiga/drag.h2
-rwxr-xr-xamiga/gui.c38
-rwxr-xr-xamiga/tree.c34
3 files changed, 44 insertions, 30 deletions
diff --git a/amiga/drag.h b/amiga/drag.h
index 2c10c119f..65f1461b6 100644
--- a/amiga/drag.h
+++ b/amiga/drag.h
@@ -20,6 +20,8 @@
#define AMIGA_DRAG_H
#include "amiga/gui.h"
+#define AMI_DRAG_THRESHOLD 10
+
int drag_save;
void *drag_save_data;
struct gui_window *drag_save_gui;
diff --git a/amiga/gui.c b/amiga/gui.c
index f3ef8e68d..9a57cd17d 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -864,6 +864,7 @@ void ami_handle_msg(void)
int i, nskey;
struct browser_window *closedbw;
struct timeval curtime;
+ static int drag_x_move = 0, drag_y_move = 0;
if(IsMinListEmpty(window_list))
{
@@ -1007,6 +1008,9 @@ void ami_handle_msg(void)
switch(result & WMHI_CLASSMASK) // class
{
case WMHI_MOUSEMOVE:
+ drag_x_move = 0;
+ drag_y_move = 0;
+
GetAttr(SPACE_AreaBox, (Object *)gwin->objects[GID_BROWSER],
(ULONG *)&bbox);
@@ -1026,28 +1030,20 @@ void ami_handle_msg(void)
((gwin->bw->drag_type == DRAGGING_SELECTION) ||
ami_autoscroll == TRUE))
{
- int drag_x_move = 0, drag_y_move = 0;
-
ami_drag_icon_move();
- if(gwin->win->MouseX < bbox->Left)
+ if((gwin->win->MouseX < bbox->Left) &&
+ ((gwin->win->MouseX - bbox->Left) > -AMI_DRAG_THRESHOLD))
drag_x_move = gwin->win->MouseX - bbox->Left;
- if(gwin->win->MouseX > (bbox->Left + bbox->Width))
+ if((gwin->win->MouseX > (bbox->Left + bbox->Width)) &&
+ ((gwin->win->MouseX - (bbox->Left + bbox->Width)) < AMI_DRAG_THRESHOLD))
drag_x_move = gwin->win->MouseX - (bbox->Left + bbox->Width);
- if(gwin->win->MouseY < bbox->Top)
+ if((gwin->win->MouseY < bbox->Top) &&
+ ((gwin->win->MouseY - bbox->Top) > -AMI_DRAG_THRESHOLD))
drag_y_move = gwin->win->MouseY - bbox->Top;
- if(gwin->win->MouseY > (bbox->Top + bbox->Height))
+ if((gwin->win->MouseY > (bbox->Top + bbox->Height)) &&
+ ((gwin->win->MouseY - (bbox->Top + bbox->Height)) < AMI_DRAG_THRESHOLD))
drag_y_move = gwin->win->MouseY - (bbox->Top + bbox->Height);
-
- if(drag_x_move || drag_y_move)
- {
- gui_window_get_scroll(gwin->bw->window,
- &gwin->bw->window->scrollx, &gwin->bw->window->scrolly);
-
- gui_window_set_scroll(gwin->bw->window,
- gwin->bw->window->scrollx + drag_x_move,
- gwin->bw->window->scrolly + drag_y_move);
- }
}
if((x>=xs) && (y>=ys) && (x<width+xs) && (y<height+ys))
@@ -1607,6 +1603,16 @@ void ami_handle_msg(void)
return;
}
+ if(drag_x_move || drag_y_move)
+ {
+ gui_window_get_scroll(gwin->bw->window,
+ &gwin->bw->window->scrollx, &gwin->bw->window->scrolly);
+
+ gui_window_set_scroll(gwin->bw->window,
+ gwin->bw->window->scrollx + drag_x_move,
+ gwin->bw->window->scrolly + drag_y_move);
+ }
+
// ReplyMsg((struct Message *)message);
}
diff --git a/amiga/tree.c b/amiga/tree.c
index 3ad9c1812..59c9980fb 100755
--- a/amiga/tree.c
+++ b/amiga/tree.c
@@ -483,9 +483,9 @@ void ami_tree_open(struct treeview_window *twin,int type)
WA_Height, scrn->Height / 2,
WA_CustomScreen,scrn,
WA_ReportMouse,TRUE,
- WA_IDCMP,IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
+ WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_IDCMPUPDATE |
- IDCMP_EXTENDEDMOUSE,
+ IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY,
WINDOW_HorizProp,1,
WINDOW_VertProp,1,
WINDOW_IDCMPHook,&twin->scrollerhook,
@@ -533,9 +533,9 @@ void ami_tree_open(struct treeview_window *twin,int type)
WA_Height, scrn->Height / 2,
WA_CustomScreen,scrn,
WA_ReportMouse,TRUE,
- WA_IDCMP,IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
+ WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_IDCMPUPDATE |
- IDCMP_EXTENDEDMOUSE,
+ IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY | IDCMP_INTUITICKS,
WINDOW_HorizProp,1,
WINDOW_VertProp,1,
WINDOW_IDCMPHook,&twin->scrollerhook,
@@ -662,6 +662,7 @@ BOOL ami_tree_event(struct treeview_window *twin)
struct InputEvent *ie;
int nskey;
char fname[1024];
+ static int drag_x_move = 0, drag_y_move = 0;
while((result = RA_HandleInput(twin->objects[OID_MAIN],&code)) != WMHI_LASTMSG)
{
@@ -712,6 +713,9 @@ BOOL ami_tree_event(struct treeview_window *twin)
break;
case WMHI_MOUSEMOVE:
+ drag_x_move = 0;
+ drag_y_move = 0;
+
GetAttr(SPACE_AreaBox, twin->gadgets[GID_BROWSER], (ULONG *)&bbox);
GetAttr(SCROLLER_Top, twin->objects[OID_HSCROLL], (ULONG *)&xs);
@@ -722,21 +726,20 @@ BOOL ami_tree_event(struct treeview_window *twin)
if(twin->mouse_state & BROWSER_MOUSE_DRAG_ON)
{
- int drag_x_move = 0, drag_y_move = 0;
-
ami_drag_icon_move();
- if(twin->win->MouseX < bbox->Left)
+ if((twin->win->MouseX < bbox->Left) &&
+ ((twin->win->MouseX - bbox->Left) > -AMI_DRAG_THRESHOLD))
drag_x_move = twin->win->MouseX - bbox->Left;
- if(twin->win->MouseX > (bbox->Left + bbox->Width))
+ if((twin->win->MouseX > (bbox->Left + bbox->Width)) &&
+ ((twin->win->MouseX - (bbox->Left + bbox->Width)) < AMI_DRAG_THRESHOLD))
drag_x_move = twin->win->MouseX - (bbox->Left + bbox->Width);
- if(twin->win->MouseY < bbox->Top)
+ if((twin->win->MouseY < bbox->Top) &&
+ ((twin->win->MouseY - bbox->Top) > -AMI_DRAG_THRESHOLD))
drag_y_move = twin->win->MouseY - bbox->Top;
- if(twin->win->MouseY > (bbox->Top + bbox->Height))
+ if((twin->win->MouseY > (bbox->Top + bbox->Height)) &&
+ ((twin->win->MouseY - (bbox->Top + bbox->Height)) < AMI_DRAG_THRESHOLD))
drag_y_move = twin->win->MouseY - (bbox->Top + bbox->Height);
-
- if(drag_x_move || drag_y_move)
- ami_tree_scroll(twin, drag_x_move, drag_y_move);
}
if((x >= xs) && (y >= ys) && (x < bbox->Width + xs) &&
@@ -790,7 +793,6 @@ BOOL ami_tree_event(struct treeview_window *twin)
twin->mouse_state = BROWSER_MOUSE_PRESS_2;
break;
}
-//**
}
if(x < xs) x = xs;
@@ -1092,6 +1094,10 @@ BOOL ami_tree_event(struct treeview_window *twin)
break;
}
}
+
+ if(drag_x_move || drag_y_move)
+ ami_tree_scroll(twin, drag_x_move, drag_y_move);
+
return FALSE;
}