[gtk/wip/carlosg/imwayland: 5658/5659] gtkgesture: Preserve PointData till after ::end emission on cancel



commit 1aa8d4bbb5bb5c1a144a0aa3f4a5579ef7425a9c
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed Feb 7 19:20:04 2018 +0100

    gtkgesture: Preserve PointData till after ::end emission on cancel
    
    This is done in other paths so it is reliable to get coordinates for
    the given sequence on ::end, but breaks here.

 gtk/gtkgesture.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkgesture.c b/gtk/gtkgesture.c
index 4cabe4a242..c845914140 100644
--- a/gtk/gtkgesture.c
+++ b/gtk/gtkgesture.c
@@ -152,6 +152,7 @@ struct _PointData
 
   guint press_handled : 1;
   guint state : 2;
+  guint cancelled : 1;
 };
 
 struct _GtkGesturePrivate
@@ -252,6 +253,7 @@ _gtk_gesture_get_n_touchpad_points (GtkGesture *gesture,
 
   if (only_active &&
       (data->state == GTK_EVENT_SEQUENCE_DENIED ||
+       data->cancelled ||
        (event_type == GDK_TOUCHPAD_SWIPE && phase == GDK_TOUCHPAD_GESTURE_PHASE_END) ||
        (event_type == GDK_TOUCHPAD_PINCH && phase == GDK_TOUCHPAD_GESTURE_PHASE_END)))
     return 0;
@@ -281,6 +283,7 @@ _gtk_gesture_get_n_touch_points (GtkGesture *gesture,
 
       if (only_active &&
           (data->state == GTK_EVENT_SEQUENCE_DENIED ||
+           data->cancelled ||
            event_type == GDK_TOUCH_END ||
            event_type == GDK_BUTTON_RELEASE))
         continue;
@@ -584,15 +587,17 @@ _gtk_gesture_cancel_all (GtkGesture *gesture)
   GdkEventSequence *sequence;
   GtkGesturePrivate *priv;
   GHashTableIter iter;
+  PointData *data;
 
   priv = gtk_gesture_get_instance_private (gesture);
   g_hash_table_iter_init (&iter, priv->points);
 
-  while (g_hash_table_iter_next (&iter, (gpointer*) &sequence, NULL))
+  while (g_hash_table_iter_next (&iter, (gpointer*) &sequence, (gpointer*) &data))
     {
       g_signal_emit (gesture, signals[CANCEL], 0, sequence);
-      g_hash_table_iter_remove (&iter);
+      data->cancelled = TRUE;
       _gtk_gesture_check_recognized (gesture, sequence);
+      g_hash_table_iter_remove (&iter);
     }
 
   _gtk_gesture_check_empty (gesture);
@@ -1448,8 +1453,9 @@ _gtk_gesture_cancel_sequence (GtkGesture       *gesture,
     return FALSE;
 
   g_signal_emit (gesture, signals[CANCEL], 0, sequence);
-  _gtk_gesture_remove_point (gesture, data->event);
+  data->cancelled = TRUE;
   _gtk_gesture_check_recognized (gesture, sequence);
+  _gtk_gesture_remove_point (gesture, data->event);
 
   return TRUE;
 }


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