[gtk+/gtk-3-6] gtkmenubutton: remove weak pointer when needed
- From: Paolo Borelli <pborelli src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-3-6] gtkmenubutton: remove weak pointer when needed
- Date: Sun, 4 Nov 2012 16:14:30 +0000 (UTC)
commit ebd04b8a1deb31a7ba0d2c9f806e11e0505b0e82
Author: Paolo Borelli <pborelli gnome org>
Date: Sun Nov 4 16:46:35 2012 +0100
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.
gtk/gtkmenubutton.c | 24 ++++++++++++++++++++----
1 files changed, 20 insertions(+), 4 deletions(-)
---
diff --git a/gtk/gtkmenubutton.c b/gtk/gtkmenubutton.c
index 61c2d6a..ef8f3cd 100644
--- a/gtk/gtkmenubutton.c
+++ b/gtk/gtkmenubutton.c
@@ -806,6 +806,23 @@ gtk_menu_button_get_menu_model (GtkMenuButton *menu_button)
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:
* @menu_button: a #GtkMenuButton
@@ -832,10 +849,7 @@ gtk_menu_button_set_align_widget (GtkMenuButton *menu_button,
if (priv->align_widget == align_widget)
return;
- priv->align_widget = align_widget;
-
- if (priv->align_widget)
- g_object_add_weak_pointer (G_OBJECT (priv->align_widget), (gpointer *) &priv->align_widget);
+ set_align_widget_pointer (menu_button, align_widget);
g_object_notify (G_OBJECT (menu_button), "align-widget");
}
@@ -929,6 +943,8 @@ gtk_menu_button_dispose (GObject *object)
priv->popup = NULL;
}
+ set_align_widget_pointer (GTK_MENU_BUTTON (object), NULL);
+
g_clear_object (&priv->model);
G_OBJECT_CLASS (gtk_menu_button_parent_class)->dispose (object);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]