@@ -38,8 +38,11 @@ class GnomeThemeDetector extends OsThemeDetector {
3838
3939 private static final Logger logger = LoggerFactory .getLogger (GnomeThemeDetector .class );
4040
41- private static final String MONITORING_CMD = "gsettings monitor org.gnome.desktop.interface gtk-theme" ;
42- private static final String GET_CMD = "gsettings get org.gnome.desktop.interface gtk-theme" ;
41+ private static final String MONITORING_CMD = "gsettings monitor org.gnome.desktop.interface" ;
42+ private static final String [] GET_CMD = new String []{
43+ "gsettings get org.gnome.desktop.interface gtk-theme" ,
44+ "gsettings get org.gnome.desktop.interface color-scheme"
45+ };
4346
4447 private final Set <Consumer <Boolean >> listeners = new ConcurrentHashSet <>();
4548 private final Pattern darkThemeNamePattern = Pattern .compile (".*dark.*" , Pattern .CASE_INSENSITIVE );
@@ -50,11 +53,13 @@ class GnomeThemeDetector extends OsThemeDetector {
5053 public boolean isDark () {
5154 try {
5255 Runtime runtime = Runtime .getRuntime ();
53- Process process = runtime .exec (GET_CMD );
54- try (BufferedReader reader = new BufferedReader (new InputStreamReader (process .getInputStream ()))) {
55- String readLine = reader .readLine ();
56- if (readLine != null ) {
57- return isDarkTheme (readLine );
56+ for (String cmd : GET_CMD ) {
57+ Process process = runtime .exec (cmd );
58+ try (BufferedReader reader = new BufferedReader (new InputStreamReader (process .getInputStream ()))) {
59+ String readLine = reader .readLine ();
60+ if (readLine != null && isDarkTheme (readLine )) {
61+ return true ;
62+ }
5863 }
5964 }
6065 } catch (IOException e ) {
@@ -98,6 +103,7 @@ public synchronized void removeListener(@Nullable Consumer<Boolean> darkThemeLis
98103 private static final class DetectorThread extends Thread {
99104
100105 private final GnomeThemeDetector detector ;
106+ private final Pattern outputPattern = Pattern .compile ("(gtk-theme|color-scheme).*" , Pattern .CASE_INSENSITIVE );
101107 private boolean lastValue ;
102108
103109 DetectorThread (@ NotNull GnomeThemeDetector detector ) {
@@ -117,6 +123,9 @@ public void run() {
117123 while (!this .isInterrupted ()) {
118124 //Expected input = gtk-theme: '$GtkThemeName'
119125 String readLine = reader .readLine ();
126+ if (!outputPattern .matcher (readLine ).matches ()) {
127+ continue ;
128+ }
120129 String [] keyValue = readLine .split ("\\ s" );
121130 String value = keyValue [1 ];
122131 boolean currentDetection = detector .isDarkTheme (value );
0 commit comments