diff options
Diffstat (limited to 'raveos-hyprland-theme/theme-data/dms/Modules/Lock/LockSurface.qml')
| -rw-r--r-- | raveos-hyprland-theme/theme-data/dms/Modules/Lock/LockSurface.qml | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/dms/Modules/Lock/LockSurface.qml b/raveos-hyprland-theme/theme-data/dms/Modules/Lock/LockSurface.qml new file mode 100644 index 0000000..9d1beae --- /dev/null +++ b/raveos-hyprland-theme/theme-data/dms/Modules/Lock/LockSurface.qml @@ -0,0 +1,73 @@ +pragma ComponentBehavior: Bound + +import QtQuick +import Quickshell.Wayland +import qs.Common + +FocusScope { + id: root + + required property WlSessionLock lock + required property string sharedPasswordBuffer + required property string screenName + required property bool isLocked + + signal passwordChanged(string newPassword) + signal unlockRequested + + Keys.onPressed: event => { + if (videoScreensaver.active && videoScreensaver.inputEnabled) { + videoScreensaver.dismiss(); + event.accepted = true; + } + } + + Rectangle { + anchors.fill: parent + color: "transparent" + } + + LockScreenContent { + id: lockContent + + anchors.fill: parent + demoMode: false + passwordBuffer: root.sharedPasswordBuffer + screenName: root.screenName + enabled: !videoScreensaver.active + focus: !videoScreensaver.active + opacity: videoScreensaver.active ? 0 : 1 + onUnlockRequested: root.unlockRequested() + onPasswordBufferChanged: { + if (root.sharedPasswordBuffer !== passwordBuffer) { + root.passwordChanged(passwordBuffer); + } + } + + Behavior on opacity { + NumberAnimation { + duration: 200 + } + } + } + + VideoScreensaver { + id: videoScreensaver + anchors.fill: parent + screenName: root.screenName + } + + Component.onCompleted: forceActiveFocus() + + onIsLockedChanged: { + if (isLocked) { + forceActiveFocus(); + lockContent.resetLockState(); + if (SettingsData.lockScreenVideoEnabled) { + videoScreensaver.start(); + } + return; + } + lockContent.unlocking = false; + } +} |