1.9 KiB
QuickShell Dock — full-width bottom edge activation (2026-11-11)
Report and root cause
The centered QuickShell Dock used a layer-shell PanelWindow whose width
matched its visible row of icons. Its hidden activation sensor was limited to
min(360, dock.width). Outside that narrow central region, moving the
pointer against the bottom edge of an output could not enter the surface.
Change
dock/Dock.qml now anchors its input surface to the bottom, left and right
edges of each output. Only the 4px bottom sensor is interactive while
hidden; the panel retains exclusionMode: Ignore, exclusiveZone: 0,
WlrKeyboardFocus.None and the existing input Region mask.
The visible body is centered within this full-width surface and preserves
its former calculated width, icon geometry, hover scale, 180ms activation dwell,
210ms slide, 450ms hide grace and scroll behavior. Context popup coordinates
include the visual body's horizontal offset. This does not affect the top bar,
Sway bindings, system shortcuts, favorites persistence or Session Restore V2.
Validation
qmllint quickshell/.config/quickshell/labfy-sway/dock/Dock.qml passed;
node tests/dock/test_models.js and the six unit tests in tests/dock/
passed. Full tests/dock/headless.py ran with a private SwayFX and a
separate artifacts directory in ~/.cache/labfy-dock-edge-test:
PASSfor activation from the left and right screen corners;- sensor width equals output width while visual body remains centered;
- all existing favorites, auto-hide, context, scrolling, focus, drag, multi-window, framebuffer, animation and resolution scenarios pass;
- no visual geometry or SVG raster reload during the frame sweep.
No user desktop windows or active Sway compositor were touched by the headless tests. The production QuickShell service must reload the amended QML to receive the new input region; Sway itself does not need a reload.