summaryrefslogtreecommitdiff
path: root/modules/session/Session.qml
diff options
context:
space:
mode:
Diffstat (limited to 'modules/session/Session.qml')
-rw-r--r--modules/session/Session.qml87
1 files changed, 87 insertions, 0 deletions
diff --git a/modules/session/Session.qml b/modules/session/Session.qml
new file mode 100644
index 0000000..0f8a0d5
--- /dev/null
+++ b/modules/session/Session.qml
@@ -0,0 +1,87 @@
+import "root:/widgets"
+import "root:/services"
+import "root:/config"
+import Quickshell
+import Quickshell.Wayland
+import QtQuick
+
+Scope {
+ id: root
+
+ property int winHeight
+ property bool sessionVisible
+
+ Connections {
+ target: Drawers
+
+ function onPosChanged(screen: ShellScreen, x: int, y: int): void {
+ if (x > screen.width - BorderConfig.thickness && y > (screen.height - root.winHeight) / 2 && y < (screen.height + root.winHeight) / 2)
+ root.sessionVisible = true;
+ }
+ }
+
+ LazyLoader {
+ loading: true
+
+ StyledWindow {
+ id: win
+
+ name: "osd"
+ keyboardFocus: root.sessionVisible ? WlrKeyboardFocus.Exclusive : WlrKeyboardFocus.None
+ visible: wrapper.shouldBeVisible
+
+ mask: Region {
+ item: wrapper
+ }
+
+ anchors.left: true
+ anchors.right: true
+ height: wrapper.height
+
+ Component.onCompleted: {
+ root.winHeight = height;
+ Drawers.rightExclusion = Qt.binding(() => bg.width);
+ }
+
+ Background {
+ id: bg
+
+ visible: false
+
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+
+ wrapperWidth: Math.min(wrapper.width, content.width)
+ wrapperHeight: wrapper.height
+ }
+
+ LayerShadow {
+ source: bg
+ }
+
+ Wrapper {
+ id: wrapper
+
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+
+ implicitHeight: content.height + bg.rounding * 2
+
+ sessionVisible: root.sessionVisible
+ contentWidth: content.width
+
+ Content {
+ id: content
+
+ session: root
+ }
+ }
+ }
+ }
+
+ CustomShortcut {
+ name: "session"
+ description: "Toggle session menu"
+ onPressed: root.sessionVisible = !root.sessionVisible
+ }
+}