38 lines
1.9 KiB
Markdown
38 lines
1.9 KiB
Markdown
# 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`:
|
|
|
|
- `PASS` for 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.
|