Blame SOURCES/0001-a11y-Change-HC-icon-theme-first.patch

35159f
From a94260b4f2f72ea9328a0194b8656f1fb3e98675 Mon Sep 17 00:00:00 2001
35159f
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
35159f
Date: Sat, 14 Dec 2019 19:15:53 +0100
35159f
Subject: [PATCH] a11y: Change HC icon theme first
35159f
35159f
There are two ways for applications to provide a high contrast icon:
35159f
35159f
 1. install an icon into the HighContrast theme
35159f
 2. install a symbolic icon into the default hicolor theme
35159f
35159f
The latter is preferred nowadays, and implemented in the high-contrast
35159f
CSS variant by enforcing the symbolic icon style.
35159f
35159f
However together with the way we currently enable/disable high-contrast,
35159f
this can lead to the following race:
35159f
 1. the GTK theme is changed from HighContrast
35159f
 2. we reload the default stylesheet
35159f
 3. the icon style changes to "regular", so we request a
35159f
    new icon from the HighContrast icon theme
35159f
 4. the icon theme is changed from HighContrast
35159f
 5. we evict existing icons from the cache
35159f
 6. we reload icons for the new icon theme; however as we
35159f
    find a pending request (from 3), we re-use it
35159f
 7. the request from 3 finishes, and we end up with a
35159f
    wrong icon in the cache
35159f
35159f
The simplest fix is to change the icon theme before the GTK theme: Unlike the
35159f
theme name, the icon style is encoded in the cache key, so we won't re-use
35159f
an old (and incorrect) request in that case.
35159f
---
35159f
 js/ui/status/accessibility.js | 6 +++---
35159f
 1 file changed, 3 insertions(+), 3 deletions(-)
35159f
35159f
diff --git a/js/ui/status/accessibility.js b/js/ui/status/accessibility.js
35159f
index 10223ec84..90948d465 100644
35159f
--- a/js/ui/status/accessibility.js
35159f
+++ b/js/ui/status/accessibility.js
35159f
@@ -154,14 +154,14 @@ class ATIndicator extends PanelMenu.Button {
35159f
             interfaceSettings.is_writable(KEY_ICON_THEME),
35159f
             enabled => {
35159f
                 if (enabled) {
35159f
-                    interfaceSettings.set_string(KEY_GTK_THEME, HIGH_CONTRAST_THEME);
35159f
                     interfaceSettings.set_string(KEY_ICON_THEME, HIGH_CONTRAST_THEME);
35159f
+                    interfaceSettings.set_string(KEY_GTK_THEME, HIGH_CONTRAST_THEME);
35159f
                 } else if(!hasHC) {
35159f
-                    interfaceSettings.set_string(KEY_GTK_THEME, gtkTheme);
35159f
                     interfaceSettings.set_string(KEY_ICON_THEME, iconTheme);
35159f
+                    interfaceSettings.set_string(KEY_GTK_THEME, gtkTheme);
35159f
                 } else {
35159f
-                    interfaceSettings.reset(KEY_GTK_THEME);
35159f
                     interfaceSettings.reset(KEY_ICON_THEME);
35159f
+                    interfaceSettings.reset(KEY_GTK_THEME);
35159f
                 }
35159f
             });
35159f
         return highContrast;
35159f
-- 
35159f
2.23.0
35159f