gtkmenubutton: remove weak pointer when needed
We must make sure to remove the weak pointer when disposing the widget or when resetting the align widget otherwise glib will try to nullify invalid memory.
This commit is contained in:
parent
5830363787
commit
1beb9db7b0
@ -791,6 +791,23 @@ gtk_menu_button_get_menu_model (GtkMenuButton *menu_button)
|
|||||||
return menu_button->priv->model;
|
return menu_button->priv->model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
set_align_widget_pointer (GtkMenuButton *menu_button,
|
||||||
|
GtkWidget *align_widget)
|
||||||
|
{
|
||||||
|
GtkMenuButtonPrivate *priv;
|
||||||
|
|
||||||
|
priv = menu_button->priv;
|
||||||
|
|
||||||
|
if (priv->align_widget)
|
||||||
|
g_object_remove_weak_pointer (G_OBJECT (priv->align_widget), (gpointer *) &priv->align_widget);
|
||||||
|
|
||||||
|
priv->align_widget = align_widget;
|
||||||
|
|
||||||
|
if (align_widget)
|
||||||
|
g_object_add_weak_pointer (G_OBJECT (priv->align_widget), (gpointer *) &priv->align_widget);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gtk_menu_button_set_align_widget:
|
* gtk_menu_button_set_align_widget:
|
||||||
* @menu_button: a #GtkMenuButton
|
* @menu_button: a #GtkMenuButton
|
||||||
@ -817,10 +834,7 @@ gtk_menu_button_set_align_widget (GtkMenuButton *menu_button,
|
|||||||
if (priv->align_widget == align_widget)
|
if (priv->align_widget == align_widget)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
priv->align_widget = align_widget;
|
set_align_widget_pointer (menu_button, align_widget);
|
||||||
|
|
||||||
if (priv->align_widget)
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (priv->align_widget), (gpointer *) &priv->align_widget);
|
|
||||||
|
|
||||||
g_object_notify (G_OBJECT (menu_button), "align-widget");
|
g_object_notify (G_OBJECT (menu_button), "align-widget");
|
||||||
}
|
}
|
||||||
@ -914,6 +928,8 @@ gtk_menu_button_dispose (GObject *object)
|
|||||||
priv->popup = NULL;
|
priv->popup = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_align_widget_pointer (GTK_MENU_BUTTON (object), NULL);
|
||||||
|
|
||||||
g_clear_object (&priv->model);
|
g_clear_object (&priv->model);
|
||||||
|
|
||||||
G_OBJECT_CLASS (gtk_menu_button_parent_class)->dispose (object);
|
G_OBJECT_CLASS (gtk_menu_button_parent_class)->dispose (object);
|
||||||
|
Loading…
Reference in New Issue
Block a user