popovermenu: Use a weak ref for active item
Otherwise, we can end up with a dangling pointer, leading to badness.
This commit is contained in:
@@ -184,7 +184,10 @@ gtk_popover_menu_set_active_item (GtkPopoverMenu *menu,
|
||||
if (menu->active_item != item)
|
||||
{
|
||||
if (menu->active_item)
|
||||
gtk_widget_unset_state_flags (menu->active_item, GTK_STATE_FLAG_SELECTED);
|
||||
{
|
||||
gtk_widget_unset_state_flags (menu->active_item, GTK_STATE_FLAG_SELECTED);
|
||||
g_object_remove_weak_pointer (G_OBJECT (menu->active_item), (gpointer *)&menu->active_item);
|
||||
}
|
||||
|
||||
menu->active_item = item;
|
||||
|
||||
@@ -192,6 +195,8 @@ gtk_popover_menu_set_active_item (GtkPopoverMenu *menu,
|
||||
{
|
||||
GtkWidget *popover;
|
||||
|
||||
g_object_add_weak_pointer (G_OBJECT (menu->active_item), (gpointer *)&menu->active_item);
|
||||
|
||||
gtk_widget_set_state_flags (menu->active_item, GTK_STATE_FLAG_SELECTED, FALSE);
|
||||
if (GTK_IS_MODEL_BUTTON (item))
|
||||
g_object_get (item, "popover", &popover, NULL);
|
||||
@@ -277,6 +282,12 @@ gtk_popover_menu_dispose (GObject *object)
|
||||
{
|
||||
GtkPopoverMenu *popover = GTK_POPOVER_MENU (object);
|
||||
|
||||
if (popover->active_item)
|
||||
{
|
||||
g_object_remove_weak_pointer (G_OBJECT (popover->active_item), (gpointer *)&popover->active_item);
|
||||
popover->active_item = NULL;
|
||||
}
|
||||
|
||||
g_clear_object (&popover->model);
|
||||
|
||||
G_OBJECT_CLASS (gtk_popover_menu_parent_class)->dispose (object);
|
||||
|
||||
Reference in New Issue
Block a user