summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2019-01-15 12:54:32 -0500
committerRay Strode <rstrode@redhat.com>2019-01-15 12:54:32 -0500
commit0507fef4cd8fcd008b93d181f5157f3afc0b76d2 (patch)
treecf5447e843a2bea5a2dac906610cb901b2678bf8
parent68c631223c75b46c7f5fc159b6a3f212a38fbada (diff)
downloadgnome-shell-wip/texture-purge-on-nvidia.tar.gz
st-texture-cache: purge on resumewip/texture-purge-on-nvidia
With the proprietary nvidia driver, textures get garbled on suspend, so the texture cache needs to evict all textures in that situation.
-rw-r--r--js/ui/main.js8
-rw-r--r--src/st/st-texture-cache.c12
-rw-r--r--src/st/st-texture-cache.h1
3 files changed, 20 insertions, 1 deletions
diff --git a/js/ui/main.js b/js/ui/main.js
index d86cf9e81..19c0d4dc9 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -207,7 +207,13 @@ function _initializeUI() {
return true;
});
- global.display.connect('gl-video-memory-purged', loadTheme);
+ global.display.connect('gl-video-memory-purged', () => {
+ let cache = St.TextureCache.get_default();
+
+ cache.clear();
+
+ loadTheme();
+ });
// Provide the bus object for gnome-session to
// initiate logouts.
diff --git a/src/st/st-texture-cache.c b/src/st/st-texture-cache.c
index 0c794a3ab..5a3dcd81f 100644
--- a/src/st/st-texture-cache.c
+++ b/src/st/st-texture-cache.c
@@ -105,6 +105,18 @@ st_texture_cache_class_init (StTextureCacheClass *klass)
G_TYPE_NONE, 1, G_TYPE_FILE);
}
+/* Evicts all cached textures */
+void
+st_texture_cache_clear (StTextureCache *cache)
+{
+ GHashTableIter iter;
+ gpointer key;
+ gpointer value;
+
+ g_hash_table_remove_all (cache->priv->keyed_cache);
+ g_signal_emit (cache, signals[ICON_THEME_CHANGED], 0);
+}
+
/* Evicts all cached textures for named icons */
static void
st_texture_cache_evict_icons (StTextureCache *cache)
diff --git a/src/st/st-texture-cache.h b/src/st/st-texture-cache.h
index 26f9c30ac..b87adc4d5 100644
--- a/src/st/st-texture-cache.h
+++ b/src/st/st-texture-cache.h
@@ -52,6 +52,7 @@ typedef enum {
} StTextureCachePolicy;
StTextureCache* st_texture_cache_get_default (void);
+void st_texture_cache_clear (StTextureCache *cache);
ClutterActor *
st_texture_cache_load_sliced_image (StTextureCache *cache,