Declare FollowsColorScheme=true for the Shift icon theme so KDE apps recolor symbolic Places glyphs against dark and light surfaces. Document the requirement and guard it in the icon theme coverage test.
2.4 KiB
Shift Icon Theme
org.shift.icons is the icon theme selected by lookandfeel/contents/defaults.
It inherits only hicolor, so shell-owned glyphs used by the Shift UI need to exist in this theme or in the local hicolor source icon set.
The SVG glyphs are adapted from Phosphor Icons and licensed through the scoped REUSE metadata in .reuse/dep5.
The theme sets FollowsColorScheme=true; symbolic SVGs use .ColorScheme-Text and currentColor so KDE applications recolor them for both dark and light color schemes.
Theme paths used here:
actions/symbolic/: symbolic shell glyphs used by QML controls, status indicators, quick settings, window controls, and category icons.places/symbolic/: symbolic place glyphs used by the dock and shell surfaces.apps/scalable/: colored launcher icons for desktop-file app icon names that are part of the default Shift UI.preferences/scalable/: colored System Settings category and module icons for names that should not fall back to monochrome action glyphs.
Keep preferences/scalable before actions/symbolic in index.theme. System Settings looks up category and KCM module icons by name, and the icon theme specification searches theme directories in order. If symbolic action aliases come first, names such as preferences-desktop-sound, preferences-system-time, or network-wireless-symbolic resolve to dark monochrome SVGs instead of colored preference icons.
When a QML icon is owned by the shell, render it as a masked icon with an explicit theme color:
Kirigami.Icon {
source: "icon-name"
isMask: true
color: Kirigami.Theme.textColor
}
Use the same pattern for shell button properties such as iconName and iconSource. Do not force isMask for dynamic application icons from task, notification, applet, or launcher models; those can be colored app icons.
If a required icon name is only an alias for an existing glyph, keep it as a same-directory symbolic link, for example rotation-allowed-symbolic.svg -> rotation-allowed.svg.
Run the coverage guard after adding or renaming shell icon sources:
bash tests/check-shift-icon-theme.sh
The same check is registered with CTest as shift-icon-theme-coverage.
When Plasma packages are installed, the guard also scans their desktop metadata and QML icon fields so desktop shell, KCM, and applet icon names do not silently fall back to Breeze-only glyphs.