diff --git a/Modules/LockScreen/LockScreen.qml b/Modules/LockScreen/LockScreen.qml index 4d7bb15..ee78179 100644 --- a/Modules/LockScreen/LockScreen.qml +++ b/Modules/LockScreen/LockScreen.qml @@ -12,8 +12,35 @@ import qs.Commons import qs.Services import qs.Widgets -WlSessionLock { - id: lock +NLoader { + id: lockScreen + // External API + property bool locked: false + // Internal loader control; keep content alive briefly after unlocking + property bool _isLoadedInternal: false + // Only load when explicitly requested (locked) or while waiting to safely unload + isLoaded: _isLoadedInternal + onLockedChanged: { + if (locked) { + _isLoadedInternal = true + } + } + // Allow a small grace period after unlocking so the compositor releases the lock surfaces + Timer { + id: unloadAfterUnlockTimer + interval: 250 + repeat: false + onTriggered: lockScreen._isLoadedInternal = false + } + function scheduleUnloadAfterUnlock() { + unloadAfterUnlockTimer.start() + } + content: Component { + WlSessionLock { + id: lock + // Keep inner lock state in sync with wrapper + locked: lockScreen.locked + onLockedChanged: lockScreen.locked = locked // Lockscreen is a different beast, needs a capital 'S' in 'Screen' to get the current screen readonly property real scaling: ScalingService.scale(Screen) @@ -22,7 +49,7 @@ WlSessionLock { property bool authenticating: false property string password: "" property bool pamAvailable: typeof PamContext !== "undefined" - locked: false + function unlockAttempt() { Logger.log("LockScreen", "Unlock attempt started") @@ -53,7 +80,10 @@ WlSessionLock { lock.authenticating = false if (result === PamResult.Success) { Logger.log("LockScreen", "Authentication successful, unlocking") + // First release the Wayland session lock, then unload after a short delay lock.locked = false + lockScreen.locked = false + lockScreen.scheduleUnloadAfterUnlock() lock.password = "" lock.errorMessage = "" } else { @@ -865,5 +895,8 @@ WlSessionLock { dateText.text = Qt.formatDateTime(new Date(), "dddd, MMMM d") } } + } } } + +} diff --git a/Modules/SidePanel/PowerMenu.qml b/Modules/SidePanel/PowerMenu.qml index 918ca9a..992581c 100644 --- a/Modules/SidePanel/PowerMenu.qml +++ b/Modules/SidePanel/PowerMenu.qml @@ -83,7 +83,6 @@ NPanel { Text { text: "Lock Screen" color: lockButtonArea.containsMouse ? Color.mOnTertiary : Color.mOnSurface - font.pointSize: Style.fontSizeReduced * scaling verticalAlignment: Text.AlignVCenter anchors.verticalCenter: parent.verticalCenter anchors.verticalCenterOffset: 1 * scaling @@ -138,7 +137,6 @@ NPanel { Text { text: "Suspend" color: suspendButtonArea.containsMouse ? Color.mOnTertiary : Color.mOnSurface - font.pointSize: Style.fontSizeReduced * scaling verticalAlignment: Text.AlignVCenter anchors.verticalCenter: parent.verticalCenter anchors.verticalCenterOffset: 1 * scaling @@ -191,7 +189,6 @@ NPanel { Text { text: "Reboot" color: rebootButtonArea.containsMouse ? Color.mOnTertiary : Color.mOnSurface - font.pointSize: Style.fontSizeReduced * scaling verticalAlignment: Text.AlignVCenter anchors.verticalCenter: parent.verticalCenter anchors.verticalCenterOffset: 1 * scaling @@ -244,7 +241,6 @@ NPanel { Text { text: "Logout" color: logoutButtonArea.containsMouse ? Color.mOnTertiary : Color.mOnSurface - font.pointSize: Style.fontSizeReduced * scaling verticalAlignment: Text.AlignVCenter anchors.verticalCenter: parent.verticalCenter anchors.verticalCenterOffset: 1 * scaling @@ -297,7 +293,6 @@ NPanel { Text { text: "Shutdown" color: shutdownButtonArea.containsMouse ? Color.mOnTertiary : Color.mOnSurface - font.pointSize: Style.fontSizeReduced * scaling verticalAlignment: Text.AlignVCenter anchors.verticalCenter: parent.verticalCenter anchors.verticalCenterOffset: 1 * scaling