diff --git a/README.md b/README.md index ff61697..b9c8dbe 100644 --- a/README.md +++ b/README.md @@ -13,10 +13,7 @@ It can be useful for example if you want to synchronize your GUI App's look and > This library is inspired by the dark-theme detection in [Intellij Idea](https://github.com/JetBrains/intellij-community). # Compatibility -It works on **Windows 10**, **MacOS Mojave** (or later) and even on **some Linux desktop environments**: - -- Gnome: Fully supported and tested on Ubuntu -- KDE Plasma: Fully supported and tested on Ubuntu +It works on **Windows 10**, **MacOS Mojave** (or later) and even on **some Linux distributions**. # Requirements **Java 11 or higher** diff --git a/src/main/java/com/jthemedetecor/KdeThemeDetector.java b/src/main/java/com/jthemedetecor/KdeThemeDetector.java deleted file mode 100644 index 50ecbf5..0000000 --- a/src/main/java/com/jthemedetecor/KdeThemeDetector.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.jthemedetecor; - -import com.jthemedetecor.util.ConcurrentHashSet; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.Objects; -import java.util.Set; -import java.util.function.Consumer; -import java.util.regex.Pattern; - -/** - * Used for detecting the dark theme on a Linux KDE desktop environment. - * Tested on Ubuntu KDE Plasma (kde-plasma-desktop). - * - * @author Thomas Sartre - * @see GnomeThemeDetector - */ -public class KdeThemeDetector extends OsThemeDetector { - - private static final Logger logger = LoggerFactory.getLogger(KdeThemeDetector.class); - - private static final String GET_THEME_CMD = "kreadconfig5 --file kdeglobals --group General --key ColorScheme"; - - private final Set> listeners = new ConcurrentHashSet<>(); - private final Pattern darkThemeNamePattern = Pattern.compile(".*dark.*", Pattern.CASE_INSENSITIVE); - - private volatile DetectorThread detectorThread; - - @Override - public boolean isDark() { - try { - Process process = Runtime.getRuntime().exec(GET_THEME_CMD); - try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) { - String theme = reader.readLine(); - if (theme != null && isDarkTheme(theme)) { - return true; - } - } - } catch (IOException e) { - logger.error("Couldn't detect KDE OS theme", e); - } - return false; - } - - private boolean isDarkTheme(String theme) { - return darkThemeNamePattern.matcher(theme).matches(); - } - - @Override - public synchronized void registerListener(@NotNull Consumer darkThemeListener) { - Objects.requireNonNull(darkThemeListener); - boolean listenerAdded = listeners.add(darkThemeListener); - boolean singleListener = listenerAdded && listeners.size() == 1; - - if (singleListener || (detectorThread != null && detectorThread.isInterrupted())) { - detectorThread = new DetectorThread(this); - detectorThread.start(); - } - } - - @Override - public synchronized void removeListener(@Nullable Consumer darkThemeListener) { - listeners.remove(darkThemeListener); - if (listeners.isEmpty() && detectorThread != null) { - detectorThread.interrupt(); - detectorThread = null; - } - } - - /** - * Thread implementation for detecting the actually changed theme. - */ - private static final class DetectorThread extends Thread { - - private final KdeThemeDetector detector; - private boolean lastValue; - - DetectorThread(@NotNull KdeThemeDetector detector) { - this.detector = detector; - this.lastValue = detector.isDark(); - this.setName("KDE Theme Detector Thread"); - this.setDaemon(true); - this.setPriority(Thread.NORM_PRIORITY - 1); - } - - @Override - public void run() { - while (!this.isInterrupted()) { - boolean currentDetection = detector.isDark(); - if (currentDetection != lastValue) { - lastValue = currentDetection; - for (Consumer listener : detector.listeners) { - try { - listener.accept(currentDetection); - } catch (RuntimeException e) { - logger.error("Caught exception during listener notification", e); - } - } - } - } - } - } -} diff --git a/src/main/java/com/jthemedetecor/OsThemeDetector.java b/src/main/java/com/jthemedetecor/OsThemeDetector.java index aaebdb9..8640ded 100644 --- a/src/main/java/com/jthemedetecor/OsThemeDetector.java +++ b/src/main/java/com/jthemedetecor/OsThemeDetector.java @@ -62,9 +62,6 @@ private static OsThemeDetector createDetector() { } else if (OsInfo.isGnome()) { logDetection("Gnome", GnomeThemeDetector.class); return new GnomeThemeDetector(); - } else if (OsInfo.isKde()) { - logDetection("KDE", KdeThemeDetector.class); - return new KdeThemeDetector(); } else if (OsInfo.isMacOsMojaveOrLater()) { logDetection("MacOS", MacOSThemeDetector.class); return new MacOSThemeDetector(); @@ -105,7 +102,7 @@ private static void logDetection(String desktop, Class