From 8e25b683557933ca2b0759b0156ab7a3f1ea7b42 Mon Sep 17 00:00:00 2001 From: Marco Allegretti Date: Mon, 18 May 2026 19:59:11 +0200 Subject: [PATCH] quicksettings: request -symbolic icons for masked tiles Kirigami.Icon { isMask: true } flattens an SVG to its alpha, so when a quick-setting tile resolves to a colored preferences/scalable glyph the whole rounded background collapses into a solid square. Append -symbolic to the five icon names that collided with colored tiles and add symlink aliases where no real symbolic variant exists yet. Guard the regression with a check in tests/check-shift-icon-theme.sh. --- .../symbolic/dialog-information-symbolic.svg | 1 + ...erences-desktop-display-randr-symbolic.svg | 1 + .../symbolic/redshift-status-on-symbolic.svg | 1 + quicksettings/docked/contents/ui/main.qml | 2 +- quicksettings/gaminghint/contents/ui/main.qml | 2 +- quicksettings/hotspot/contents/ui/main.qml | 2 +- .../keyboardtoggle/contents/ui/main.qml | 2 +- .../nightcolor/package/contents/ui/main.qml | 2 +- tests/check-shift-icon-theme.sh | 25 +++++++++++++++++++ 9 files changed, 33 insertions(+), 5 deletions(-) create mode 120000 icons/org.shift.icons/actions/symbolic/dialog-information-symbolic.svg create mode 120000 icons/org.shift.icons/actions/symbolic/preferences-desktop-display-randr-symbolic.svg create mode 120000 icons/org.shift.icons/actions/symbolic/redshift-status-on-symbolic.svg diff --git a/icons/org.shift.icons/actions/symbolic/dialog-information-symbolic.svg b/icons/org.shift.icons/actions/symbolic/dialog-information-symbolic.svg new file mode 120000 index 00000000..015e95ba --- /dev/null +++ b/icons/org.shift.icons/actions/symbolic/dialog-information-symbolic.svg @@ -0,0 +1 @@ +dialog-information.svg \ No newline at end of file diff --git a/icons/org.shift.icons/actions/symbolic/preferences-desktop-display-randr-symbolic.svg b/icons/org.shift.icons/actions/symbolic/preferences-desktop-display-randr-symbolic.svg new file mode 120000 index 00000000..b2abf694 --- /dev/null +++ b/icons/org.shift.icons/actions/symbolic/preferences-desktop-display-randr-symbolic.svg @@ -0,0 +1 @@ +preferences-desktop-display-randr.svg \ No newline at end of file diff --git a/icons/org.shift.icons/actions/symbolic/redshift-status-on-symbolic.svg b/icons/org.shift.icons/actions/symbolic/redshift-status-on-symbolic.svg new file mode 120000 index 00000000..7f814aed --- /dev/null +++ b/icons/org.shift.icons/actions/symbolic/redshift-status-on-symbolic.svg @@ -0,0 +1 @@ +redshift-status-on.svg \ No newline at end of file diff --git a/quicksettings/docked/contents/ui/main.qml b/quicksettings/docked/contents/ui/main.qml index 362eaff9..343b4f0e 100644 --- a/quicksettings/docked/contents/ui/main.qml +++ b/quicksettings/docked/contents/ui/main.qml @@ -9,7 +9,7 @@ import org.kde.plasma.private.mobileshell.quicksettingsplugin as QS QS.QuickSetting { text: i18n("Docked Mode") - icon: "preferences-desktop-display-randr" + icon: "preferences-desktop-display-randr-symbolic" enabled: ShellSettings.Settings.convergenceModeEnabled function toggle() { diff --git a/quicksettings/gaminghint/contents/ui/main.qml b/quicksettings/gaminghint/contents/ui/main.qml index 54073fa1..a6fa4217 100644 --- a/quicksettings/gaminghint/contents/ui/main.qml +++ b/quicksettings/gaminghint/contents/ui/main.qml @@ -8,7 +8,7 @@ import org.kde.plasma.private.mobileshell.quicksettingsplugin as QS QS.QuickSetting { text: i18n("Launch Hint") - icon: "dialog-information" + icon: "dialog-information-symbolic" status: ShellSettings.Settings.gamingDismissHintEnabled ? i18n("On") : i18n("Off") enabled: true available: ShellSettings.Settings.gamingModeEnabled diff --git a/quicksettings/hotspot/contents/ui/main.qml b/quicksettings/hotspot/contents/ui/main.qml index d36ae218..77f03bc0 100644 --- a/quicksettings/hotspot/contents/ui/main.qml +++ b/quicksettings/hotspot/contents/ui/main.qml @@ -10,7 +10,7 @@ QS.QuickSetting { id: root text: i18n("Hotspot") - icon: "network-wireless-hotspot" + icon: "network-wireless-hotspot-symbolic" enabled: MobileShell.NetworkInfo.wirelessStatus.hotspotSSID.length !== 0 status: enabled ? MobileShell.NetworkInfo.wirelessStatus.hotspotSSID : "" diff --git a/quicksettings/keyboardtoggle/contents/ui/main.qml b/quicksettings/keyboardtoggle/contents/ui/main.qml index 97f41388..f20aa0b8 100644 --- a/quicksettings/keyboardtoggle/contents/ui/main.qml +++ b/quicksettings/keyboardtoggle/contents/ui/main.qml @@ -10,7 +10,7 @@ import org.kde.plasma.workspace.keyboardlayout 1.0 as Keyboards QS.QuickSetting { text: i18n("Virtual Keyboard") - icon: "input-keyboard-virtual" + icon: "input-keyboard-virtual-symbolic" status: enabled ? i18n("On") : (Keyboards.KWinVirtualKeyboard.available ? i18n("Off") : i18n("Tap to open settings")) enabled: Keyboards.KWinVirtualKeyboard.enabled && Keyboards.KWinVirtualKeyboard.available diff --git a/quicksettings/nightcolor/package/contents/ui/main.qml b/quicksettings/nightcolor/package/contents/ui/main.qml index 293a3568..5e50d9a4 100644 --- a/quicksettings/nightcolor/package/contents/ui/main.qml +++ b/quicksettings/nightcolor/package/contents/ui/main.qml @@ -11,7 +11,7 @@ import org.kde.plasma.private.mobileshell.quicksettingsplugin as QS QS.QuickSetting { text: i18n("Night Color") - icon: "redshift-status-on" + icon: "redshift-status-on-symbolic" enabled: NightColor.NightColorUtil.enabled status: "" settingsCommand: "plasma-open-settings kcm_nightcolor" diff --git a/tests/check-shift-icon-theme.sh b/tests/check-shift-icon-theme.sh index 73783857..60576348 100644 --- a/tests/check-shift-icon-theme.sh +++ b/tests/check-shift-icon-theme.sh @@ -255,4 +255,29 @@ if [[ -s "$missing_icons" ]]; then printf 'Missing required Shift icons:\n' >&2 sed 's/^/ - /' "$missing_icons" >&2 exit 1 +fi + +# Quick-setting tiles render with Kirigami.Icon { isMask: true }; if their icon +# name resolves to a colored preferences/scalable tile it collapses to a solid +# rounded square. Require an explicit -symbolic suffix for any quick-setting +# icon name that also exists as a colored tile. +masked_collisions="$(mktemp)" +trap 'rm -f "$required_icons" "$missing_icons" "$broken_icons" "$plasma_files" "$masked_collisions"' EXIT + +while IFS= read -r -d '' qml; do + perl -ne 'if (/^\s*icon:\s*"([^"]+)"\s*$/) { print "$1\n"; }' "$qml" +done < <(find quicksettings -name 'main.qml' -print0) \ + | sort -u \ + | while IFS= read -r icon_name; do + case "$icon_name" in + *-symbolic) continue ;; + esac + [[ -e "$theme_dir/preferences/scalable/$icon_name.svg" ]] || continue + printf '%s\n' "$icon_name" + done > "$masked_collisions" + +if [[ -s "$masked_collisions" ]]; then + printf 'Quick-setting icon names must use a -symbolic suffix when a colored preferences/scalable tile exists, otherwise the masked tile renders as a solid square:\n' >&2 + sed 's/^/ - /' "$masked_collisions" >&2 + exit 1 fi \ No newline at end of file