summaryrefslogtreecommitdiffhomepage
path: root/unbox.toml
AgeCommit message (Collapse)Author
2026-06-15ext-wallpaper: config-driven desktop wallpaper (new standard-tier unit)Adam Malczewski
A new standard-tier extension that composites a desktop background in the 'background' scene layer, below every window. Reads [wallpaper] from unbox.toml (path / fit = cover|contain|stretch|center / color), hot-reloaded via watch_file (drop + recreate an inline RCSS document with the values baked in -- avoids fragile decorator data-binding). The surface is input_transparent so it never steals clicks. Pure doctested config core; factory-only contract. When no path is configured it falls back to a bundled default image (assets/ext-wallpaper/default.jpg, auto-installed to the data dir), resolved to an absolute path via $UNBOX_ASSET_DIR or the UNBOX_ASSET_DIR_DEFAULT compile define. Degrades gracefully (color-only) if there is no GL path or the file is missing. Sized to the primary output (multi-output is a documented gap). Wiring (composition root): root meson subdir, host-bin installs it unconditionally with the config path, unbox.toml gains a documented [wallpaper] sample. (swaybg via ext-layer-shell's background band keeps working too.)
2026-06-15ext-window-field(rml-compositing): floating windows + resize-to-tileAdam Malczewski
Floating windows: move (titlebar), resize (two bottom corner grips), and a per- window close button. Per-window geometry (x,y,w,h,z) is bound STATE applied via data-style left/top/width/height + z-index; a pure, doctested geometry core (move / resize_bl / resize_br with anchored-opposite-edge + min-size, field clamp) computes drag results. Positioning uses left/top (NOT a transform: RmlUi's data-style does not apply a transform here the way it does left/top/width/height, and a transform would also offset the drag hit-test). z-order raise on focus; cascade placement from the client's own size. Resize-to-tile: a frame-pumped feedback loop configures each client to its on- screen box (Toplevel::set_size) so the live texture maps 1:1. Policy is config- driven -- [window-field] resize_mode = off|settle|continuous|debounced in unbox.toml, hot-reloaded; pure doctested config core. Windows are shown via <img data-attr-src> (NOT an RCSS image() decorator) so the kernel's surface-element input-back, click-to-focus, popup placement and box readback -- all keyed off the <img> src -- work. host-bin passes the config path + --rml-compositing (the latter selecting server- side decorations) through to the extensions. tasks.md records the wave.
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-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.