[gtk+] widget: Ensure all gestures outside a grab scope are cancelled



commit 25f5da5018e80c835d47be791e5132661808c5bc
Author: Carlos Garnacho <carlosg gnome org>
Date:   Tue Jun 3 15:04:25 2014 +0200

    widget: Ensure all gestures outside a grab scope are cancelled
    
    This code is a product of early stages in the gestures branch, where
    capturing would have an effect outside grab boundaries. But this isn't
    really the case, so every gesture outside the grab scope must be reset
    to avoid keeping stale data.

 gtk/gtkwidget.c |   35 +++++------------------------------
 1 files changed, 5 insertions(+), 30 deletions(-)
---
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 8b90c3c..2aa5acc 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -16887,40 +16887,15 @@ event_controller_grab_notify (GtkWidget           *widget,
                               gboolean             was_grabbed,
                               EventControllerData *data)
 {
-  GtkWidget *grab_widget, *toplevel;
-  GtkPropagationPhase phase;
-  GtkWindowGroup *group;
-  GdkDevice *device;
-
-  device = gtk_gesture_get_device (GTK_GESTURE (data->controller));
-  phase = gtk_event_controller_get_propagation_phase (data->controller);
-
-  if (!device)
-    return;
-
-  toplevel = gtk_widget_get_toplevel (widget);
-
-  if (GTK_IS_WINDOW (toplevel))
-    group = gtk_window_get_group (GTK_WINDOW (toplevel));
-  else
-    group = gtk_window_get_group (NULL);
+  GdkDevice *device = NULL;
 
-  grab_widget = gtk_window_group_get_current_device_grab (group, device);
-
-  if (!grab_widget)
-    grab_widget = gtk_window_group_get_current_grab (group);
+  if (GTK_IS_GESTURE (data->controller))
+    device = gtk_gesture_get_device (GTK_GESTURE (data->controller));
 
-  if (!grab_widget || grab_widget == widget)
+  if (!device || !gtk_widget_device_is_shadowed (widget, device))
     return;
 
-  if ((phase != GTK_PHASE_CAPTURE &&
-       !gtk_widget_is_ancestor (widget, grab_widget)) ||
-      (phase == GTK_PHASE_CAPTURE &&
-       !gtk_widget_is_ancestor (widget, grab_widget) &&
-       !gtk_widget_is_ancestor (grab_widget, widget)))
-    {
-      gtk_event_controller_reset (data->controller);
-    }
+  gtk_event_controller_reset (data->controller);
 }
 
 static void


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