[gtk/wip/carlosg/input-fixes: 7/7] gtktreeview: Ensure to transiently prelight on touch input



commit 9ed579505d40fb5283c8d31e096130dbe260e093
Author: Carlos Garnacho <carlosg gnome org>
Date:   Fri Apr 24 23:14:51 2020 +0200

    gtktreeview: Ensure to transiently prelight on touch input
    
    Some machinery (like clicking on expander) relies on prelight state
    being up to date, but we don't set prelight on touch events. Do that
    transiently, as long as a row is clicked.
    
    Fixes tapping on expanders.

 gtk/gtktreeview.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)
---
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index 30f97c408e..d7be0c9ac6 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -832,6 +832,7 @@ static void     column_sizing_notify                         (GObject
                                                               GParamSpec         *pspec,
                                                               gpointer            data);
 static void     gtk_tree_view_stop_rubber_band               (GtkTreeView        *tree_view);
+static void     ensure_unprelighted                          (GtkTreeView        *tree_view);
 static void     update_prelight                              (GtkTreeView        *tree_view,
                                                               int                 x,
                                                               int                 y);
@@ -2788,6 +2789,7 @@ gtk_tree_view_click_gesture_pressed (GtkGestureClick *gesture,
 
   gtk_tree_view_stop_editing (tree_view, FALSE);
   button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture));
+  sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
 
   if (button > 3)
     {
@@ -2813,6 +2815,9 @@ gtk_tree_view_click_gesture_pressed (GtkGestureClick *gesture,
       return;
     }
 
+  if (sequence)
+    update_prelight (tree_view, x, y);
+
   /* are we in an arrow? */
   if (tree_view->prelight_node &&
       tree_view->arrow_prelit &&
@@ -2913,7 +2918,6 @@ gtk_tree_view_click_gesture_pressed (GtkGestureClick *gesture,
 
   _gtk_tree_view_set_focus_column (tree_view, column);
 
-  sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
   event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence);
   modifiers = gdk_event_get_modifier_state (event);
 
@@ -3270,10 +3274,12 @@ gtk_tree_view_click_gesture_released (GtkGestureClick *gesture,
                                       gdouble          y,
                                       GtkTreeView     *tree_view)
 {
+  GdkEventSequence *sequence;
   gboolean modify, extend;
   guint button;
 
   button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture));
+  sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
 
   if (button != GDK_BUTTON_PRIMARY ||
       tree_view->button_pressed_node == NULL ||
@@ -3312,6 +3318,9 @@ gtk_tree_view_click_gesture_released (GtkGestureClick *gesture,
 
   tree_view->button_pressed_tree = NULL;
   tree_view->button_pressed_node = NULL;
+
+  if (sequence)
+    ensure_unprelighted (tree_view);
 }
 
 /* GtkWidget::motion_event function set.


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