From 6e6487b461adf2628f49fc257a7a30a2346e5a25 Mon Sep 17 00:00:00 2001 From: David Zeuthen Date: Tue, 21 Aug 2012 12:49:02 -0400 Subject: [PATCH] menubutton: make it work with custom content in .ui file This was reported in bug 682291. https://bugzilla.gnome.org/show_bug.cgi?id=682291 Signed-off-by: David Zeuthen --- gtk/gtkmenubutton.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/gtk/gtkmenubutton.c b/gtk/gtkmenubutton.c index b324de5994..c84748269b 100644 --- a/gtk/gtkmenubutton.c +++ b/gtk/gtkmenubutton.c @@ -173,6 +173,7 @@ enum G_DEFINE_TYPE(GtkMenuButton, gtk_menu_button, GTK_TYPE_TOGGLE_BUTTON) +static void gtk_menu_button_constructed (GObject *object); static void gtk_menu_button_dispose (GObject *object); static void @@ -449,6 +450,7 @@ gtk_menu_button_class_init (GtkMenuButtonClass *klass) gobject_class->set_property = gtk_menu_button_set_property; gobject_class->get_property = gtk_menu_button_get_property; + gobject_class->constructed = gtk_menu_button_constructed; gobject_class->dispose = gtk_menu_button_dispose; widget_class->state_flags_changed = gtk_menu_button_state_flags_changed; @@ -531,7 +533,7 @@ gtk_menu_button_class_init (GtkMenuButtonClass *klass) P_("The direction the arrow should point."), GTK_TYPE_ARROW_TYPE, GTK_ARROW_DOWN, - G_PARAM_READWRITE)); + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); } static void @@ -554,8 +556,6 @@ gtk_menu_button_init (GtkMenuButton *menu_button) menu_button->priv = priv; priv->arrow_type = GTK_ARROW_DOWN; - add_arrow (menu_button); - gtk_widget_set_sensitive (GTK_WIDGET (menu_button), FALSE); } @@ -856,8 +856,11 @@ gtk_menu_button_set_direction (GtkMenuButton *menu_button, priv->arrow_type = direction; - /* Is it custom content? We don't change that */ child = gtk_bin_get_child (GTK_BIN (menu_button)); + if (child == NULL) + return; + + /* Is it custom content? We don't change that */ if (priv->arrow_widget != child) return; @@ -882,6 +885,17 @@ gtk_menu_button_get_direction (GtkMenuButton *menu_button) return menu_button->priv->arrow_type; } +static void +gtk_menu_button_constructed (GObject *object) +{ + GtkMenuButton *button = GTK_MENU_BUTTON (object); + + if (button->priv->arrow_type != GTK_ARROW_NONE) + add_arrow (button); + + G_OBJECT_CLASS (gtk_menu_button_parent_class)->constructed (object); +} + static void gtk_menu_button_dispose (GObject *object) {