st-texture-cache: Add API to remove cache data

The current API assumes that image data loaded from files remains
valid during the life time of the shell. This assumption is mostly
valid for image files we provide ourselves (with the exception being
designers working on those files), but not necessarily for "external"
files - provide API to explicitly remove cached data associated with
a URI for those cases.

https://bugzilla.gnome.org/show_bug.cgi?id=679268
This commit is contained in:
Florian Müllner 2012-09-21 16:00:44 +02:00
parent 74d6225993
commit dc9ad8df80
2 changed files with 30 additions and 0 deletions

View File

@ -94,6 +94,33 @@ st_texture_cache_class_init (StTextureCacheClass *klass)
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
} }
/**
* st_texture_cache_clear_uri:
* @cache: A #StTextureCache
* @uri: URI of cached object
*
* If the given @uri is known to have been modified
* externally, this function may be used to invalidate
* the in-memory cache.
*/
void
st_texture_cache_clear_uri (StTextureCache *cache,
const char *uri)
{
char *key;
g_return_if_fail (ST_IS_TEXTURE_CACHE (cache));
g_return_if_fail (uri != NULL);
key = g_strconcat (CACHE_PREFIX_URI, uri, NULL);
g_hash_table_remove (cache->priv->keyed_cache, key);
g_free (key);
key = g_strconcat (CACHE_PREFIX_URI_FOR_CAIRO, uri, NULL);
g_hash_table_remove (cache->priv->keyed_cache, key);
g_free (key);
}
/* Evicts all cached textures for named icons */ /* Evicts all cached textures for named icons */
static void static void
st_texture_cache_evict_icons (StTextureCache *cache) st_texture_cache_evict_icons (StTextureCache *cache)

View File

@ -68,6 +68,9 @@ GType st_texture_cache_get_type (void) G_GNUC_CONST;
StTextureCache* st_texture_cache_get_default (void); StTextureCache* st_texture_cache_get_default (void);
void st_texture_cache_clear_uri (StTextureCache *cache,
const gchar *uri);
ClutterActor * ClutterActor *
st_texture_cache_load_sliced_image (StTextureCache *cache, st_texture_cache_load_sliced_image (StTextureCache *cache,
const gchar *path, const gchar *path,