mirror of
https://github.com/tomasriveral/nixos.git
synced 2026-08-12 02:28:37 +02:00
145 lines
5.2 KiB
QML
145 lines
5.2 KiB
QML
pragma ComponentBehavior: Bound
|
|
|
|
import QtQuick
|
|
import QtQuick.Layouts
|
|
import QtQuick.Effects
|
|
import Quickshell
|
|
import Quickshell.Services.SystemTray
|
|
import "../../theme" as Theme
|
|
import ".."
|
|
import "../.."
|
|
import "../../components"
|
|
|
|
Rectangle {
|
|
id: root
|
|
required property var bar
|
|
implicitWidth: row.implicitWidth + 10
|
|
Layout.fillHeight: true
|
|
|
|
color: "transparent"
|
|
|
|
RowLayout {
|
|
id: row
|
|
implicitWidth: childrenRect.width
|
|
spacing: 5
|
|
|
|
anchors {
|
|
fill: parent
|
|
margins: 5
|
|
}
|
|
|
|
Repeater {
|
|
model: SystemTray.items
|
|
|
|
Item {
|
|
id: item
|
|
required property SystemTrayItem modelData
|
|
|
|
property bool targetMenuOpen: false
|
|
|
|
Layout.fillHeight: true
|
|
implicitWidth: height
|
|
|
|
Image {
|
|
anchors {
|
|
top: parent.top
|
|
bottom: parent.bottom
|
|
horizontalCenter: parent.horizontalCenter
|
|
}
|
|
width: height
|
|
source: item.modelData.icon
|
|
scale: item.targetMenuOpen ? 0.8 : 1
|
|
MouseArea {
|
|
id: mouseArea
|
|
|
|
anchors.fill: parent
|
|
|
|
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
|
|
|
|
// showPressed: item.targetMenuOpen || (pressedButtons & ~Qt.RightButton)
|
|
// fillWindowWidth: true
|
|
// extraVerticalMargin: row.spacing / 2
|
|
|
|
onClicked: event => {
|
|
event.accepted = true;
|
|
|
|
if (event.button == Qt.LeftButton) {
|
|
item.modelData.activate();
|
|
} else if (event.button == Qt.MiddleButton) {
|
|
item.modelData.secondaryActivate();
|
|
}
|
|
}
|
|
|
|
onPressed: event => {
|
|
if (event.button == Qt.RightButton && item.modelData.hasMenu) {
|
|
item.targetMenuOpen = !item.targetMenuOpen;
|
|
}
|
|
}
|
|
|
|
onWheel: event => {
|
|
event.accepted = true;
|
|
const points = event.angleDelta.y / 120;
|
|
item.modelData.scroll(points, false);
|
|
}
|
|
|
|
// property var tooltip: TooltipItem {
|
|
// tooltip: root.bar.tooltip
|
|
// owner: mouseArea
|
|
//
|
|
// show: mouseArea.containsMouse
|
|
//
|
|
// Text {
|
|
// id: tooltipText
|
|
// text: item.modelData.tooltipTitle != "" ? item.modelData.tooltipTitle : item.modelData.id
|
|
// color: "white"
|
|
// }
|
|
// }
|
|
|
|
LazyLoader {
|
|
active: item.targetMenuOpen
|
|
|
|
PopupWindow {
|
|
id: rightclickMenu
|
|
anchor.window: root.bar
|
|
visible: true
|
|
|
|
Component.onCompleted: () => {
|
|
root.bar.focusable = true;
|
|
const pos = mouseArea.mapToGlobal(mouseArea.x, mouseArea.y);
|
|
anchor.rect.x = pos.x;
|
|
anchor.rect.y = pos.y + mouseArea.height;
|
|
}
|
|
Connections {
|
|
target: item
|
|
function onTargetMenuOpenChanged() {
|
|
root.bar.focusable = false;
|
|
}
|
|
}
|
|
contentItem {
|
|
focus: true
|
|
Keys.onEscapePressed: item.targetMenuOpen = false
|
|
}
|
|
|
|
implicitWidth: Math.max(1, menuView.implicitWidth)
|
|
implicitHeight: Math.max(1, menuView.implicitHeight)
|
|
color: Theme.Colors.sysTrayColor1
|
|
|
|
Rectangle {
|
|
anchors.fill: parent
|
|
color: Theme.Colors.sysTrayColor2
|
|
MenuView {
|
|
id: menuView
|
|
anchors.fill: parent
|
|
menu: item.modelData.menu
|
|
onClose: item.targetMenuOpen = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|