Customtray #3

Merged
Zacharias-Brohn merged 6 commits from customtray into main 2025-11-02 22:26:25 +01:00
4 changed files with 112 additions and 17 deletions
Showing only changes of commit 762bae37cb - Show all commits
+1
View File
@@ -16,6 +16,7 @@ Scope {
PanelWindow { PanelWindow {
id: bar id: bar
required property var modelData required property var modelData
property bool trayMenuVisible: false
screen: modelData screen: modelData
anchors { anchors {
+19 -16
View File
@@ -7,6 +7,7 @@ import Caelestia
import Quickshell import Quickshell
import Quickshell.Widgets import Quickshell.Widgets
import Quickshell.Services.SystemTray import Quickshell.Services.SystemTray
import qs.Modules
MouseArea { MouseArea {
id: root id: root
@@ -16,17 +17,9 @@ MouseArea {
implicitWidth: 22 implicitWidth: 22
implicitHeight: 22 implicitHeight: 22
hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.RightButton acceptedButtons: Qt.LeftButton | Qt.RightButton
onClicked: event => {
switch (event.button) {
case Qt.LeftButton: root.item.activate(); break;
case Qt.RightButton:
if (root.item.hasMenu) {
menuAnchor.open();
}
break;
}
}
IconImage { IconImage {
id: icon id: icon
@@ -51,13 +44,23 @@ MouseArea {
id: analyser id: analyser
sourceItem: icon sourceItem: icon
} }
}
QsMenuAnchor { TrayMenu {
id: menuAnchor id: trayMenu
menu: root.item.menu menu: root.item.menu
anchor.item: root anchor.item: root
anchor.edges: Edges.Bottom | Edges.Left anchor.edges: Edges.Bottom
anchor.margins.top: 23 anchor.margins {
anchor.adjustment: PopupAdjustment.SlideX left: -270
}
}
}
onClicked: {
if ( mouse.button === Qt.LeftButton ) {
root.item.activate();
} else if ( mouse.button === Qt.RightButton ) {
trayMenu.visible = !trayMenu.visible;
}
} }
} }
+87
View File
@@ -0,0 +1,87 @@
pragma ComponentBehavior: Bound
import Quickshell
import QtQuick
import QtQuick.Layouts
import Quickshell.Hyprland
PopupWindow {
id: root
required property QsMenuHandle menu
property int height: entryCount * ( entryHeight + 3 )
property int entryHeight: 30
property int entryCount: 0
implicitWidth: 300
implicitHeight: height
color: "transparent"
QsMenuOpener {
id: menuOpener
menu: root.menu
}
HyprlandFocusGrab {
id: grab
windows: [ root ]
onCleared: {
root.visible = false;
}
}
onVisibleChanged: {
grab.active = root.visible;
}
Rectangle {
anchors.fill: parent
color: "#90000000"
radius: 8
border.color: "#10FFFFFF"
ColumnLayout {
id: columnLayout
anchors.fill: parent
anchors.margins: 5
spacing: 2
Repeater {
id: repeater
model: menuOpener.children
Rectangle {
id: menuItem
width: root.implicitWidth
Layout.maximumWidth: parent.width
Layout.fillHeight: true
height: root.entryHeight
color: mouseArea.containsMouse && !modelData.isSeparator ? "#15FFFFFF" : "transparent"
radius: 4
visible: modelData.isSeparator ? false : true
required property QsMenuEntry modelData
Component.onCompleted: {
if ( !modelData.isSeparator ) {
root.entryCount += 1;
}
}
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
preventStealing: true
propagateComposedEvents: true
acceptedButtons: Qt.LeftButton
onClicked: {
menuItem.modelData.triggered();
root.visible = false;
}
}
Text {
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: 10
text: menuItem.modelData.text
color: "white"
}
}
}
}
}
}
+4
View File
@@ -1,9 +1,12 @@
pragma ComponentBehavior: Bound
import QtQuick import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import Quickshell import Quickshell
import Quickshell.Services.SystemTray import Quickshell.Services.SystemTray
Rectangle { Rectangle {
id: root
required property PanelWindow bar required property PanelWindow bar
implicitHeight: parent.height implicitHeight: parent.height
implicitWidth: rowL.implicitWidth + 20 implicitWidth: rowL.implicitWidth + 20
@@ -14,6 +17,7 @@ Rectangle {
id: rowL id: rowL
anchors.centerIn: parent anchors.centerIn: parent
Repeater { Repeater {
id: repeater
model: SystemTray.items model: SystemTray.items
TrayItem { TrayItem {
required property SystemTrayItem modelData required property SystemTrayItem modelData