Fix motion event handling in GTK treeview
svn path=/trunk/netsurf/; revision=12622
This commit is contained in:
parent
b0aeeb1e78
commit
f75b0fca43
|
@ -40,6 +40,7 @@ struct nsgtk_treeview {
|
|||
GtkWindow *window;
|
||||
GtkScrolledWindow *scrolled;
|
||||
GtkDrawingArea *drawing_area;
|
||||
bool mouse_pressed;
|
||||
int mouse_pressed_x;
|
||||
int mouse_pressed_y;
|
||||
int last_x, last_y;
|
||||
|
@ -220,8 +221,8 @@ gboolean nsgtk_tree_window_button_press_event(GtkWidget *widget,
|
|||
struct tree *tree = tw->tree;
|
||||
|
||||
gtk_widget_grab_focus(GTK_WIDGET(tw->drawing_area));
|
||||
|
||||
|
||||
|
||||
tw->mouse_pressed = true;
|
||||
tw->mouse_pressed_x = event->x;
|
||||
tw->mouse_pressed_y = event->y;
|
||||
|
||||
|
@ -279,35 +280,35 @@ gboolean nsgtk_tree_window_button_release_event(GtkWidget *widget,
|
|||
tw->mouse_state ^= (BROWSER_MOUSE_PRESS_2 |
|
||||
BROWSER_MOUSE_CLICK_2);
|
||||
|
||||
/* Handle modifiers being removed */
|
||||
if (tw->mouse_state & BROWSER_MOUSE_MOD_1 && !shift)
|
||||
tw->mouse_state ^= BROWSER_MOUSE_MOD_1;
|
||||
if (tw->mouse_state & BROWSER_MOUSE_MOD_2 && !ctrl)
|
||||
tw->mouse_state ^= BROWSER_MOUSE_MOD_2;
|
||||
if (tw->mouse_state & BROWSER_MOUSE_MOD_3 && !alt)
|
||||
tw->mouse_state ^= BROWSER_MOUSE_MOD_3;
|
||||
/* Handle modifiers being removed */
|
||||
if (tw->mouse_state & BROWSER_MOUSE_MOD_1 && !shift)
|
||||
tw->mouse_state ^= BROWSER_MOUSE_MOD_1;
|
||||
if (tw->mouse_state & BROWSER_MOUSE_MOD_2 && !ctrl)
|
||||
tw->mouse_state ^= BROWSER_MOUSE_MOD_2;
|
||||
if (tw->mouse_state & BROWSER_MOUSE_MOD_3 && !alt)
|
||||
tw->mouse_state ^= BROWSER_MOUSE_MOD_3;
|
||||
|
||||
|
||||
if (tw->mouse_state &
|
||||
(BROWSER_MOUSE_CLICK_1 | BROWSER_MOUSE_CLICK_2
|
||||
| BROWSER_MOUSE_DOUBLE_CLICK))
|
||||
tree_mouse_action(tree, tw->mouse_state,
|
||||
event->x, event->y);
|
||||
else
|
||||
tree_drag_end(tree, tw->mouse_state,
|
||||
tw->mouse_pressed_x,
|
||||
tw->mouse_pressed_y,
|
||||
event->x, event->y);
|
||||
if (tw->mouse_state &
|
||||
(BROWSER_MOUSE_CLICK_1 | BROWSER_MOUSE_CLICK_2
|
||||
| BROWSER_MOUSE_DOUBLE_CLICK))
|
||||
tree_mouse_action(tree, tw->mouse_state,
|
||||
event->x, event->y);
|
||||
else
|
||||
tree_drag_end(tree, tw->mouse_state,
|
||||
tw->mouse_pressed_x,
|
||||
tw->mouse_pressed_y,
|
||||
event->x, event->y);
|
||||
|
||||
|
||||
tw->mouse_state = 0;
|
||||
|
||||
tw->mouse_state = 0;
|
||||
tw->mouse_pressed = false;
|
||||
|
||||
return TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean nsgtk_tree_window_motion_notify_event(GtkWidget *widget,
|
||||
GdkEventButton *event, gpointer g)
|
||||
GdkEventMotion *event, gpointer g)
|
||||
{
|
||||
bool shift = event->state & GDK_SHIFT_MASK;
|
||||
bool ctrl = event->state & GDK_CONTROL_MASK;
|
||||
|
@ -315,6 +316,9 @@ gboolean nsgtk_tree_window_motion_notify_event(GtkWidget *widget,
|
|||
struct nsgtk_treeview *tw = (struct nsgtk_treeview *) g;
|
||||
struct tree *tree = tw->tree;
|
||||
|
||||
if (tw->mouse_pressed == false)
|
||||
return TRUE;
|
||||
|
||||
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
|
||||
|
@ -503,6 +507,7 @@ struct nsgtk_treeview *nsgtk_treeview_create(unsigned int flags,
|
|||
tv->drawing_area = drawing_area;
|
||||
tv->tree = tree_create(flags, &nsgtk_tree_callbacks, tv);
|
||||
tv->mouse_state = 0;
|
||||
tv->mouse_pressed = false;
|
||||
|
||||
gtk_widget_modify_bg(GTK_WIDGET(drawing_area), GTK_STATE_NORMAL,
|
||||
&((GdkColor) { 0, 0xffff, 0xffff, 0xffff } ));
|
||||
|
|
|
@ -47,7 +47,7 @@ gboolean nsgtk_tree_window_button_press_event(GtkWidget *widget,
|
|||
gboolean nsgtk_tree_window_button_release_event(GtkWidget *widget,
|
||||
GdkEventButton *event, gpointer g);
|
||||
gboolean nsgtk_tree_window_motion_notify_event(GtkWidget *widget,
|
||||
GdkEventButton *event, gpointer g);
|
||||
GdkEventMotion *event, gpointer g);
|
||||
gboolean nsgtk_tree_window_keypress_event(GtkWidget *widget, GdkEventKey *event,
|
||||
gpointer g);
|
||||
|
||||
|
|
Loading…
Reference in New Issue