forked from Shinonome/dots-hyprland
f3de317ddd
The systray id is intended for programmatic use rather than frontend presentation. It is recommended to use the tooltipTitle and title attributes when available, and these should be updated upon entry, as their values may change dynamically.
86 lines
2.5 KiB
QML
86 lines
2.5 KiB
QML
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
|
|
}
|
|
|
|
}
|