import QtQuick import Quickshell import Quickshell.Widgets import Quickshell.Services.SystemTray Item { anchors.verticalCenter: parent.verticalCenter width: systemTrayRow.childrenRect.width height: parent.height clip: true Row { id: systemTrayRow anchors.centerIn: parent width: childrenRect.width height: parent.height spacing: 0 Repeater { model: SystemTray.items.values delegate: Item { property var trayItem: modelData property string iconSource: { let icon = trayItem && trayItem.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 "" } width: 16 height: parent.height anchors.verticalCenter: parent.verticalCenter IconImage { anchors.centerIn: parent width: parent.width height: parent.width source: parent.iconSource asynchronous: true smooth: true mipmap: true } MouseArea { id: trayItemArea anchors.fill: parent acceptedButtons: Qt.LeftButton | Qt.RightButton hoverEnabled: true cursorShape: Qt.PointingHandCursor onClicked: mouse => { if (!trayItem) return if (mouse.button === Qt.LeftButton && !trayItem.onlyMenu) { trayItem.activate() return } if (trayItem.hasMenu) { var globalPos = mapToGlobal(0, 0) var currentScreen = screen || Screen var screenX = currentScreen.x || 0 var relativeX = globalPos.x - screenX menuAnchor.menu = trayItem.menu menuAnchor.anchor.window = bar menuAnchor.anchor.rect = Qt.rect( relativeX, 21, parent.width, 1) menuAnchor.open() } } } } } } QsMenuAnchor { id: menuAnchor } }