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
committed by Ahmed Eldemery
parent 39d71dbb0a
commit 002376f837

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);
}