Supersedes #1878. Rather than duplicating the moddedAppId + file path
substitution pattern inline across 8 files, this introduces two
centralized functions in Paths.qml:
- resolveIconPath(iconName): for Quickshell.iconPath() callsites,
with DesktopService.resolveIconPath() fallback
- resolveIconUrl(iconName): for image://icon/ URL callsites
All consumer files now use one-line calls. When no substitutions are
configured, moddedAppId() returns the original name unchanged (zero
cost), so this has no impact on users who don't use the feature.
Affected components:
- AppIconRenderer (8 lines → 1)
- NotificationCard, NotificationPopup, HistoryNotificationCard
- DockContextMenu, AppsDockContextMenu
- LauncherContent, LauncherTab (×3)
Co-authored-by: odtgit <odtgit@taliops.com>
* clipboard: improve image thumbnail
- thumbnail image is now bigger
- circular mask has been replaced with rounded rectangular mask
* dock: fix dock still visible when there's no app
* feat: add configurable app ID substitutions setting
* feat: add live icon updates when substitutions change
* fix: cursor not showing on headerActions in non-collapsible cards
* fix: address PR review feedback
- add tags for search index
- remove hardcoded height from text fields
Steam Proton games use window class steam_app_XXXXX. Steam installs
icons as steam_icon_XXXXX. This maps between them so actual game
icons display instead of generic controller fallback.