Files
Quickbar/SysTrayWidget.qml
2025-09-24 17:02:46 -03:00

104 lines
3.4 KiB
QML

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
}
}