pre-capture lock screen screenshots via hidden window and ScreenshotService

This commit is contained in:
Damocles 2026-04-18 12:32:55 +02:00
parent 62cd0f9a76
commit 73e480d14b
7 changed files with 129 additions and 10 deletions

View file

@ -20,12 +20,21 @@ Scope {
lock: _lock
}
// Capture screenshots before locking, with timeout for security
Timer {
id: _lockTimeout
interval: 150
onTriggered: _lock.locked = true
}
Connections {
target: S.LockService
function onLockRequested() {
if (S.LockService.enabled)
_lock.locked = true;
if (!S.LockService.enabled)
return;
S.ScreenshotService.capture(Quickshell.screens.length);
_lockTimeout.start();
}
function onUnlockRequested() {
@ -39,6 +48,17 @@ Scope {
}
}
Connections {
target: S.ScreenshotService
function onCaptureComplete() {
if (_lockTimeout.running) {
_lockTimeout.stop();
_lock.locked = true;
}
}
}
Connections {
target: _lock

View file

@ -15,15 +15,16 @@ WlSessionLockSurface {
property real _unlockFade: 1
// Clear desktop screenshot - visible immediately
ScreencopyView {
// Clear desktop screenshot from ScreenshotService - visible immediately
Image {
anchors.fill: parent
captureSource: root.screen
visible: S.Modules.lock.screenshot ?? true
source: S.ScreenshotService.get(root.screen?.name ?? "")
visible: (S.Modules.lock.screenshot ?? true) && source !== ""
opacity: _unlockFade
fillMode: Image.PreserveAspectCrop
}
// Overlay group: blur + dim + hexes, revealed per-pixel by wave position
// Overlay group: blur + hexes, revealed per-pixel by wave position
Item {
id: _overlay
anchors.fill: parent
@ -47,10 +48,11 @@ WlSessionLockSurface {
}
// Blurred screenshot
ScreencopyView {
Image {
anchors.fill: parent
captureSource: root.screen
visible: S.Modules.lock.screenshot ?? true
source: S.ScreenshotService.get(root.screen?.name ?? "")
visible: (S.Modules.lock.screenshot ?? true) && source !== ""
fillMode: Image.PreserveAspectCrop
layer.enabled: true
layer.effect: MultiEffect {