This commit is contained in:
triosi 2025-11-05 14:26:34 +07:00 committed by GitHub
commit 2445d7f020
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 34 additions and 5 deletions

View file

@ -372,8 +372,8 @@ public class AppController implements Initializable {
Theme configTheme = Config.get().getTheme();
if(configTheme == null) {
configTheme = Theme.LIGHT;
Config.get().setTheme(Theme.LIGHT);
configTheme = Theme.SYSTEM_DEFAULT;
Config.get().setTheme(Theme.SYSTEM_DEFAULT);
}
final Theme selectedTheme = configTheme;
Optional<Toggle> selectedThemeToggle = theme.getToggles().stream().filter(toggle -> selectedTheme.equals(toggle.getUserData())).findFirst();
@ -2412,11 +2412,35 @@ public class AppController implements Initializable {
public void setTheme(ActionEvent event) {
Theme selectedTheme = (Theme)theme.getSelectedToggle().getUserData();
Theme themeToApply = selectedTheme;
if (selectedTheme == Theme.SYSTEM_DEFAULT) {
themeToApply = detectSystemTheme();
}
if (Config.get().getTheme() != selectedTheme) {
Config.get().setTheme(selectedTheme);
}
EventManager.get().post(new ThemeChangedEvent(selectedTheme));
EventManager.get().post(new ThemeChangedEvent(themeToApply));
}
private Theme detectSystemTheme() {
String os = System.getProperty("os.name").toLowerCase();
if (os.contains("mac")) {
return isMacDarkMode() ? Theme.DARK : Theme.LIGHT;
}
return Theme.LIGHT;
}
private boolean isMacDarkMode() {
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(
new ProcessBuilder("defaults", "read", "-g", "AppleInterfaceStyle").start().getInputStream()))) {
String result = reader.readLine();
return result != null && result.trim().equalsIgnoreCase("Dark");
} catch (IOException e) {
return false;
}
}
private void serverToggleStartAnimation() {

View file

@ -1,5 +1,5 @@
package com.sparrowwallet.sparrow;
public enum Theme {
LIGHT, DARK
SYSTEM_DEFAULT, LIGHT, DARK
}

View file

@ -101,6 +101,11 @@
</Menu>
<Menu mnemonicParsing="false" text="Theme">
<items>
<RadioMenuItem mnemonicParsing="false" text="System Default" toggleGroup="$theme" onAction="#setTheme">
<userData>
<Theme fx:constant="SYSTEM_DEFAULT" />
</userData>
</RadioMenuItem>
<RadioMenuItem mnemonicParsing="false" text="Light" toggleGroup="$theme" onAction="#setTheme">
<userData>
<Theme fx:constant="LIGHT" />