StIcon: deprecate StIcon:icon-name and StIcon:icon-type
Reroute setting those properties to a GIcon. API users are expected to create GIcon directly now. The advantage is that from a StIcon you can now create a similar one by accessing :gicon. https://bugzilla.gnome.org/show_bug.cgi?id=682540
This commit is contained in:
parent
f96dcaccbe
commit
d3b0d23d8f
@ -53,7 +53,6 @@ struct _StIconPrivate
|
|||||||
guint opacity_handler_id;
|
guint opacity_handler_id;
|
||||||
|
|
||||||
GIcon *gicon;
|
GIcon *gicon;
|
||||||
gchar *icon_name;
|
|
||||||
StIconType icon_type;
|
StIconType icon_type;
|
||||||
gint prop_icon_size; /* icon size set as property */
|
gint prop_icon_size; /* icon size set as property */
|
||||||
gint theme_icon_size; /* icon size from theme node */
|
gint theme_icon_size; /* icon size from theme node */
|
||||||
@ -174,20 +173,6 @@ st_icon_dispose (GObject *gobject)
|
|||||||
G_OBJECT_CLASS (st_icon_parent_class)->dispose (gobject);
|
G_OBJECT_CLASS (st_icon_parent_class)->dispose (gobject);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
st_icon_finalize (GObject *gobject)
|
|
||||||
{
|
|
||||||
StIconPrivate *priv = ST_ICON (gobject)->priv;
|
|
||||||
|
|
||||||
if (priv->icon_name)
|
|
||||||
{
|
|
||||||
g_free (priv->icon_name);
|
|
||||||
priv->icon_name = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (st_icon_parent_class)->finalize (gobject);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_icon_get_preferred_height (ClutterActor *actor,
|
st_icon_get_preferred_height (ClutterActor *actor,
|
||||||
gfloat for_width,
|
gfloat for_width,
|
||||||
@ -337,7 +322,6 @@ st_icon_class_init (StIconClass *klass)
|
|||||||
object_class->get_property = st_icon_get_property;
|
object_class->get_property = st_icon_get_property;
|
||||||
object_class->set_property = st_icon_set_property;
|
object_class->set_property = st_icon_set_property;
|
||||||
object_class->dispose = st_icon_dispose;
|
object_class->dispose = st_icon_dispose;
|
||||||
object_class->finalize = st_icon_finalize;
|
|
||||||
|
|
||||||
actor_class->get_preferred_height = st_icon_get_preferred_height;
|
actor_class->get_preferred_height = st_icon_get_preferred_height;
|
||||||
actor_class->get_preferred_width = st_icon_get_preferred_width;
|
actor_class->get_preferred_width = st_icon_get_preferred_width;
|
||||||
@ -348,7 +332,7 @@ st_icon_class_init (StIconClass *klass)
|
|||||||
|
|
||||||
pspec = g_param_spec_object ("gicon",
|
pspec = g_param_spec_object ("gicon",
|
||||||
"GIcon",
|
"GIcon",
|
||||||
"A GIcon to override :icon-name",
|
"The GIcon shown by this icon actor",
|
||||||
G_TYPE_ICON,
|
G_TYPE_ICON,
|
||||||
ST_PARAM_READWRITE);
|
ST_PARAM_READWRITE);
|
||||||
g_object_class_install_property (object_class, PROP_GICON, pspec);
|
g_object_class_install_property (object_class, PROP_GICON, pspec);
|
||||||
@ -356,7 +340,7 @@ st_icon_class_init (StIconClass *klass)
|
|||||||
pspec = g_param_spec_string ("icon-name",
|
pspec = g_param_spec_string ("icon-name",
|
||||||
"Icon name",
|
"Icon name",
|
||||||
"An icon name",
|
"An icon name",
|
||||||
NULL, ST_PARAM_READWRITE);
|
NULL, ST_PARAM_READWRITE | G_PARAM_DEPRECATED);
|
||||||
g_object_class_install_property (object_class, PROP_ICON_NAME, pspec);
|
g_object_class_install_property (object_class, PROP_ICON_NAME, pspec);
|
||||||
|
|
||||||
pspec = g_param_spec_enum ("icon-type",
|
pspec = g_param_spec_enum ("icon-type",
|
||||||
@ -364,7 +348,7 @@ st_icon_class_init (StIconClass *klass)
|
|||||||
"The type of icon that should be used",
|
"The type of icon that should be used",
|
||||||
ST_TYPE_ICON_TYPE,
|
ST_TYPE_ICON_TYPE,
|
||||||
DEFAULT_ICON_TYPE,
|
DEFAULT_ICON_TYPE,
|
||||||
ST_PARAM_READWRITE);
|
ST_PARAM_READWRITE | G_PARAM_DEPRECATED);
|
||||||
g_object_class_install_property (object_class, PROP_ICON_TYPE, pspec);
|
g_object_class_install_property (object_class, PROP_ICON_TYPE, pspec);
|
||||||
|
|
||||||
pspec = g_param_spec_int ("icon-size",
|
pspec = g_param_spec_int ("icon-size",
|
||||||
@ -492,14 +476,6 @@ st_icon_update (StIcon *icon)
|
|||||||
priv->gicon,
|
priv->gicon,
|
||||||
priv->icon_size);
|
priv->icon_size);
|
||||||
}
|
}
|
||||||
else if (priv->icon_name)
|
|
||||||
{
|
|
||||||
priv->pending_texture = st_texture_cache_load_icon_name (cache,
|
|
||||||
theme_node,
|
|
||||||
priv->icon_name,
|
|
||||||
priv->icon_type,
|
|
||||||
priv->icon_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (priv->pending_texture)
|
if (priv->pending_texture)
|
||||||
{
|
{
|
||||||
@ -562,9 +538,16 @@ st_icon_new (void)
|
|||||||
const gchar *
|
const gchar *
|
||||||
st_icon_get_icon_name (StIcon *icon)
|
st_icon_get_icon_name (StIcon *icon)
|
||||||
{
|
{
|
||||||
|
StIconPrivate *priv;
|
||||||
|
|
||||||
g_return_val_if_fail (ST_IS_ICON (icon), NULL);
|
g_return_val_if_fail (ST_IS_ICON (icon), NULL);
|
||||||
|
|
||||||
return icon->priv->icon_name;
|
priv = icon->priv;
|
||||||
|
|
||||||
|
if (priv->gicon && G_IS_THEMED_ICON (priv->gicon))
|
||||||
|
return g_themed_icon_get_names (G_THEMED_ICON (priv->gicon)) [0];
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -577,20 +560,20 @@ st_icon_set_icon_name (StIcon *icon,
|
|||||||
|
|
||||||
priv = icon->priv;
|
priv = icon->priv;
|
||||||
|
|
||||||
/* Check if there's no change */
|
|
||||||
if (g_strcmp0 (priv->icon_name, icon_name) == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
g_free (priv->icon_name);
|
|
||||||
priv->icon_name = g_strdup (icon_name);
|
|
||||||
|
|
||||||
if (priv->gicon)
|
if (priv->gicon)
|
||||||
{
|
g_object_unref (priv->gicon);
|
||||||
g_object_unref (priv->gicon);
|
|
||||||
priv->gicon = NULL;
|
|
||||||
g_object_notify (G_OBJECT (icon), "gicon");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (icon_name)
|
||||||
|
{
|
||||||
|
if (priv->icon_type == ST_ICON_SYMBOLIC)
|
||||||
|
priv->gicon = _st_make_symbolic_themed_icon (icon_name);
|
||||||
|
else
|
||||||
|
priv->gicon = g_themed_icon_new_with_default_fallbacks (icon_name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
priv->gicon = NULL;
|
||||||
|
|
||||||
|
g_object_notify (G_OBJECT (icon), "gicon");
|
||||||
g_object_notify (G_OBJECT (icon), "icon-name");
|
g_object_notify (G_OBJECT (icon), "icon-name");
|
||||||
|
|
||||||
st_icon_update (icon);
|
st_icon_update (icon);
|
||||||
@ -665,7 +648,7 @@ void
|
|||||||
st_icon_set_gicon (StIcon *icon, GIcon *gicon)
|
st_icon_set_gicon (StIcon *icon, GIcon *gicon)
|
||||||
{
|
{
|
||||||
g_return_if_fail (ST_IS_ICON (icon));
|
g_return_if_fail (ST_IS_ICON (icon));
|
||||||
g_return_if_fail (G_IS_ICON (gicon));
|
g_return_if_fail (gicon == NULL || G_IS_ICON (gicon));
|
||||||
|
|
||||||
if (icon->priv->gicon == gicon) /* do nothing */
|
if (icon->priv->gicon == gicon) /* do nothing */
|
||||||
return;
|
return;
|
||||||
@ -679,13 +662,6 @@ st_icon_set_gicon (StIcon *icon, GIcon *gicon)
|
|||||||
if (gicon)
|
if (gicon)
|
||||||
icon->priv->gicon = g_object_ref (gicon);
|
icon->priv->gicon = g_object_ref (gicon);
|
||||||
|
|
||||||
if (icon->priv->icon_name)
|
|
||||||
{
|
|
||||||
g_free (icon->priv->icon_name);
|
|
||||||
icon->priv->icon_name = NULL;
|
|
||||||
g_object_notify (G_OBJECT (icon), "icon-name");
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_notify (G_OBJECT (icon), "gicon");
|
g_object_notify (G_OBJECT (icon), "gicon");
|
||||||
|
|
||||||
st_icon_update (icon);
|
st_icon_update (icon);
|
||||||
|
@ -691,3 +691,55 @@ _st_paint_shadow_with_opacity (StShadow *shadow_spec,
|
|||||||
shadow_box.x2, shadow_box.y2,
|
shadow_box.x2, shadow_box.y2,
|
||||||
0, 0, 1, 1);
|
0, 0, 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* generates names like g_themed_icon_new_with_default_fallbacks(),
|
||||||
|
* but *only* symbolic names
|
||||||
|
*/
|
||||||
|
static char **
|
||||||
|
symbolic_names_for_icon (const char *name)
|
||||||
|
{
|
||||||
|
char **parts, **names;
|
||||||
|
int i, numnames;
|
||||||
|
|
||||||
|
parts = g_strsplit (name, "-", -1);
|
||||||
|
numnames = g_strv_length (parts);
|
||||||
|
names = g_new (char *, numnames + 1);
|
||||||
|
for (i = 0; parts[i]; i++)
|
||||||
|
{
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
names[i] = g_strdup_printf ("%s-symbolic", parts[i]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
names[i] = g_strdup_printf ("%.*s-%s-symbolic",
|
||||||
|
(int) (strlen (names[i - 1]) - strlen ("-symbolic")),
|
||||||
|
names[i - 1], parts[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
names[i] = NULL;
|
||||||
|
|
||||||
|
g_strfreev (parts);
|
||||||
|
|
||||||
|
/* need to reverse here, because longest (most specific)
|
||||||
|
name has to come first */
|
||||||
|
for (i = 0; i < (numnames / 2); i++) {
|
||||||
|
char *tmp = names[i];
|
||||||
|
names[i] = names[numnames - i - 1];
|
||||||
|
names[numnames - i - 1] = tmp;
|
||||||
|
}
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
|
GIcon *
|
||||||
|
_st_make_symbolic_themed_icon (const char *icon_name)
|
||||||
|
{
|
||||||
|
char **names;
|
||||||
|
GIcon *themed;
|
||||||
|
|
||||||
|
names = symbolic_names_for_icon (icon_name);
|
||||||
|
themed = g_themed_icon_new_from_names (names, -1);
|
||||||
|
g_strfreev (names);
|
||||||
|
|
||||||
|
return themed;
|
||||||
|
}
|
||||||
|
@ -79,4 +79,6 @@ void _st_paint_shadow_with_opacity (StShadow *shadow_spec,
|
|||||||
ClutterActorBox *box,
|
ClutterActorBox *box,
|
||||||
guint8 paint_opacity);
|
guint8 paint_opacity);
|
||||||
|
|
||||||
|
GIcon *_st_make_symbolic_themed_icon (const char *icon_name);
|
||||||
|
|
||||||
#endif /* __ST_PRIVATE_H__ */
|
#endif /* __ST_PRIVATE_H__ */
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include "st-texture-cache.h"
|
#include "st-texture-cache.h"
|
||||||
|
#include "st-private.h"
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
@ -967,9 +968,6 @@ load_gicon_with_colors (StTextureCache *cache,
|
|||||||
* icon isn't loaded already, the texture will be filled
|
* icon isn't loaded already, the texture will be filled
|
||||||
* asynchronously.
|
* asynchronously.
|
||||||
*
|
*
|
||||||
* This will load @icon as a full-color icon; if you want a symbolic
|
|
||||||
* icon, you must use st_texture_cache_load_icon_name().
|
|
||||||
*
|
|
||||||
* Return Value: (transfer none): A new #ClutterActor for the icon, or %NULL if not found
|
* Return Value: (transfer none): A new #ClutterActor for the icon, or %NULL if not found
|
||||||
*/
|
*/
|
||||||
ClutterActor *
|
ClutterActor *
|
||||||
@ -1135,46 +1133,6 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
|
|||||||
* full-color icon.
|
* full-color icon.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* generates names like g_themed_icon_new_with_default_fallbacks(),
|
|
||||||
* but *only* symbolic names
|
|
||||||
*/
|
|
||||||
static char **
|
|
||||||
symbolic_names_for_icon (const char *name)
|
|
||||||
{
|
|
||||||
char **parts, **names;
|
|
||||||
int i, numnames;
|
|
||||||
|
|
||||||
parts = g_strsplit (name, "-", -1);
|
|
||||||
numnames = g_strv_length (parts);
|
|
||||||
names = g_new (char *, numnames + 1);
|
|
||||||
for (i = 0; parts[i]; i++)
|
|
||||||
{
|
|
||||||
if (i == 0)
|
|
||||||
{
|
|
||||||
names[i] = g_strdup_printf ("%s-symbolic", parts[i]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
names[i] = g_strdup_printf ("%.*s-%s-symbolic",
|
|
||||||
(int) (strlen (names[i - 1]) - strlen ("-symbolic")),
|
|
||||||
names[i - 1], parts[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
names[i] = NULL;
|
|
||||||
|
|
||||||
g_strfreev (parts);
|
|
||||||
|
|
||||||
/* need to reverse here, because longest (most specific)
|
|
||||||
name has to come first */
|
|
||||||
for (i = 0; i < (numnames / 2); i++) {
|
|
||||||
char *tmp = names[i];
|
|
||||||
names[i] = names[numnames - i - 1];
|
|
||||||
names[numnames - i - 1] = tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
return names;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* st_texture_cache_load_icon_name:
|
* st_texture_cache_load_icon_name:
|
||||||
* @cache: The texture cache instance
|
* @cache: The texture cache instance
|
||||||
@ -1198,16 +1156,13 @@ st_texture_cache_load_icon_name (StTextureCache *cache,
|
|||||||
{
|
{
|
||||||
ClutterActor *texture;
|
ClutterActor *texture;
|
||||||
GIcon *themed;
|
GIcon *themed;
|
||||||
char **names;
|
|
||||||
|
|
||||||
g_return_val_if_fail (!(icon_type == ST_ICON_SYMBOLIC && theme_node == NULL), NULL);
|
g_return_val_if_fail (!(icon_type == ST_ICON_SYMBOLIC && theme_node == NULL), NULL);
|
||||||
|
|
||||||
switch (icon_type)
|
switch (icon_type)
|
||||||
{
|
{
|
||||||
case ST_ICON_SYMBOLIC:
|
case ST_ICON_SYMBOLIC:
|
||||||
names = symbolic_names_for_icon (name);
|
themed = _st_make_symbolic_themed_icon (name);
|
||||||
themed = g_themed_icon_new_from_names (names, -1);
|
|
||||||
g_strfreev (names);
|
|
||||||
texture = load_gicon_with_colors (cache, themed, size,
|
texture = load_gicon_with_colors (cache, themed, size,
|
||||||
st_theme_node_get_icon_colors (theme_node));
|
st_theme_node_get_icon_colors (theme_node));
|
||||||
g_object_unref (themed);
|
g_object_unref (themed);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user