pragma ComponentBehavior: Bound import QtQuick import QtQuick.Layouts import Quickshell import Quickshell.Widgets import Quickshell.Services.SystemTray import qs.Common import qs.Services WrapperRectangle { id: systrayRoot property string monitor: "" rightMargin: Theme.gaps leftMargin: Theme.gaps radius: 25 color: Theme.backgroudColor // color: Theme.backgroudColor RowLayout { property var monitor: parent.monitor Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter Repeater { property string monitor: parent.monitor model: SystemTray.items.values delegate: Rectangle { id: systrayItem required property var modelData property string monitor: parent.monitor property var model: modelData property string iconSource: { let icon = systrayItem.model && systrayItem.model.icon; if (typeof icon === 'string' || icon instanceof String) { if (icon.includes("?path=")) { const split = icon.split("?path="); if (split.length !== 2) { return icon; } const name = split[0]; const path = split[1]; const fileName = name.substring(name.lastIndexOf("/") + 1); return `file://${path}/${fileName}`; } return icon; } return ""; } implicitHeight: 30 implicitWidth: 30 color:"transparent" IconImage { anchors.verticalCenter:parent.verticalCenter anchors.horizontalCenter:parent.horizontalCenter width:25; height:25 source: systrayItem.iconSource } MouseArea { anchors.fill: parent acceptedButtons: Qt.LeftButton | Qt.RightButton hoverEnabled: true onEntered: { PopUpHover.start(systrayItem,"systray") } onExited: { PopUpHover.exit() } onClicked: (mouse) => { if (mouse.button === Qt.RightButton) { menuAnchor.menu = systrayItem.model.menu; menuAnchor.anchor.item = systrayItem; menuAnchor.anchor.rect = Qt.rect( 0, systrayItem.implicitHeight, 0, 0 ); menuAnchor.open(); } else if (mouse.button === Qt.LeftButton) { // systrayItem.model.activate() } } onDoubleClicked: { systrayItem.model.activate() } } } } } QsMenuAnchor { id: menuAnchor } }