diff --git a/quickshell/Common/Paths.qml b/quickshell/Common/Paths.qml index 7805a7f5..3637b8e7 100644 --- a/quickshell/Common/Paths.qml +++ b/quickshell/Common/Paths.qml @@ -45,6 +45,10 @@ Singleton { Quickshell.execDetached(["cp", strip(from), strip(to)]); } + function isSteamApp(appId: string): bool { + return appId && /^steam_app_\d+$/.test(appId); + } + function moddedAppId(appId: string): string { const subs = SettingsData.appIdSubstitutions || []; for (let i = 0; i < subs.length; i++) { @@ -60,6 +64,9 @@ Singleton { } } } + const steamMatch = appId.match(/^steam_app_(\d+)$/); + if (steamMatch) + return `steam_icon_${steamMatch[1]}`; return appId; } diff --git a/quickshell/Modules/DankBar/Widgets/FocusedApp.qml b/quickshell/Modules/DankBar/Widgets/FocusedApp.qml index 0cd641e0..12b4a268 100644 --- a/quickshell/Modules/DankBar/Widgets/FocusedApp.qml +++ b/quickshell/Modules/DankBar/Widgets/FocusedApp.qml @@ -155,9 +155,17 @@ BasePill { } } + DankIcon { + anchors.centerIn: parent + size: 18 + name: "sports_esports" + color: Theme.widgetTextColor + visible: root.isVerticalOrientation && activeWindow && activeWindow.appId && appIcon.status !== Image.Ready && Paths.isSteamApp(activeWindow.appId) + } + Text { anchors.centerIn: parent - visible: root.isVerticalOrientation && activeWindow && activeWindow.appId && appIcon.status !== Image.Ready + visible: root.isVerticalOrientation && activeWindow && activeWindow.appId && appIcon.status !== Image.Ready && !Paths.isSteamApp(activeWindow.appId) text: { if (!activeWindow || !activeWindow.appId) return "?"; diff --git a/quickshell/Modules/DankBar/Widgets/RunningApps.qml b/quickshell/Modules/DankBar/Widgets/RunningApps.qml index 8201e130..cd204f37 100644 --- a/quickshell/Modules/DankBar/Widgets/RunningApps.qml +++ b/quickshell/Modules/DankBar/Widgets/RunningApps.qml @@ -393,9 +393,19 @@ Item { } } + DankIcon { + anchors.left: parent.left + anchors.leftMargin: (widgetData?.runningAppsCompactMode !== undefined ? widgetData.runningAppsCompactMode : SettingsData.runningAppsCompactMode) ? Math.round((parent.width - Theme.barIconSize(root.barThickness)) / 2) : Theme.spacingXS + anchors.verticalCenter: parent.verticalCenter + size: Theme.barIconSize(root.barThickness) + name: "sports_esports" + color: Theme.widgetTextColor + visible: !iconImg.visible && Paths.isSteamApp(appId) + } + Text { anchors.centerIn: parent - visible: !iconImg.visible + visible: !iconImg.visible && !Paths.isSteamApp(appId) text: { root._desktopEntriesUpdateTrigger; if (!appId) @@ -628,9 +638,19 @@ Item { } } + DankIcon { + anchors.left: parent.left + anchors.leftMargin: (widgetData?.runningAppsCompactMode !== undefined ? widgetData.runningAppsCompactMode : SettingsData.runningAppsCompactMode) ? Math.round((parent.width - Theme.barIconSize(root.barThickness)) / 2) : Theme.spacingXS + anchors.verticalCenter: parent.verticalCenter + size: Theme.barIconSize(root.barThickness) + name: "sports_esports" + color: Theme.widgetTextColor + visible: !iconImg.visible && Paths.isSteamApp(appId) + } + Text { anchors.centerIn: parent - visible: !iconImg.visible + visible: !iconImg.visible && !Paths.isSteamApp(appId) text: { root._desktopEntriesUpdateTrigger; if (!appId) diff --git a/quickshell/Modules/DankBar/Widgets/WorkspaceSwitcher.qml b/quickshell/Modules/DankBar/Widgets/WorkspaceSwitcher.qml index 1cfdc362..e70297c1 100644 --- a/quickshell/Modules/DankBar/Widgets/WorkspaceSwitcher.qml +++ b/quickshell/Modules/DankBar/Widgets/WorkspaceSwitcher.qml @@ -265,6 +265,7 @@ Item { if (!byApp[key]) { const isQuickshell = keyBase === "org.quickshell"; + const isSteamApp = Paths.isSteamApp(keyBase); const moddedId = Paths.moddedAppId(keyBase); const desktopEntry = DesktopEntries.heuristicLookup(moddedId); const icon = Paths.getAppIcon(keyBase, desktopEntry); @@ -272,6 +273,7 @@ Item { "type": "icon", "icon": icon, "isQuickshell": isQuickshell, + "isSteamApp": isSteamApp, "active": !!((w.activated || w.is_focused) || (CompositorService.isNiri && w.is_focused)), "count": 1, "windowId": w.address || w.id, @@ -1135,7 +1137,7 @@ Item { anchors.fill: parent source: modelData.icon opacity: modelData.active ? 1.0 : rowAppMouseArea.containsMouse ? 0.8 : 0.6 - visible: !modelData.isQuickshell + visible: !modelData.isQuickshell && !modelData.isSteamApp } IconImage { @@ -1151,6 +1153,22 @@ Item { } } + IconImage { + anchors.fill: parent + source: modelData.icon + opacity: modelData.active ? 1.0 : rowAppMouseArea.containsMouse ? 0.8 : 0.6 + visible: modelData.isSteamApp && modelData.icon + } + + DankIcon { + anchors.centerIn: parent + size: root.appIconSize + name: "sports_esports" + color: Theme.widgetTextColor + opacity: modelData.active ? 1.0 : rowAppMouseArea.containsMouse ? 0.8 : 0.6 + visible: modelData.isSteamApp && !modelData.icon + } + MouseArea { id: rowAppMouseArea anchors.fill: parent @@ -1229,7 +1247,7 @@ Item { anchors.fill: parent source: modelData.icon opacity: modelData.active ? 1.0 : colAppMouseArea.containsMouse ? 0.8 : 0.6 - visible: !modelData.isQuickshell + visible: !modelData.isQuickshell && !modelData.isSteamApp } IconImage { @@ -1245,6 +1263,22 @@ Item { } } + IconImage { + anchors.fill: parent + source: modelData.icon + opacity: modelData.active ? 1.0 : colAppMouseArea.containsMouse ? 0.8 : 0.6 + visible: modelData.isSteamApp && modelData.icon + } + + DankIcon { + anchors.centerIn: parent + size: root.appIconSize + name: "sports_esports" + color: Theme.widgetTextColor + opacity: modelData.active ? 1.0 : colAppMouseArea.containsMouse ? 0.8 : 0.6 + visible: modelData.isSteamApp && !modelData.icon + } + MouseArea { id: colAppMouseArea anchors.fill: parent diff --git a/quickshell/Modules/Dock/DockAppButton.qml b/quickshell/Modules/Dock/DockAppButton.qml index 8c0197e6..529ec7bf 100644 --- a/quickshell/Modules/Dock/DockAppButton.qml +++ b/quickshell/Modules/Dock/DockAppButton.qml @@ -403,7 +403,7 @@ Item { width: actualIconSize height: actualIconSize anchors.centerIn: parent - visible: iconImg.status !== Image.Ready + visible: iconImg.status !== Image.Ready && appData && appData.appId && !Paths.isSteamApp(appData.appId) color: Theme.surfaceLight radius: Theme.cornerRadius border.width: 1 @@ -425,6 +425,14 @@ Item { } } + DankIcon { + anchors.centerIn: parent + size: actualIconSize + name: "sports_esports" + color: Theme.surfaceText + visible: iconImg.status !== Image.Ready && appData && appData.appId && Paths.isSteamApp(appData.appId) + } + Loader { anchors.horizontalCenter: SettingsData.dockPosition === SettingsData.Position.Left || SettingsData.dockPosition === SettingsData.Position.Right ? undefined : parent.horizontalCenter anchors.verticalCenter: SettingsData.dockPosition === SettingsData.Position.Left || SettingsData.dockPosition === SettingsData.Position.Right ? parent.verticalCenter : undefined