[gnome-shell] st-texture-cache: Don't cache GIcons which cannot be serialized
- From: Florian MÃllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] st-texture-cache: Don't cache GIcons which cannot be serialized
- Date: Fri, 30 Sep 2011 18:14:38 +0000 (UTC)
commit e49a595f54b14d681ad01c8da1886ff659080e10
Author: Florian MÃllner <fmuellner gnome org>
Date: Fri Sep 30 19:57:09 2011 +0200
st-texture-cache: Don't cache GIcons which cannot be serialized
For GIcons we use g_icon_to_string() in the key, but the function
will return NULL if the icon cannot be serialized. As a result,
all non-serializable GIcons of the same size end up with the same
cache key - an example for this are contacts with avatars, which
currently all end up with the same image.
To fix, opt out of caching for GIcons which cannot be serialized.
https://bugzilla.gnome.org/show_bug.cgi?id=660585
src/st/st-texture-cache.c | 11 ++++++++---
1 files changed, 8 insertions(+), 3 deletions(-)
---
diff --git a/src/st/st-texture-cache.c b/src/st/st-texture-cache.c
index 24471bc..1e83a0d 100644
--- a/src/st/st-texture-cache.c
+++ b/src/st/st-texture-cache.c
@@ -1177,8 +1177,15 @@ load_gicon_with_colors (StTextureCache *cache,
char *key;
GtkIconTheme *theme;
GtkIconInfo *info;
+ StTextureCachePolicy policy;
gicon_string = g_icon_to_string (icon);
+ /* A return value of NULL indicates that the icon can not be serialized,
+ * so don't have a unique identifier for it as a cache key, and thus can't
+ * be cached. If it is cachable, we hardcode a policy of FOREVER here for
+ * now; we should actually blow this away on icon theme changes probably */
+ policy = gicon_string != NULL ? ST_TEXTURE_CACHE_POLICY_FOREVER
+ : ST_TEXTURE_CACHE_POLICY_NONE;
if (colors)
{
/* This raises some doubts about the practice of using string keys */
@@ -1210,9 +1217,7 @@ load_gicon_with_colors (StTextureCache *cache,
{
/* Transfer ownership of key */
request->key = key;
- /* hardcoded here for now; we should actually blow this away on
- * icon theme changes probably */
- request->policy = ST_TEXTURE_CACHE_POLICY_FOREVER;
+ request->policy = policy;
request->icon = g_object_ref (icon);
request->icon_info = info;
request->width = request->height = size;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]