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 <zeuthen@gmail.com>
This commit is contained in:
David Zeuthen 2012-08-21 12:49:02 -04:00 committed by Matthias Clasen
parent ed7a417dcb
commit 6e6487b461

View File

@ -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)
{