From 66120cff4b4d9685a093bba7f201a1c025aadcf9 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 29 May 2020 19:39:15 -0400 Subject: [PATCH] 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;