Redo style class handling

We should set the appropriate style classes when we have
constructed the content and know if it is a label, an image,
or both. Doing this in the convenience constructors is
problematic for language bindings, and misses out when the
content is changed after construction.
This commit is contained in:
Matthias Clasen
2013-08-19 14:40:22 -04:00
parent 27cb50b48c
commit 64d0ecaec8

View File

@ -1160,14 +1160,16 @@ gtk_button_construct_child (GtkButton *button)
gchar *label_text = NULL; gchar *label_text = NULL;
gint image_spacing; gint image_spacing;
context = gtk_widget_get_style_context (GTK_WIDGET (button));
gtk_style_context_remove_class (context, "image-button");
gtk_style_context_remove_class (context, "text-button");
if (!priv->constructed) if (!priv->constructed)
return; return;
if (!priv->label_text && !priv->image) if (!priv->label_text && !priv->image)
return; return;
context = gtk_widget_get_style_context (GTK_WIDGET (button));
gtk_style_context_get_style (context, gtk_style_context_get_style (context,
"image-spacing", &image_spacing, "image-spacing", &image_spacing,
NULL); NULL);
@ -1254,6 +1256,10 @@ gtk_button_construct_child (GtkButton *button)
else else
gtk_box_pack_end (GTK_BOX (box), label, FALSE, FALSE, 0); gtk_box_pack_end (GTK_BOX (box), label, FALSE, FALSE, 0);
} }
else
{
gtk_style_context_add_class (context, "image-button");
}
gtk_container_add (GTK_CONTAINER (button), align); gtk_container_add (GTK_CONTAINER (button), align);
gtk_container_add (GTK_CONTAINER (align), box); gtk_container_add (GTK_CONTAINER (align), box);
@ -1279,6 +1285,8 @@ gtk_button_construct_child (GtkButton *button)
gtk_widget_show (label); gtk_widget_show (label);
gtk_container_add (GTK_CONTAINER (button), label); gtk_container_add (GTK_CONTAINER (button), label);
gtk_style_context_add_class (context, "text-button");
} }
@ -1302,7 +1310,7 @@ gtk_button_new_with_label (const gchar *label)
* @icon_name: an icon name * @icon_name: an icon name
* @size: (type int): an icon size * @size: (type int): an icon size
* *
* Creates a new #GtkButton containing an icon from the current icon theme. * Creates a new button containing an icon from the current icon theme.
* *
* If the icon name isn't known, a "broken image" icon will be * If the icon name isn't known, a "broken image" icon will be
* displayed instead. If the current icon theme is changed, the icon * displayed instead. If the current icon theme is changed, the icon
@ -1319,7 +1327,6 @@ GtkWidget*
gtk_button_new_from_icon_name (const gchar *icon_name, gtk_button_new_from_icon_name (const gchar *icon_name,
GtkIconSize size) GtkIconSize size)
{ {
GtkStyleContext *context;
GtkWidget *button; GtkWidget *button;
GtkWidget *image; GtkWidget *image;
@ -1327,8 +1334,6 @@ gtk_button_new_from_icon_name (const gchar *icon_name,
button = g_object_new (GTK_TYPE_BUTTON, button = g_object_new (GTK_TYPE_BUTTON,
"image", image, "image", image,
NULL); NULL);
context = gtk_widget_get_style_context (button);
gtk_style_context_add_class (context, "image-button");
return button; return button;
} }