diff --git a/shell/lock/LockClock.qml b/shell/lock/LockClock.qml index d423d9d..279bb2b 100644 --- a/shell/lock/LockClock.qml +++ b/shell/lock/LockClock.qml @@ -10,8 +10,12 @@ Item { readonly property real _fontSize: Math.max(48, screenHeight * 0.28) - // Appear as wave reaches the clock (left edge) - readonly property real _progress: Math.max(0, Math.min(1, wavePhase / 300)) * unlockFade + // Appear as wave reaches the clock (left edge), latch once fully revealed + property bool _revealed: false + on_RawProgressChanged: if (_rawProgress >= 1) + _revealed = true + readonly property real _rawProgress: Math.max(0, Math.min(1, wavePhase / 300)) + readonly property real _progress: (_revealed ? 1 : _rawProgress) * unlockFade opacity: _progress property real _slideX: (1 - _progress) * -80 diff --git a/shell/lock/LockSurface.qml b/shell/lock/LockSurface.qml index 71c1ed8..ed23ad2 100644 --- a/shell/lock/LockSurface.qml +++ b/shell/lock/LockSurface.qml @@ -28,13 +28,23 @@ WlSessionLockSurface { anchors.fill: parent opacity: _unlockFade - layer.enabled: true + property bool _revealed: false + + layer.enabled: !_revealed layer.effect: ShaderEffect { property real uPhase: _hexWave.wavePhase property real uWidth: root.width fragmentShader: Quickshell.shellPath("modules/reveal_mask.frag.qsb") } + Connections { + target: _hexWave + function onWavePhaseChanged() { + if (!parent._revealed && _hexWave.wavePhase >= root.width) + parent._revealed = true; + } + } + // Blurred screenshot ScreencopyView { anchors.fill: parent diff --git a/shell/lock/LockWidgets.qml b/shell/lock/LockWidgets.qml index 2fc6b09..516a145 100644 --- a/shell/lock/LockWidgets.qml +++ b/shell/lock/LockWidgets.qml @@ -12,8 +12,12 @@ Item { property real screenWidth: 0 property real unlockFade: 1 - // Fly in when wave exits the right edge - readonly property real _progress: (screenWidth > 0 ? Math.max(0, Math.min(1, (wavePhase - screenWidth) / 500)) : 0) * unlockFade + // Fly in when wave exits the right edge, latch once fully revealed + property bool _revealed: false + on_RawProgressChanged: if (_rawProgress >= 1) + _revealed = true + readonly property real _rawProgress: screenWidth > 0 ? Math.max(0, Math.min(1, (wavePhase - screenWidth) / 500)) : 0 + readonly property real _progress: (_revealed ? 1 : _rawProgress) * unlockFade opacity: _progress property real _slideX: (1 - _progress) * 80