bar/tray: add icon subs

Usage: array of { id, image | icon }
This commit is contained in:
2 * r + 2 * t 2025-09-09 21:02:24 +10:00
parent 2563430e3b
commit 5b81104ffa
4 changed files with 17 additions and 8 deletions

View file

@ -331,6 +331,7 @@ default, you must create it manually.
},
"tray": {
"background": false,
"iconSubs": [],
"recolour": false
},
"workspaces": {

View file

@ -77,6 +77,7 @@ JsonObject {
component Tray: JsonObject {
property bool background: false
property bool recolour: false
property list<var> iconSubs: []
}
component Status: JsonObject {

View file

@ -3,6 +3,7 @@ pragma ComponentBehavior: Bound
import qs.components.effects
import qs.services
import qs.config
import qs.utils
import Quickshell.Services.SystemTray
import QtQuick
@ -26,14 +27,7 @@ MouseArea {
id: icon
anchors.fill: parent
source: {
let icon = root.modelData.icon;
if (icon.includes("?path=")) {
const [name, path] = icon.split("?path=");
icon = Qt.resolvedUrl(`${path}/${name.slice(name.lastIndexOf("/") + 1)}`);
}
return icon;
}
source: Icons.getTrayIcon(root.modelData.id, root.modelData.icon)
colour: Colours.palette.m3secondary
layer.enabled: Config.bar.tray.recolour
}

View file

@ -1,5 +1,6 @@
pragma Singleton
import qs.config
import Quickshell
import Quickshell.Services.Notifications
@ -205,4 +206,16 @@ Singleton {
return "monitor_heart";
return name[0].toUpperCase();
}
function getTrayIcon(id: string, icon: string): string {
for (const sub of Config.bar.tray.iconSubs)
if (sub.id === id)
return sub.image ? Qt.resolvedUrl(sub.image) : Quickshell.iconPath(sub.icon);
if (icon.includes("?path=")) {
const [name, path] = icon.split("?path=");
icon = Qt.resolvedUrl(`${path}/${name.slice(name.lastIndexOf("/") + 1)}`);
}
return icon;
}
}