X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkmenubutton.c;h=95b2bc73b187ca0dac80335dc4e6ab83793eef00;hb=5e2c23214564f7dcc687fa8467020eeb6b9407a9;hp=09ec60d339a9cd4455b745aabd3a8c1d0325f139;hpb=15fe3038be124bc68559112d3f63f4eee3b42cf4;p=~andy%2Fgtk diff --git a/gtk/gtkmenubutton.c b/gtk/gtkmenubutton.c index 09ec60d33..95b2bc73b 100644 --- a/gtk/gtkmenubutton.c +++ b/gtk/gtkmenubutton.c @@ -522,7 +522,7 @@ gtk_menu_button_class_init (GtkMenuButtonClass *klass) * * The #GMenuModel from which the menu to pop up will be created. * See gtk_menu_button_set_menu_model() for the interaction with the - * #GtkMenuButton:menu property. + * #GtkMenuButton:popup property. * * Since: 3.6 */ @@ -737,13 +737,13 @@ gtk_menu_button_get_popup (GtkMenuButton *menu_button) * @menu_button: a #GtkMenuButton * @menu_model: (allow-none): a #GMenuModel * - * Sets the #GMenuModel from which the #GtkMenuButton:menu property will be + * Sets the #GMenuModel from which the #GtkMenuButton:popup property will be * filled in, or %NULL to disable the button. * * The #GtkMenu will be created with gtk_menu_new_from_model(), so actions * will be connected as documented there. * - * If you #GtkMenuButton:menu * is already set, then its content will be lost + * If #GtkMenuButton:popup is already set, then its content will be lost * and replaced by our newly created #GtkMenu. * * Since: 3.6 @@ -791,6 +791,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 @@ -817,10 +834,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"); } @@ -855,8 +869,8 @@ gtk_menu_button_get_align_widget (GtkMenuButton *menu_button) * If the menu when popped out would have collided with screen edges, * we will do our best to keep it inside the screen and fully visible. * - * If you pass GTK_ARROW_NONE for a @direction, the menu will behave - * as if you passed GTK_ARROW_DOWN (although you won't see any arrows). + * If you pass %GTK_ARROW_NONE for a @direction, the menu will behave + * as if you passed %GTK_ARROW_DOWN (although you won't see any arrows). * * Since: 3.6 */ @@ -911,8 +925,11 @@ gtk_menu_button_dispose (GObject *object) menu_deactivate_cb, object); gtk_menu_detach (GTK_MENU (priv->popup)); + 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);