From 2ebeda3385fb679df4bc13ba4b80bdeba5e2ad13 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Tue, 15 Jan 2019 12:54:32 -0500 Subject: [PATCH 3/4] 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 | 6 +++++- src/st/st-texture-cache.c | 10 ++++++++++ src/st/st-texture-cache.h | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/js/ui/main.js b/js/ui/main.js index 061303cf3..8d1755cf1 100644 --- a/js/ui/main.js +++ b/js/ui/main.js @@ -200,7 +200,11 @@ 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 cbe3afaba..40a11dd6d 100644 --- a/src/st/st-texture-cache.c +++ b/src/st/st-texture-cache.c @@ -113,6 +113,16 @@ 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) +{ + g_return_if_fail (ST_IS_TEXTURE_CACHE (cache)); + + 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 11d1c4e64..9079d1fda 100644 --- a/src/st/st-texture-cache.h +++ b/src/st/st-texture-cache.h @@ -53,6 +53,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, -- 2.21.0