widget: Avoid a crash in crossing event handling

We need to make sure that the crossing data stays
alive until we are done handling it, so take references
on all the widgets in it.
This commit is contained in:
Matthias Clasen 2020-08-26 07:24:54 -04:00
parent eef1818cee
commit 44741e1b77

View File

@ -4376,12 +4376,30 @@ gtk_widget_handle_crossing (GtkWidget *widget,
g_object_ref (widget);
if (crossing->old_target)
g_object_ref (crossing->old_target);
if (crossing->new_target)
g_object_ref (crossing->new_target);
if (crossing->old_descendent)
g_object_ref (crossing->old_descendent);
if (crossing->new_descendent)
g_object_ref (crossing->new_descendent);
for (l = priv->event_controllers; l; l = l->next)
{
GtkEventController *controller = l->data;
gtk_event_controller_handle_crossing (controller, crossing, x, y);
}
if (crossing->old_target)
g_object_unref (crossing->old_target);
if (crossing->new_target)
g_object_unref (crossing->new_target);
if (crossing->old_descendent)
g_object_unref (crossing->old_descendent);
if (crossing->new_descendent)
g_object_unref (crossing->new_descendent);
g_object_unref (widget);
}