diff options
author | Mat <mail@mathias.is> | 2022-07-17 15:48:30 +0300 |
---|---|---|
committer | Mat <mail@mathias.is> | 2022-07-17 17:36:38 +0300 |
commit | c9a48736d6f03e31683c5014e3a81904a90e129f (patch) | |
tree | db59d50dfe2e59763605dd869fa4252b9501879f /gtk/gtktreeview.c | |
parent | 188cb49b44bc7426290fc8c0c8fd68de37b7423b (diff) | |
download | gtk+-c9a48736d6f03e31683c5014e3a81904a90e129f.tar.gz |
treeview: Check for column header area in row click/drag gestures
Bail out if a row click/drag gesture is performed in the column header area,
since separate gestures handle column headers.
Fixes #4453
Diffstat (limited to 'gtk/gtktreeview.c')
-rw-r--r-- | gtk/gtktreeview.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 60e54f6da7..a7823e9b1a 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -2736,6 +2736,13 @@ gtk_tree_view_click_gesture_pressed (GtkGestureClick *gesture, gboolean rtl; GtkWidget *target; + gtk_tree_view_convert_widget_to_bin_window_coords (tree_view, x, y, + &bin_x, &bin_y); + + /* Are we clicking a column header? */ + if (bin_y < 0) + return; + /* check if this is a click in a child widget */ target = gtk_event_controller_get_target (GTK_EVENT_CONTROLLER (gesture)); if (gtk_widget_is_ancestor (target, widget)) @@ -2751,11 +2758,6 @@ gtk_tree_view_click_gesture_pressed (GtkGestureClick *gesture, return; } - /* Because grab_focus can cause reentrancy, we delay grab_focus until after - * we're done handling the button press. - */ - gtk_tree_view_convert_widget_to_bin_window_coords (tree_view, x, y, - &bin_x, &bin_y); gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED); if (n_press > 1) @@ -3002,6 +3004,11 @@ gtk_tree_view_drag_gesture_begin (GtkGestureDrag *gesture, gtk_tree_view_convert_widget_to_bin_window_coords (tree_view, start_x, start_y, &bin_x, &bin_y); + + /* Are we dragging a column header? */ + if (bin_y < 0) + return; + priv->press_start_x = priv->rubber_band_x = bin_x; priv->press_start_y = priv->rubber_band_y = bin_y; gtk_tree_rbtree_find_offset (priv->tree, bin_y + priv->dy, |