diff options
author | Bastien Nocera <hadess@hadess.net> | 2011-01-18 16:13:00 +0000 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2011-01-18 16:14:05 +0000 |
commit | 714d9bc4078898bfb9513e5e17c2bb3c935eef5f (patch) | |
tree | 2b4ce34044c7d7966930f407ea2a5eb621e3c89e /gtk/gtkimage.c | |
parent | e6a51e4afbcd1a8424b71c8b7cbf5533d695f366 (diff) | |
download | gtk+-714d9bc4078898bfb9513e5e17c2bb3c935eef5f.tar.gz |
GtkImage: Add "use-fallback" property
So that icon-name and GIcon type of GtkImages can use automatic
fallback names.
Diffstat (limited to 'gtk/gtkimage.c')
-rw-r--r-- | gtk/gtkimage.c | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c index dca9566d0a..8dc74bead9 100644 --- a/gtk/gtkimage.c +++ b/gtk/gtkimage.c @@ -150,9 +150,10 @@ struct _GtkImagePrivate gint last_rendered_state; /* a GtkStateFlags, with -1 meaning an invalid state, * only used with GTK_IMAGE_GICON, GTK_IMAGE_ICON_NAME */ gint pixel_size; - guint need_calc_size : 1; gint required_width; gint required_height; + guint need_calc_size : 1; + guint use_fallback : 1; }; @@ -202,7 +203,8 @@ enum PROP_PIXBUF_ANIMATION, PROP_ICON_NAME, PROP_STORAGE_TYPE, - PROP_GICON + PROP_GICON, + PROP_USE_FALLBACK }; G_DEFINE_TYPE (GtkImage, gtk_image, GTK_TYPE_MISC) @@ -337,6 +339,24 @@ gtk_image_class_init (GtkImageClass *class) GTK_IMAGE_EMPTY, GTK_PARAM_READABLE)); + /** + * GtkImage:use-fallback: + * + * Whether the icon displayed in the GtkImage will use + * standard icon names fallback. The value of this property + * is only relevant for images of type %GTK_IMAGE_ICON_NAME + * and %GTK_IMAGE_GICON. + * + * Since: 3.0 + */ + g_object_class_install_property (gobject_class, + PROP_USE_FALLBACK, + g_param_spec_boolean ("use-fallback", + P_("Use Fallback"), + P_("Whether to use icon names fallback"), + FALSE, + GTK_PARAM_READWRITE)); + g_type_class_add_private (class, sizeof (GtkImagePrivate)); } @@ -433,6 +453,18 @@ gtk_image_set_property (GObject *object, priv->icon_size); break; + case PROP_USE_FALLBACK: + priv->use_fallback = g_value_get_boolean (value); + if (priv->storage_type == GTK_IMAGE_ICON_NAME) + gtk_image_set_from_icon_name (image, + priv->data.name.icon_name, + priv->icon_size); + else if (priv->storage_type == GTK_IMAGE_GICON) + gtk_image_set_from_gicon (image, + priv->data.gicon.icon, + priv->icon_size); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -510,6 +542,10 @@ gtk_image_get_property (GObject *object, case PROP_STORAGE_TYPE: g_value_set_enum (value, priv->storage_type); break; + + case PROP_USE_FALLBACK: + g_value_set_boolean (value, priv->use_fallback); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -1408,6 +1444,8 @@ ensure_pixbuf_for_icon_name (GtkImage *image, icon_theme = gtk_icon_theme_get_for_screen (screen); settings = gtk_settings_get_for_screen (screen); flags = GTK_ICON_LOOKUP_USE_BUILTIN; + if (priv->use_fallback) + flags |= GTK_ICON_LOOKUP_GENERIC_FALLBACK; if (priv->data.name.pixbuf == NULL || (priv->was_symbolic && priv->last_rendered_state != state)) { @@ -1512,6 +1550,8 @@ ensure_pixbuf_for_gicon (GtkImage *image, icon_theme = gtk_icon_theme_get_for_screen (screen); settings = gtk_settings_get_for_screen (screen); flags = GTK_ICON_LOOKUP_USE_BUILTIN; + if (priv->use_fallback) + flags |= GTK_ICON_LOOKUP_GENERIC_FALLBACK; if (priv->data.gicon.pixbuf == NULL || (priv->was_symbolic && priv->last_rendered_state != state)) { |