import QtQuick 2.15 import Quickshell import Quickshell.Services.SystemTray PopupWindow { id: trayMenuPopup required property var bar anchor.window: bar anchor.rect.x: bar.trayMenuAnchorX anchor.rect.y: bar.implicitHeight implicitWidth: 220 implicitHeight: trayMenuCol.implicitHeight + 8 grabFocus: true color: "black" onVisibleChanged: if (!visible) { bar.activeTrayMenu = null; bar.activeSubmenuEntry = null } QsMenuOpener { id: trayMenuOpener menu: bar.activeTrayMenu } Column { id: trayMenuCol x: 4; y: 4 width: parent.width - 8 Repeater { model: trayMenuOpener.children delegate: Item { id: menuEntry required property var modelData width: trayMenuCol.width height: menuEntry.modelData.isSeparator ? 9 : 36 Rectangle { visible: menuEntry.modelData.isSeparator anchors.centerIn: parent width: parent.width height: 1 color: "#333" } Rectangle { visible: !menuEntry.modelData.isSeparator anchors.fill: parent radius: 3 color: menuItemArea.containsMouse && menuEntry.modelData.enabled ? "#1a1a1a" : "transparent" Text { anchors { left: parent.left leftMargin: 10 right: parent.right rightMargin: menuEntry.modelData.hasChildren ? 24 : 10 verticalCenter: parent.verticalCenter } text: menuEntry.modelData.text color: menuEntry.modelData.enabled ? "white" : "#555" font.family: "Inter" font.pixelSize: 14 font.weight: 700 elide: Text.ElideRight } Text { visible: menuEntry.modelData.hasChildren anchors { right: parent.right; rightMargin: 8; verticalCenter: parent.verticalCenter } text: "›" color: "white" font.family: "Inter" font.pixelSize: 16 } MouseArea { id: menuItemArea anchors.fill: parent hoverEnabled: true enabled: menuEntry.modelData.enabled && !menuEntry.modelData.isSeparator onEntered: { if (menuEntry.modelData.hasChildren) bar.activeSubmenuEntry = menuEntry.modelData else bar.activeSubmenuEntry = null } onClicked: { if (!menuEntry.modelData.hasChildren) { menuEntry.modelData.triggered() trayMenuPopup.visible = false } } } } } } } }