diff --git a/Bar.qml b/Bar.qml index 45a8464..cf9838c 100644 --- a/Bar.qml +++ b/Bar.qml @@ -1,8 +1,9 @@ import QtQuick -import QtQuick.Effects -import QtQuick.Layouts import Quickshell import Quickshell.Hyprland +import Quickshell.Io +import Quickshell.Wayland +import "./Services/" import "Bar" import "Color.js" as Colors @@ -19,6 +20,15 @@ Scope { required property var modelData property HyprlandMonitor monitor: Hyprland.monitorFor(modelData) + function refocus() { + if (WlrLayershell == null) + return; + WlrLayershell.keyboardFocus = WlrKeyboardFocus.None; + Qt.callLater(() => { + WlrLayershell.keyboardFocus = WlrKeyboardFocus.Exclusive; + }); + } + color: "transparent" exclusionMode: ExclusionMode.Normal exclusiveZone: barExclusionZone @@ -39,6 +49,26 @@ Scope { } } + Component.onCompleted: { + if (this.WlrLayershell != null) { + this.WlrLayershell.keyboardFocus = WlrKeyboardFocus.OnDemand; + } + } + + + Connections { + function onRaiseCancelled() { + win.WlrLayershell.keyboardFocus = WlrKeyboardFocus.OnDemand; + } + + function onRaiseRequested() { + // win.WlrLayershell.keyboardFocus = WlrKeyboardFocus.Exclusive; + win.refocus(); + } + + target: FocusManager + } + anchors { left: true right: true diff --git a/Bar/Center.qml b/Bar/Center.qml index 103cd75..f863a3c 100644 --- a/Bar/Center.qml +++ b/Bar/Center.qml @@ -3,6 +3,7 @@ import QtQuick import QtQuick.Layouts import Quickshell import Quickshell.Hyprland +import Quickshell.Io import Quickshell.Services.Mpris import Quickshell.Services.Notifications import "../Color.js" as Colors @@ -119,6 +120,23 @@ Container { root.previousState = "notified"; } } + }, + State { + name: "logout" + + PropertyChanges { + root.boxHeight: 90 + root.boxRadius: 30 + root.boxWidth: 330 + root.visibleTopMargin: 20 + } + + StateChangeScript { + script: { + root.stack.replace(logout); + root.previousState = "logout"; + } + } } ] @@ -127,6 +145,8 @@ Container { if (root.state == "notified") { root.state = "notified"; notificationViewTimer.stop(); + } else if (root.state == "logout") { + root.state = "logout"; } else if (MprisManager.getPlaying() == true) { root.state = "mprisToast"; } else { @@ -134,6 +154,7 @@ Container { } } else { root.state = ""; + FocusManager.exitRaise(); } } onLatestNotificationChanged: { @@ -148,6 +169,32 @@ Container { root.state == "hovered" ? root.state = "expanded" : undefined; } + Connections { + function onactivated() { + console.log("some", root.state); + } + + target: root.stack + } + + Connections { + function onLogoutTriggered() { + if (Hyprland.focusedMonitor == root.exclusiveMonitor) { + root.state = "logout"; + } + } + + target: IpcManager + } + + Connections { + function onRaiseCancelled() { + root.state = ""; + } + + target: FocusManager + } + Connections { function onTrackChanged() { if (Hyprland.focusedMonitor == root.monitor) { @@ -260,4 +307,10 @@ Container { } } } + + Component { + id: logout + + Logout {} + } } diff --git a/Bar/Center/Logout.qml b/Bar/Center/Logout.qml new file mode 100644 index 0000000..4799970 --- /dev/null +++ b/Bar/Center/Logout.qml @@ -0,0 +1,18 @@ +import QtQuick +import "../../Components/" +import "../../Services/" + +Item { + CenteredText { + text: "some" + } + + Shortcut { + sequence: "Escape" + + onActivated: { + console.log("shortcut triggered"); + FocusManager.exitRaise(); + } + } +} diff --git a/Services/FocusManager.qml b/Services/FocusManager.qml new file mode 100644 index 0000000..9951195 --- /dev/null +++ b/Services/FocusManager.qml @@ -0,0 +1,19 @@ +pragma Singleton +import QtQuick +import Quickshell + +Singleton { + id: root + + signal raiseCancelled + signal raiseRequested + + function exitRaise() { + console.log("exiting raise"); + root.raiseCancelled(); + } + + function requestRaise() { + root.raiseRequested(); + } +} diff --git a/Services/IpcManager.qml b/Services/IpcManager.qml new file mode 100644 index 0000000..3aa7bfa --- /dev/null +++ b/Services/IpcManager.qml @@ -0,0 +1,18 @@ +pragma Singleton +import QtQuick +import Quickshell +import Quickshell.Io + +Singleton { + id: root + + signal logoutTriggered() + + IpcHandler { + function logout() { + root.logoutTriggered(); + } + + target: "main" + } +} diff --git a/Services/qmldir b/Services/qmldir index b6984ea..fd14833 100644 --- a/Services/qmldir +++ b/Services/qmldir @@ -4,3 +4,5 @@ singleton NotificationManager 1.0 NotificationManager.qml singleton WorkspaceManager 1.0 WorkspaceManager.qml singleton BluetoothManager 1.0 BluetoothManager.qml singleton MprisManager 1.0 MprisManager.qml +singleton IpcManager 1.0 IpcManager.qml +singleton FocusManager 1.0 FocusManager.qml