diff options
author | Christian Hergert <chergert@redhat.com> | 2015-11-16 21:38:22 -0800 |
---|---|---|
committer | Christian Hergert <chergert@redhat.com> | 2015-11-16 21:38:22 -0800 |
commit | 0ca014af1493d255011f351ae6c40b9f9a925af3 (patch) | |
tree | 4770397b1cef3b933e1a23df98717deaffbc2a98 /gtk/gtkstackswitcher.c | |
parent | c659292940f0fec924caf7f6a25b842593be0522 (diff) | |
download | gtk+-0ca014af1493d255011f351ae6c40b9f9a925af3.tar.gz |
stackswitcher: add GtkStackSwitcher:icon-size property
Set the GtkStackSwitcher:icon-size property to change the size of icons
used in the linked GtkRadioButton children.
https://bugzilla.gnome.org/show_bug.cgi?id=758208
Diffstat (limited to 'gtk/gtkstackswitcher.c')
-rw-r--r-- | gtk/gtkstackswitcher.c | 58 |
1 files changed, 55 insertions, 3 deletions
diff --git a/gtk/gtkstackswitcher.c b/gtk/gtkstackswitcher.c index 99a0dd38be..de46f8c6b2 100644 --- a/gtk/gtkstackswitcher.c +++ b/gtk/gtkstackswitcher.c @@ -58,11 +58,13 @@ struct _GtkStackSwitcherPrivate { GtkStack *stack; GHashTable *buttons; + gint icon_size; gboolean in_child_changed; }; enum { PROP_0, + PROP_ICON_SIZE, PROP_STACK }; @@ -76,6 +78,7 @@ gtk_stack_switcher_init (GtkStackSwitcher *switcher) priv = gtk_stack_switcher_get_instance_private (switcher); + priv->icon_size = GTK_ICON_SIZE_MENU; priv->stack = NULL; priv->buttons = g_hash_table_new (g_direct_hash, g_direct_equal); @@ -105,7 +108,8 @@ on_button_clicked (GtkWidget *widget, static void rebuild_child (GtkWidget *self, const gchar *icon_name, - const gchar *title) + const gchar *title, + gint icon_size) { GtkStyleContext *context; GtkWidget *button_child; @@ -119,7 +123,7 @@ rebuild_child (GtkWidget *self, if (icon_name != NULL) { - button_child = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU); + button_child = gtk_image_new_from_icon_name (icon_name, icon_size); if (title != NULL) gtk_widget_set_tooltip_text (GTK_WIDGET (self), title); @@ -179,7 +183,7 @@ update_button (GtkStackSwitcher *self, "icon-name", &icon_name, NULL); - rebuild_child (button, icon_name, title); + rebuild_child (button, icon_name, title, priv->icon_size); gtk_widget_set_visible (button, gtk_widget_get_visible (widget) && (title != NULL || icon_name != NULL)); @@ -453,6 +457,29 @@ gtk_stack_switcher_get_stack (GtkStackSwitcher *switcher) } static void +gtk_stack_switcher_set_icon_size (GtkStackSwitcher *switcher, + gint icon_size) +{ + GtkStackSwitcherPrivate *priv; + + g_return_if_fail (GTK_IS_STACK_SWITCHER (switcher)); + + priv = gtk_stack_switcher_get_instance_private (switcher); + + if (icon_size != priv->icon_size) + { + priv->icon_size = icon_size; + + if (priv->stack != NULL) + { + clear_switcher (switcher); + populate_switcher (switcher); + g_object_notify (G_OBJECT (switcher), "icon-size"); + } + } +} + +static void gtk_stack_switcher_get_property (GObject *object, guint prop_id, GValue *value, @@ -464,6 +491,10 @@ gtk_stack_switcher_get_property (GObject *object, priv = gtk_stack_switcher_get_instance_private (switcher); switch (prop_id) { + case PROP_ICON_SIZE: + g_value_set_int (value, priv->icon_size); + break; + case PROP_STACK: g_value_set_object (value, priv->stack); break; @@ -484,6 +515,10 @@ gtk_stack_switcher_set_property (GObject *object, switch (prop_id) { + case PROP_ICON_SIZE: + gtk_stack_switcher_set_icon_size (switcher, g_value_get_int (value)); + break; + case PROP_STACK: gtk_stack_switcher_set_stack (switcher, g_value_get_object (value)); break; @@ -528,6 +563,23 @@ gtk_stack_switcher_class_init (GtkStackSwitcherClass *class) object_class->dispose = gtk_stack_switcher_dispose; object_class->finalize = gtk_stack_switcher_finalize; + /** + * GtkStackSwitcher:icon-size: + * + * Use the "icon-size" property to change the size of the image displayed + * when a #GtkStackSwitcher is displaying icons. + * + * Since: 3.20 + */ + g_object_class_install_property (object_class, + PROP_ICON_SIZE, + g_param_spec_int ("icon-size", + P_("Icon Size"), + P_("Symbolic size to use for named icon"), + 0, G_MAXINT, + GTK_ICON_SIZE_MENU, + G_PARAM_EXPLICIT_NOTIFY | GTK_PARAM_READWRITE)); + g_object_class_install_property (object_class, PROP_STACK, g_param_spec_object ("stack", |