[gtk/matthiasc/for-master: 2/2] eventcontroller: Fix crossing event scopes



commit 66120cff4b4d9685a093bba7f201a1c025aadcf9
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri May 29 19:39:15 2020 -0400

    eventcontroller: Fix crossing event scopes
    
    We want to deliver crossing events to controllers
    with scope same-native as long as at least one of
    the targets is on the same native. As a new approach,
    treat out-of-scope targets like NULL, and deliver
    crossing events as long as one of the targets is
    not NULL.

 gtk/gtkeventcontroller.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkeventcontroller.c b/gtk/gtkeventcontroller.c
index c513ea093d..432990ed91 100644
--- a/gtk/gtkeventcontroller.c
+++ b/gtk/gtkeventcontroller.c
@@ -289,15 +289,28 @@ gtk_event_controller_filter_crossing (GtkEventController    *controller,
                                       const GtkCrossingData *data)
 {
   GtkEventControllerPrivate *priv;
+  GtkWidget *old_target, *new_target;
 
   priv = gtk_event_controller_get_instance_private (controller);
 
   if (priv->widget && !gtk_widget_is_sensitive (priv->widget))
     return TRUE;
 
-  if (priv->limit == GTK_LIMIT_SAME_NATIVE &&
-      (!same_native (priv->widget, data->old_target) ||
-       !same_native (priv->widget, data->new_target)))
+  old_target = data->old_target;
+  new_target = data->new_target;
+
+  if (priv->limit == GTK_LIMIT_SAME_NATIVE)
+    {
+      /* treat out-of-scope targets like NULL */
+
+      if (!same_native (priv->widget, old_target))
+        old_target = NULL;
+
+      if (!same_native (priv->widget, new_target))
+        new_target = NULL;
+    }
+
+  if (old_target == NULL && new_target == NULL)
     return TRUE;
 
   return FALSE;


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