With two or more screens connected and none of them in the lock screen
display list (a laptop docked at a different desk), every surface was
inactive and no password field rendered, so the only way out was a
TTY. getFilteredScreens only falls back to all screens with
showOnLastDisplay and exactly one screen, which the lock screen picker
never sets. Treat an empty result as all screens, the same as the
default "all" preference.
* bluetooth: identify codecs from the profile description
PipeWire describes profiles in the daemon's locale and only names the codec in
that description for the bare profile (LHDC settles on "a2dp-sink"), so the old
English "codec %s" match dropped LHDC profiles on non-English systems. Parsing
the translated shape instead only moves the coupling to word order and
punctuation.
Emit the profile index and raw description from the lua script and let the UI
name the codec by matching the untranslated literal from one codec table.
Switch by index, falling back to the profile name or codec literal, so no
translated text is parsed. Also teach the BlueZ fallback the Savitech ids
(LHDC v5 and v3).
Test: quickshell/tests/bluez-codec.test.mjs
* bluetooth: show unknown codec without masking bluez
* bluetooth: ignore stale codec query results
Focused dot expands to 3× width (horizontal dock) or 3× height
(vertical dock) using Theme.shortDuration + Easing.OutCubic.
Applies to both circle and line indicator styles.
* feat(dock): add proximity icon magnification with customizable curves
* fix(dock): restrict proximity magnification to dock and add translator context
A compositor resolves a bind's keysym on the first level of the active
layout. Layouts that put punctuation higher up therefore cannot reach it
at all: de:neo has bracketleft on layer 4 and plain de on AltGr, so
Mod+bracketleft is a bind that can never fire. The editor recorded and
stored it anyway and gave no sign that anything was wrong (#3585).
`dms keybinds keymap` now reports what the seat's xkb keymap puts on the
first level of every physical key, and the editor says so instead of
letting a dead bind through.
The keymap a compositor hands out writes its keysyms as hex, so only the
range the keymap package can name back is usable for the comparison.
That is the ASCII range, which is where the problem lives, and the
command reports the vocabulary alongside the keys so the caller can tell
"the layout cannot reach this" from "we could not name it" and stay
quiet in the second case.
* lock: lock before sleep when the command skips logind
Custom hibernate never emits PrepareForSleep, so the session stayed unlocked. Wait for the compositor lock on every sleep path, and release the delay inhibitor if that lock finished first.
* lock: release the sleep inhibitor only after lockerReady
* lock: read the sleep inhibitor under its mutex in the race test
Add word processor, spreadsheet, presentation and archive manager
selectors to default apps, fix calendar lookup to query text/calendar
first so Dank Calendar is detected, and expand image mime coverage
with tiff/heic/heif/jxl.
scrollbar: interface style toggle and no scrollbars in the dash
dash: never allow scrollbars
cc: widget sheet cards, header close button and content-sized dialogs