You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.1 KiB
67 lines
2.1 KiB
2 months ago
|
From 5ddabd342d8016b5b1c8a56ecca7de21e91feb3c Mon Sep 17 00:00:00 2001
|
||
|
From: Ray Strode <rstrode@redhat.com>
|
||
|
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 | 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 ad0ea962f1..d9646fea52 100644
|
||
|
--- a/js/ui/main.js
|
||
|
+++ b/js/ui/main.js
|
||
|
@@ -265,7 +265,11 @@ async 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();
|
||
|
+ });
|
||
|
|
||
|
global.context.connect('notify::unsafe-mode', () => {
|
||
|
if (!global.context.unsafe_mode)
|
||
|
diff --git a/src/st/st-texture-cache.c b/src/st/st-texture-cache.c
|
||
|
index a137480ad1..2e5c6c689a 100644
|
||
|
--- a/src/st/st-texture-cache.c
|
||
|
+++ b/src/st/st-texture-cache.c
|
||
|
@@ -129,6 +129,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 1c5be957c4..1a4bfde73f 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,
|
||
|
--
|
||
|
2.45.2
|
||
|
|