srdusr
aboutsummaryrefslogtreecommitdiffstats
path: root/crates/wayland/src/input/pointer.rs
diff options
context:
space:
mode:
authorsrdusr <[email protected]>2025-11-20 17:10:00 +0200
committersrdusr <[email protected]>2025-11-20 17:10:00 +0200
commitae47a562bd423df856ec6c735d9e4c29a8e1e3c6 (patch)
tree6fa732650b8809d0c302017fbc72254c66bccc02 /crates/wayland/src/input/pointer.rs
parent04466601f4714dcbc1f3b0ef134febede6febb6a (diff)
downloadsrdwm-ae47a562bd423df856ec6c735d9e4c29a8e1e3c6.tar.gz
srdwm-ae47a562bd423df856ec6c735d9e4c29a8e1e3c6.zip
Redesign the native lock screen: clock/avatar header, on-screen keyboard, wrong-password shake
The native lock UI was a flat bordered rectangle with three left-aligned text lines and no shadow, clock, or identity marker - reported directly as looking unfinished. Splits the redesign across a new transparent-canvas header (time, date, circular avatar, username) above a redesigned, centered password box with a real drop shadow and a dimmed placeholder prompt, plus a genuine on-screen QWERTY-shaped keyboard with working Shift/Backspace/Return/Space and real click hit-testing shared with the render path via one `lock_stack_layout` function, and a damped-sine shake on a failed attempt. LockConfig gains show_clock/show_keyboard/avatar_bg, each independently srd.set-able and documented in a new theme.lock.* section in DEFAULTS.md. native_lock_render_elements now takes one NativeLockFrame struct instead of positional buffer arguments now that it composites five optional layers instead of two. Full workspace build/test/clippy clean (152 wayland tests, +6 new).
Diffstat (limited to 'crates/wayland/src/input/pointer.rs')
-rw-r--r--crates/wayland/src/input/pointer.rs11
1 files changed, 9 insertions, 2 deletions
diff --git a/crates/wayland/src/input/pointer.rs b/crates/wayland/src/input/pointer.rs
index 44b0bd7..2ecc15c 100644
--- a/crates/wayland/src/input/pointer.rs
+++ b/crates/wayland/src/input/pointer.rs
@@ -485,9 +485,16 @@ pub(crate) fn handle_pointer_button(state: &mut CompState, pos: Point<f64, Logic
const BTN_MIDDLE: u32 = 0x112;
let serial = SERIAL_COUNTER.next_serial();
- // Locked: forward the click to the lock surface (it may have a button or
- // a text field) but never let it focus, raise, drag, or close a window.
+ // Locked: srdwm's own native lock UI has no real `wl_surface` to
+ // dispatch a pointer event to - its on-screen keyboard is hit-tested
+ // directly instead, on a left-button press, before falling through to
+ // the generic forward-to-lock-surface path below (which still applies
+ // for an external `LockSurface`-based locker, or a native lock with
+ // the keyboard hidden/absent).
if state.lock.locked {
+ if pressed && button == BTN_LEFT && state.lock.native.is_some() && state.native_lock_click(pos) {
+ return;
+ }
if let Some(pointer) = state.seat.get_pointer() {
let button_state = if pressed { BackendButtonState::Pressed } else { BackendButtonState::Released };
pointer.button(state, &ButtonEvent { serial, time, button, state: button_state });