From 0507fef4cd8fcd008b93d181f5157f3afc0b76d2 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Tue, 15 Jan 2019 12:54:32 -0500 Subject: [PATCH] st-texture-cache: purge on resume With the proprietary nvidia driver, textures get garbled on suspend, so the texture cache needs to evict all textures in that situation. --- js/ui/main.js | 8 +++++++- src/st/st-texture-cache.c | 12 ++++++++++++ src/st/st-texture-cache.h | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) 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,