mirror of
https://github.com/end-4/dots-hyprland.git
synced 2026-06-07 07:49:28 -05:00
102 lines
3.2 KiB
QML
102 lines
3.2 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
|
|
required property SystemTrayItem item
|
|
property bool targetMenuOpen: false
|
|
|
|
signal menuOpened(qsWindow: var)
|
|
signal menuClosed()
|
|
|
|
hoverEnabled: true
|
|
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
|
implicitWidth: 20
|
|
implicitHeight: 20
|
|
onPressed: (event) => {
|
|
switch (event.button) {
|
|
case Qt.LeftButton:
|
|
item.activate();
|
|
break;
|
|
case Qt.RightButton:
|
|
if (item.hasMenu) menu.open();
|
|
break;
|
|
}
|
|
event.accepted = true;
|
|
}
|
|
onEntered: {
|
|
tooltip.text = item.tooltipTitle.length > 0 ? item.tooltipTitle
|
|
: (item.title.length > 0 ? item.title : item.id);
|
|
if (item.tooltipDescription.length > 0) tooltip.text += " • " + item.tooltipDescription;
|
|
if (Config.options.bar.tray.showItemId) tooltip.text += "\n[" + item.id + "]";
|
|
}
|
|
|
|
Loader {
|
|
id: menu
|
|
function open() {
|
|
menu.active = true;
|
|
}
|
|
active: false
|
|
sourceComponent: SysTrayMenu {
|
|
Component.onCompleted: this.open();
|
|
trayItemMenuHandle: root.item.menu
|
|
anchor {
|
|
window: root.QsWindow.window
|
|
rect.x: root.x + (Config.options.bar.vertical ? 0 : QsWindow.window?.width)
|
|
rect.y: root.y + (Config.options.bar.vertical ? QsWindow.window?.height : 0)
|
|
rect.height: root.height
|
|
rect.width: root.width
|
|
edges: Config.options.bar.bottom ? (Edges.Top | Edges.Left) : (Edges.Bottom | Edges.Right)
|
|
gravity: Config.options.bar.bottom ? (Edges.Top | Edges.Left) : (Edges.Bottom | Edges.Right)
|
|
}
|
|
onMenuOpened: (window) => root.menuOpened(window);
|
|
onMenuClosed: {
|
|
root.menuClosed();
|
|
menu.active = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|
|
}
|
|
|
|
PopupToolTip {
|
|
id: tooltip
|
|
extraVisibleCondition: root.containsMouse
|
|
alternativeVisibleCondition: extraVisibleCondition
|
|
anchorEdges: (!Config.options.bar.bottom && !Config.options.bar.vertical) ? Edges.Bottom : Edges.Top
|
|
}
|
|
|
|
}
|