summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2010-12-16 23:28:33 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2010-12-16 23:28:33 +0000
commit96cb4b40e728830d36ae90d11fc4c405c82fdc21 (patch)
treead658c2e93a473986c3742a0ab8e0c380fc15acf
parentddd677e72a8cdc6c56a467ed75b0e196b8eafbaa (diff)
downloadnetsurf-96cb4b40e728830d36ae90d11fc4c405c82fdc21.tar.gz
netsurf-96cb4b40e728830d36ae90d11fc4c405c82fdc21.tar.bz2
Allow double-clicks in main browser and middle button double-clicks in treeview
svn path=/trunk/netsurf/; revision=11083
-rwxr-xr-xamiga/gui.c58
-rwxr-xr-xamiga/gui.h1
-rwxr-xr-xamiga/tree.c25
3 files changed, 79 insertions, 5 deletions
diff --git a/amiga/gui.c b/amiga/gui.c
index 1427403c4..f3ef8e68d 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -863,6 +863,7 @@ void ami_handle_msg(void)
struct Node *tabnode;
int i, nskey;
struct browser_window *closedbw;
+ struct timeval curtime;
if(IsMinListEmpty(window_list))
{
@@ -1138,22 +1139,71 @@ void ami_handle_msg(void)
case SELECTUP:
if(gwin->mouse_state & BROWSER_MOUSE_PRESS_1)
{
- browser_window_mouse_click(gwin->bw,BROWSER_MOUSE_CLICK_1 | gwin->key_state,x,y);
+ CurrentTime(&curtime.tv_sec, &curtime.tv_usec);
+
+ gwin->mouse_state = BROWSER_MOUSE_CLICK_1;
+
+ if(gwin->lastclick.tv_sec)
+ {
+ if(DoubleClick(gwin->lastclick.tv_sec,
+ gwin->lastclick.tv_usec,
+ curtime.tv_sec, curtime.tv_usec))
+ gwin->mouse_state |= BROWSER_MOUSE_DOUBLE_CLICK;
+ }
+
+ browser_window_mouse_click(gwin->bw,
+ gwin->mouse_state | gwin->key_state,x,y);
+
+ if(gwin->mouse_state & BROWSER_MOUSE_DOUBLE_CLICK)
+ {
+ gwin->lastclick.tv_sec = 0;
+ gwin->lastclick.tv_usec = 0;
+ }
+ else
+ {
+ gwin->lastclick.tv_sec = curtime.tv_sec;
+ gwin->lastclick.tv_usec = curtime.tv_usec;
+ }
}
else
{
- browser_window_mouse_drag_end(gwin->bw,0,x,y);
+ browser_window_mouse_drag_end(gwin->bw, 0, x, y);
}
gwin->mouse_state=0;
break;
+
case MIDDLEUP:
if(gwin->mouse_state & BROWSER_MOUSE_PRESS_2)
{
- browser_window_mouse_click(gwin->bw,BROWSER_MOUSE_CLICK_2 | gwin->key_state,x,y);
+ CurrentTime(&curtime.tv_sec, &curtime.tv_usec);
+
+ gwin->mouse_state = BROWSER_MOUSE_CLICK_2;
+
+ if(gwin->lastclick.tv_sec)
+ {
+ if(DoubleClick(gwin->lastclick.tv_sec,
+ gwin->lastclick.tv_usec,
+ curtime.tv_sec, curtime.tv_usec))
+ gwin->mouse_state |= BROWSER_MOUSE_DOUBLE_CLICK;
+ }
+
+ browser_window_mouse_click(gwin->bw,
+ gwin->mouse_state | gwin->key_state,x,y);
+
+ if(gwin->mouse_state & BROWSER_MOUSE_DOUBLE_CLICK)
+ {
+ gwin->lastclick.tv_sec = 0;
+ gwin->lastclick.tv_usec = 0;
+ }
+ else
+ {
+ gwin->lastclick.tv_sec = curtime.tv_sec;
+ gwin->lastclick.tv_usec = curtime.tv_usec;
+ }
}
else
{
- browser_window_mouse_drag_end(gwin->bw,0,x,y);
+ browser_window_mouse_drag_end(gwin->bw, 0, x, y);
}
gwin->mouse_state=0;
break;
diff --git a/amiga/gui.h b/amiga/gui.h
index cd06b395d..a567d88a8 100755
--- a/amiga/gui.h
+++ b/amiga/gui.h
@@ -105,6 +105,7 @@ struct gui_window_2 {
char *status;
char *wintitle;
char *helphints[GID_LAST];
+ struct timeval lastclick;
};
struct gui_window
diff --git a/amiga/tree.c b/amiga/tree.c
index 0f6ac3c62..c4d1ffbed 100755
--- a/amiga/tree.c
+++ b/amiga/tree.c
@@ -840,11 +840,34 @@ BOOL ami_tree_event(struct treeview_window *twin)
twin->drag_x = 0;
twin->drag_y = 0;
break;
+
case MIDDLEUP:
if(twin->mouse_state & BROWSER_MOUSE_PRESS_2)
{
+ CurrentTime(&curtime.tv_sec,&curtime.tv_usec);
+
+ twin->mouse_state = BROWSER_MOUSE_CLICK_2;
+
+ if(twin->lastclick.tv_sec)
+ {
+ if(DoubleClick(twin->lastclick.tv_sec,
+ twin->lastclick.tv_usec,
+ curtime.tv_sec, curtime.tv_usec))
+ twin->mouse_state |= BROWSER_MOUSE_DOUBLE_CLICK;
+ }
tree_mouse_action(twin->tree,
- BROWSER_MOUSE_CLICK_2 | twin->key_state, x, y);
+ twin->mouse_state | twin->key_state, x, y);
+
+ if(twin->mouse_state & BROWSER_MOUSE_DOUBLE_CLICK)
+ {
+ twin->lastclick.tv_sec = 0;
+ twin->lastclick.tv_usec = 0;
+ }
+ else
+ {
+ twin->lastclick.tv_sec = curtime.tv_sec;
+ twin->lastclick.tv_usec = curtime.tv_usec;
+ }
}
else ami_tree_drag_end(twin, x, y);