From ad7283780d5f6a6949d53530ea36f0cbe6e390fb Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Thu, 16 Dec 2010 20:30:10 +0000 Subject: When we get a motion notify event, only set of a drag in the core if the mouse has moved at least 5px from where it was pressed. svn path=/trunk/netsurf/; revision=11076 --- gtk/gtk_treeview.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'gtk/gtk_treeview.c') diff --git a/gtk/gtk_treeview.c b/gtk/gtk_treeview.c index 13b8c426e..c896fc7e6 100644 --- a/gtk/gtk_treeview.c +++ b/gtk/gtk_treeview.c @@ -25,6 +25,7 @@ #include #include #include +#include #include "desktop/tree.h" #include "desktop/tree_url_node.h" @@ -41,6 +42,7 @@ struct nsgtk_treeview { GtkDrawingArea *drawing_area; int mouse_pressed_x; int mouse_pressed_y; + int last_x, last_y; browser_mouse_state mouse_state; struct tree *tree; }; @@ -263,8 +265,13 @@ gboolean nsgtk_tree_window_button_press_event(GtkWidget *widget, if (event->state & GDK_CONTROL_MASK) tw->mouse_state |= BROWSER_MOUSE_MOD_2; if (event->state & GDK_MOD1_MASK) - tw->mouse_state |= BROWSER_MOUSE_MOD_3; - + tw->mouse_state |= BROWSER_MOUSE_MOD_3; + + /* Record where we pressed, for use when determining whether to start + * a drag in motion notify events. */ + tw->last_x = event->x; + tw->last_y = event->y; + tree_mouse_action(tree, tw->mouse_state, event->x, event->y); return TRUE; @@ -334,8 +341,19 @@ gboolean nsgtk_tree_window_motion_notify_event(GtkWidget *widget, bool alt = event->state & GDK_MOD1_MASK; struct nsgtk_treeview *tw = (struct nsgtk_treeview *) g; struct tree *tree = tw->tree; - - + + if ((abs(event->x - tw->last_x) < 5) && + (abs(event->y - tw->last_y) < 5)) { + /* Mouse hasn't moved far enough from press coordinate for this + * to be considered a drag. */ + return FALSE; + } else { + /* This is a drag, ensure it's always treated as such, even if + * we drag back over the press location */ + tw->last_x = INT_MIN; + tw->last_y = INT_MIN; + } + /* Handle modifiers being removed */ if (tw->mouse_state & BROWSER_MOUSE_MOD_1 && !shift) tw->mouse_state ^= BROWSER_MOUSE_MOD_1; -- cgit v1.2.3