diff options
author | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2010-12-16 23:28:33 +0000 |
---|---|---|
committer | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2010-12-16 23:28:33 +0000 |
commit | 96cb4b40e728830d36ae90d11fc4c405c82fdc21 (patch) | |
tree | ad658c2e93a473986c3742a0ab8e0c380fc15acf | |
parent | ddd677e72a8cdc6c56a467ed75b0e196b8eafbaa (diff) | |
download | netsurf-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-x | amiga/gui.c | 58 | ||||
-rwxr-xr-x | amiga/gui.h | 1 | ||||
-rwxr-xr-x | amiga/tree.c | 25 |
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); |