trayicon rendering

This commit is contained in:
Zacharias-Brohn
2025-10-16 16:15:49 +02:00
parent aa7479b466
commit ad43c3c694
2 changed files with 55 additions and 17 deletions
+16
View File
@@ -0,0 +1,16 @@
pragma Singleton
import Quickshell
import Quickshell.Services.Notifications
Singleton {
id: root
function getTrayIcon(id: string, icon: string): string {
if (icon.includes("?path=")) {
const [name, path] = icon.split("?path=");
icon = Qt.resolvedUrl(`${path}/${name.slice(name.lastIndexOf("/") + 1)}`);
}
return icon;
}
}
+39 -17
View File
@@ -3,31 +3,53 @@
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Effects import QtQuick.Effects
import Caelestia
import Quickshell import Quickshell
import Quickshell.Widgets import Quickshell.Widgets
import Quickshell.Services.SystemTray import Quickshell.Services.SystemTray
IconImage { MouseArea {
id: root id: root
required property SystemTrayItem item required property SystemTrayItem item
source: root.item.icon implicitWidth: 22
implicitWidth: 18 implicitHeight: 22
implicitHeight: 18
mipmap: false acceptedButtons: Qt.LeftButton | Qt.RightButton
asynchronous: true onClicked: event => {
MouseArea { switch (event.button) {
anchors.fill: parent case Qt.LeftButton: root.item.activate(); break;
acceptedButtons: Qt.LeftButton | Qt.RightButton case Qt.RightButton:
onClicked: event => { if (root.item.hasMenu) {
switch (event.button) { menuAnchor.open();
case Qt.LeftButton: root.item.activate(); break;
case Qt.RightButton:
if (root.item.hasMenu) {
menuAnchor.open();
}
break;
} }
break;
}
}
IconImage {
id: icon
anchors.fill: parent
layer.enabled: true
layer.onEnabledChanged: {
if (layer.enabled && status === Image.Ready)
analyser.requestUpdate();
}
onStatusChanged: {
if (layer.enabled && status === Image.Ready)
analyser.requestUpdate();
}
source: GetIcons.getTrayIcon(root.item.id, root.item.icon)
mipmap: false
asynchronous: true
ImageAnalyser {
id: analyser
sourceItem: icon
} }
} }
QsMenuAnchor { QsMenuAnchor {