treeview: Don't claim event sequence too early
authorMat <mail@mathias.is>
Sun, 17 Jul 2022 03:32:20 +0000 (06:32 +0300)
committerMat <mail@mathias.is>
Fri, 2 Sep 2022 12:04:43 +0000 (15:04 +0300)
We want to claim the event sequence in the click gesture when appropriate,
such as activating a row or clicking an editable cell, but this is currently
done too early, preventing other gestures for drag-and-drop and rubberband
selection entirely.

Fixes #3649
Fixes #3985
Fixes #4669

gtk/gtktreeview.c

index 5c627b4fb2ea6a7552ff1f1376e0fbb085e2fcc5..07e02ee7d4e136e6525f2093af3b1477cf364122 100644 (file)
@@ -2758,8 +2758,6 @@ gtk_tree_view_click_gesture_pressed (GtkGestureClick *gesture,
       return;
     }
 
-  gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
-
   if (n_press > 1)
     gtk_gesture_set_state (priv->drag_gesture,
                            GTK_EVENT_SEQUENCE_DENIED);
@@ -2787,6 +2785,7 @@ gtk_tree_view_click_gesture_pressed (GtkGestureClick *gesture,
         }
 
       grab_focus_and_unset_draw_keyfocus (tree_view);
+      gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
       return;
     }
 
@@ -2910,6 +2909,7 @@ gtk_tree_view_click_gesture_pressed (GtkGestureClick *gesture,
             {
               GtkCellArea *area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (column));
               cell_editable = gtk_cell_area_get_edit_widget (area);
+              gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
 
               if (cell_editable != NULL)
                 {
@@ -2967,7 +2967,10 @@ gtk_tree_view_click_gesture_pressed (GtkGestureClick *gesture,
     }
 
   if (button == GDK_BUTTON_PRIMARY && n_press == 2)
-    gtk_tree_view_row_activated (tree_view, path, column);
+    {
+      gtk_tree_view_row_activated (tree_view, path, column);
+      gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
+    }
   else
     {
       if (n_press == 1)