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:
committed by
Ahmed Eldemery
parent
39d71dbb0a
commit
002376f837
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user