[gtk: 1/2] treeview: Check for column header area in row click/drag gestures




commit c9a48736d6f03e31683c5014e3a81904a90e129f
Author: Mat <mail mathias is>
Date:   Sun Jul 17 15:48:30 2022 +0300

    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

 gtk/gtktreeview.c | 17 ++++++++++++-----
 1 file 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,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]