summaryrefslogtreecommitdiffhomepage
path: root/packages/ext-keybindings/src
AgeCommit message (Collapse)Author
2026-06-14ext-layer-shell: fix configure feedback loop; default Super toggles fuzzelAdam Malczewski
The intermittent "Super needs several presses to open fuzzel" bug was a layer-shell configure storm, not a keybinding issue. The per-surface commit handler called arrange() on EVERY wl_surface commit, and arrange() unconditionally calls wlr_scene_layer_surface_v1_configure, which in wlroots 0.20 emits a fresh configure each call. A client acking + applying its configure re-entered the commit handler, producing an unbounded configure -> ack_configure -> commit -> configure loop that overflowed the client's 4 KiB connection buffer ("Data too big for buffer") and got it killed mid-handshake. fuzzel therefore only displayed when the burst happened to flush in time. Fix: only re-arrange on the initial commit or a commit that changes a layout-relevant field (current.committed != 0); a plain buffer/frame commit no longer triggers a configure. Also: - ext-keybindings: tap-Super now defaults to a launcher TOGGLE ("pkill -x fuzzel || fuzzel") in both default_bindings() and the sample unbox.toml — pressing Super while fuzzel is open closes it. - ext-keybindings: a genuine Super press always re-arms a clean tap, so a dropped Super release can no longer eat the next tap (robustness). - tests: update default-command assertions; add a bounded-configure invariant guard to the layer-shell client test.
2026-06-14ext-keybindings + ext-stage-dock: config-driven dock-toggle-visible (Super+d)Adam Malczewski
- **ext-stage-dock**: exports a `Service` interface with `toggle_visible()`. The extension inherits from it and registers via `provide_service` in `activate()`. The method slides the dock in/out (using the existing RCSS transition) regardless of slot count; showing an empty dock is valid. - **ext-keybindings**: new `Action::dock_toggle_visible` action, mapped from `"dock-toggle-visible"` in `unbox.toml [[keybind]]`, dispatched to the stage-dock Service. Default binding: `Super+d`. - **Manifest**: ext-keybindings now `depends_on {"xdg-shell", "stage-dock"}`. - **Build**: subdir order swapped so ext-stage-dock builds before ext-keybindings; `ext_stage_dock_dep` is a link-time dep of the ext-keybindings library and transitively exposed via `ext_keybindings_dep`. - **Tests**: glue tests install ext-stage-dock alongside ext-xdg-shell; policy test expects 6 default bindings. All 10/10 green on build + build-asan. Configure in unbox.toml: [[keybind]] keys = "Super+d" action = "dock-toggle-visible"
2026-06-13ext-keybindings: hot-reload unbox.toml (live config, no restart)Adam Malczewski
Editing the config now re-applies keybindings live, via the kernel's watch_file service. In activate() we watch the effective config path (the create() arg, else ~/.config/unbox/unbox.toml) — even if it doesn't exist yet, so creating it later is picked up — holding the FileWatch as a member. On change, reload_config() re-reads + re-parses (the existing pure toml core) and SWAPs the live binding table the key_filter link matches against (matcher_), so new bindings apply with no re-subscribe. A malformed / unreadable / mid-edit-broken file KEEPS the current bindings and logs one warning — the session never loses working keys, never throws. Real-seat verified: editing the command (fuzzel->foot) logged "config reloaded (5 binding(s))" live; a deliberately broken file logged "reload failed; keeping current bindings" with the session staying ALIVE; restoring it recovered. Added a pure reload-semantics doctest (A->B swap; malformed keeps prior). ext-keybindings 2/2 green on build + build-asan. Edits confined to packages/ext-keybindings/.
2026-06-13Slice 5b: config-driven keybindings — Super→fuzzel, Alt+Tab; kernel ↵Adam Malczewski
exports WAYLAND_DISPLAY ext-keybindings (new core ext) reads unbox.toml: tap-Super spawns fuzzel, Alt+Tab/Alt+Shift+Tab rotate focus across all toplevels, plus Alt+F1 and Ctrl+Alt+Backspace (quit). ext-xdg-shell's hardcoded keybinds removed (migrated to the toml). Kernel setenv()s WAYLAND_DISPLAY at startup so extension-spawned clients connect to unbox, not the launching session — fixes fuzzel "no monitors" on the real seat. build + build-asan green: third-party Mesa/EGL/DRM + vendored-RmlUi sanitizer noise suppressed (suppressions/), our code stays leak-checked; a real libwayland leak in the layer-shell client test fixed. Harness: spawn-env + sanitizer-noise rules, diagnose-real-seat skill, GLOSSARY keybinding/action/tap-binding. Real-seat verified on the CF-AX3.