GtkImage: Add "use-fallback" property

So that icon-name and GIcon type of GtkImages can use automatic
fallback names.
This commit is contained in:
Bastien Nocera 2011-01-18 16:13:00 +00:00
parent e6a51e4afb
commit 714d9bc407

View File

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