mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-09-30 11:07:38 +00:00
GtkListBox: Protect against reentrancy.
Activating a row may destroy the widget, so keep a ref since we're doing thing to the listbox after emission.
This commit is contained in:
parent
0f93b7f6c4
commit
220eb45ef0
@ -1233,24 +1233,30 @@ gtk_list_box_real_button_release_event (GtkWidget *widget,
|
||||
GtkListBox *list_box = GTK_LIST_BOX (widget);
|
||||
GtkListBoxPrivate *priv = list_box->priv;
|
||||
|
||||
/* Take a ref to protect against reentrancy (i.e. the activation may destroy the widget) */
|
||||
g_object_ref (list_box);
|
||||
|
||||
if (event->button == GDK_BUTTON_PRIMARY)
|
||||
{
|
||||
if (priv->active_row != NULL &&
|
||||
priv->active_row_active)
|
||||
{
|
||||
gtk_widget_unset_state_flags (GTK_WIDGET (priv->active_row),
|
||||
GTK_STATE_FLAG_ACTIVE);
|
||||
|
||||
if (priv->activate_single_click)
|
||||
gtk_list_box_select_and_activate (list_box, priv->active_row);
|
||||
else
|
||||
gtk_list_box_update_selected (list_box, priv->active_row);
|
||||
|
||||
gtk_widget_unset_state_flags (GTK_WIDGET (priv->active_row),
|
||||
GTK_STATE_FLAG_ACTIVE);
|
||||
}
|
||||
priv->active_row = NULL;
|
||||
priv->active_row_active = FALSE;
|
||||
gtk_widget_queue_draw (GTK_WIDGET (list_box));
|
||||
}
|
||||
|
||||
g_object_unref (list_box);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user