import qs.modules.common import qs.modules.common.widgets import qs.modules.common.functions import QtQuick import Quickshell import Quickshell.Services.SystemTray import Quickshell.Widgets import Qt5Compat.GraphicalEffects MouseArea { id: root property var bar: root.QsWindow.window required property SystemTrayItem item property bool targetMenuOpen: false hoverEnabled: true acceptedButtons: Qt.LeftButton | Qt.RightButton implicitWidth: 20 implicitHeight: 20 onClicked: (event) => { switch (event.button) { case Qt.LeftButton: item.activate(); break; case Qt.RightButton: if (item.hasMenu) menu.open(); break; } event.accepted = true; } onEntered: { tooltip.content = item.tooltipTitle.length > 0 ? item.tooltipTitle : (item.title.length > 0 ? item.title : item.id); if (item.tooltipDescription.length > 0) tooltip.content += " • " + item.tooltipDescription; if (Config.options.bar.tray.showItemId) tooltip.content += "\n[" + item.id + "]"; } QsMenuAnchor { id: menu menu: root.item.menu anchor.window: bar anchor.rect.x: root.x + (Config.options.bar.vertical ? 0 : bar?.width) anchor.rect.y: root.y + (Config.options.bar.vertical ? bar?.height : 0) anchor.rect.height: root.height anchor.rect.width: root.width anchor.edges: Config.options.bar.bottom ? (Edges.Top | Edges.Left) : (Edges.Bottom | Edges.Right) } IconImage { id: trayIcon visible: !Config.options.bar.tray.monochromeIcons source: root.item.icon anchors.centerIn: parent width: parent.width height: parent.height } Loader { active: Config.options.bar.tray.monochromeIcons anchors.fill: trayIcon sourceComponent: Item { Desaturate { id: desaturatedIcon visible: false // There's already color overlay anchors.fill: parent source: trayIcon desaturation: 0.8 // 1.0 means fully grayscale } ColorOverlay { anchors.fill: desaturatedIcon source: desaturatedIcon color: ColorUtils.transparentize(Appearance.colors.colOnLayer0, 0.9) } } } StyledToolTip { id: tooltip extraVisibleCondition: root.containsMouse alternativeVisibleCondition: extraVisibleCondition } }