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.
This commit is contained in:
Matthias Clasen 2020-05-29 19:39:15 -04:00
parent 8ce1034e87
commit 66120cff4b

View File

@ -289,15 +289,28 @@ gtk_event_controller_filter_crossing (GtkEventController *controller,
const GtkCrossingData *data) const GtkCrossingData *data)
{ {
GtkEventControllerPrivate *priv; GtkEventControllerPrivate *priv;
GtkWidget *old_target, *new_target;
priv = gtk_event_controller_get_instance_private (controller); priv = gtk_event_controller_get_instance_private (controller);
if (priv->widget && !gtk_widget_is_sensitive (priv->widget)) if (priv->widget && !gtk_widget_is_sensitive (priv->widget))
return TRUE; return TRUE;
if (priv->limit == GTK_LIMIT_SAME_NATIVE && old_target = data->old_target;
(!same_native (priv->widget, data->old_target) || new_target = data->new_target;
!same_native (priv->widget, 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 TRUE;
return FALSE; return FALSE;