From 3c5a23799f64f57140df8749494fd10d6c31d255 Mon Sep 17 00:00:00 2001 From: bbedward Date: Mon, 13 Oct 2025 14:16:36 -0400 Subject: [PATCH] Flip light/dark mode and icon themes properly --- Common/SettingsData.qml | 18 +++++++++--------- Services/PortalService.qml | 10 ++++++++++ scripts/matugen-worker.sh | 8 -------- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/Common/SettingsData.qml b/Common/SettingsData.qml index ec0f7ec3..21fb788b 100644 --- a/Common/SettingsData.qml +++ b/Common/SettingsData.qml @@ -1004,15 +1004,15 @@ Singleton { function updateGtkIconTheme(themeName) { var gtkThemeName = (themeName === "System Default") ? systemDefaultIconTheme : themeName if (gtkThemeName !== "System Default" && gtkThemeName !== "") { - var script = "if command -v gsettings >/dev/null 2>&1 && gsettings list-schemas | grep -q org.gnome.desktop.interface; then\n" - + " gsettings set org.gnome.desktop.interface icon-theme '" + gtkThemeName + "'\n" + " echo 'Updated via gsettings'\n" + "elif command -v dconf >/dev/null 2>&1; then\n" + " dconf write /org/gnome/desktop/interface/icon-theme \\\"" + gtkThemeName + "\\\"\n" - + " echo 'Updated via dconf'\n" + "fi\n" + "\n" + "# Ensure config directories exist\n" + "mkdir -p " + _configDir + "/gtk-3.0 " + _configDir - + "/gtk-4.0\n" + "\n" + "# Update settings.ini files (keep existing gtk-theme-name)\n" + "for config_dir in " + _configDir + "/gtk-3.0 " + _configDir + "/gtk-4.0; do\n" - + " settings_file=\"$config_dir/settings.ini\"\n" + " if [ -f \"$settings_file\" ]; then\n" + " # Update existing icon-theme-name line or add it\n" + " if grep -q '^gtk-icon-theme-name=' \"$settings_file\"; then\n" + " sed -i 's/^gtk-icon-theme-name=.*/gtk-icon-theme-name=" + gtkThemeName + "/' \"$settings_file\"\n" + " else\n" - + " # Add icon theme setting to [Settings] section or create it\n" + " if grep -q '\\[Settings\\]' \"$settings_file\"; then\n" + " sed -i '/\\[Settings\\]/a gtk-icon-theme-name=" + gtkThemeName + "' \"$settings_file\"\n" + " else\n" + " echo -e '\\n[Settings]\\ngtk-icon-theme-name=" + gtkThemeName - + "' >> \"$settings_file\"\n" + " fi\n" + " fi\n" + " else\n" + " # Create new settings.ini file\n" + " echo -e '[Settings]\\ngtk-icon-theme-name=" + gtkThemeName + "' > \"$settings_file\"\n" - + " fi\n" + " echo \"Updated $settings_file\"\n" + "done\n" + "\n" + "# Clear icon cache and force refresh\n" + "rm -rf ~/.cache/icon-cache ~/.cache/thumbnails 2>/dev/null || true\n" + "# Send SIGHUP to running GTK applications to reload themes (Fedora-specific)\n" + "pkill -HUP -f 'gtk' 2>/dev/null || true\n" - Quickshell.execDetached(["sh", "-lc", script]) + if (DMSService.apiVersion >= 3) { + PortalService.setSystemIconTheme(gtkThemeName) + } + + var configScript = "mkdir -p " + _configDir + "/gtk-3.0 " + _configDir + "/gtk-4.0\n" + "\n" + "for config_dir in " + _configDir + "/gtk-3.0 " + _configDir + "/gtk-4.0; do\n" + + " settings_file=\"$config_dir/settings.ini\"\n" + " if [ -f \"$settings_file\" ]; then\n" + " if grep -q '^gtk-icon-theme-name=' \"$settings_file\"; then\n" + " sed -i 's/^gtk-icon-theme-name=.*/gtk-icon-theme-name=" + gtkThemeName + "/' \"$settings_file\"\n" + " else\n" + + " if grep -q '\\[Settings\\]' \"$settings_file\"; then\n" + " sed -i '/\\[Settings\\]/a gtk-icon-theme-name=" + gtkThemeName + "' \"$settings_file\"\n" + " else\n" + " echo -e '\\n[Settings]\\ngtk-icon-theme-name=" + gtkThemeName + "' >> \"$settings_file\"\n" + " fi\n" + + " fi\n" + " else\n" + " echo -e '[Settings]\\ngtk-icon-theme-name=" + gtkThemeName + "' > \"$settings_file\"\n" + " fi\n" + "done\n" + "\n" + "rm -rf ~/.cache/icon-cache ~/.cache/thumbnails 2>/dev/null || true\n" + "pkill -HUP -f 'gtk' 2>/dev/null || true\n" + Quickshell.execDetached(["sh", "-lc", configScript]) } } diff --git a/Services/PortalService.qml b/Services/PortalService.qml index f5b9e7e2..9bd16afa 100644 --- a/Services/PortalService.qml +++ b/Services/PortalService.qml @@ -116,6 +116,16 @@ Singleton { }) } + function setSystemIconTheme(themeName) { + if (!settingsPortalAvailable || !freedeskAvailable) return + + DMSService.sendRequest("freedesktop.settings.setIconTheme", { iconTheme: themeName }, response => { + if (response.error) { + console.warn("PortalService: Failed to set icon theme:", response.error) + } + }) + } + function setSystemProfileImage(imagePath) { if (!accountsServiceAvailable || !freedeskAvailable) return diff --git a/scripts/matugen-worker.sh b/scripts/matugen-worker.sh index ba487522..084c2d38 100755 --- a/scripts/matugen-worker.sh +++ b/scripts/matugen-worker.sh @@ -273,14 +273,6 @@ EOF mv "$TMP" "$CONFIG_DIR/kitty/dank-theme.conf" fi fi - COLOR_SCHEME=$([[ "$mode" == "light" ]] && echo default || echo prefer-dark) - if command -v dconf >/dev/null 2>&1; then - dconf write /org/gnome/desktop/interface/color-scheme "\"$COLOR_SCHEME\"" 2>/dev/null || true - [[ "$icon" != "System Default" && -n "$icon" ]] && dconf write /org/gnome/desktop/interface/icon-theme "\"$icon\"" 2>/dev/null || true - elif command -v gsettings >/dev/null 2>&1; then - gsettings set org.gnome.desktop.interface color-scheme "$COLOR_SCHEME" 2>/dev/null || true - [[ "$icon" != "System Default" && -n "$icon" ]] && gsettings set org.gnome.desktop.interface icon-theme "$icon" 2>/dev/null || true - fi } if command -v pywalfox >/dev/null 2>&1 && [[ -f "$HOME/.cache/wal/colors.json" ]]; then