Commit Graph
252 Commits
Author SHA1 Message Date
Bendik Aagaard LynghaugandClaude Fable 5.1 450a20bf63 widget: fix Geometry::expand using other.height twice
The bounding-box height was computed from other.height + other.height
instead of other.height + other.y, so the combined damage rectangle sent
to the compositor was wrong whenever a widget's drawn area changed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 09:15:55 +00:00
Bendik Aagaard LynghaugandClaude Fable 5.1 6af81b587c buffer: switch to memmap2, destroy shm pools, never underflow refcounts
memmap 0.7 is unmaintained (RUSTSEC-2020-0077); memmap2 is a drop-in
replacement. Drop the unused shlex dependency.

Each resize created a new wl_shm_pool that was never destroyed; keep the
pool on the buffer and destroy it with it. A wl_buffer.release for a
buffer we didn't consider acquired used to underflow refcnt and wedge
rendering. Fix the lifetime-elision warnings while here.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 09:15:54 +00:00
Bendik Aagaard LynghaugandClaude Fable 5.1 c033335912 widgets: stop aborting on machines without backlight/battery/pulseaudio
The release profile builds with panic = "abort", so a panic in any helper
thread took the whole dashboard down:

- backlight: WalkDir yields /sys/class/backlight itself, so detect() was
  always true and new() picked the class dir as the device, then panicked
  reading brightness. Use min_depth(1) and tolerate read errors.
- battery: detect() only checked that UPower's DisplayDevice answered,
  which it does on every machine; use IsPresent. The monitor thread now
  returns an error instead of unwrapping, and publishes its first reading.
- pulseaudio: a failed connection panicked ("damn"); clicks before the
  first sink query unwrapped a None channel map. Both are now handled, and
  the connect loop no longer busy-spins.
- bar widget: don't underflow when narrower than the label column.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 09:15:54 +00:00
Bendik Aagaard LynghaugandClaude Fable 5.1 01af00b5ea desktop: hash entries the same way they compare, only parse *.desktop
Desktop derived Hash over every field but PartialEq compared only the
name, violating the Hash/Eq contract the launcher's HashMap relies on
(clippy denies this by default, so `cargo clippy` failed to build).

Also skip directories and files without a .desktop extension (mimeinfo
cache, .directory files, ...) and stop unwrapping non-UTF-8 paths.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 09:15:53 +00:00
Bendik Aagaard LynghaugandClaude Fable 5.1 2bed8b7fac launcher: make the prompt cursor consistently grapheme-based
set(), end() and move_cursor() used the byte length of the input as the
cursor bound while append/backspace/delete/clear_* index a grapheme table.
Any non-ASCII input (æøå, emoji) followed by End or typing past the end
indexed out of bounds and, with panic = "abort" in release, killed wldash.

While here:
- clamp Up so the selection can't run past the last row (every widget now
  reports its row count), and make mouse selection underflow-safe
- strip all desktop-entry field codes from Exec (%i %c %k ... and %% -> %),
  not just %f/%F/%u/%U
- report a failed spawn instead of panicking
- size the highlight colour table by chars, matching the drawing code

Adds unit tests for the prompt and the field-code stripping.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-03 09:15:53 +00:00
Bendik Aagaard LynghaugandClaude Opus 4.8 1367bd8591 config: prefer machine-local /etc/wldash/config.yml when present
On a shared (NFS-roamed) home, ~/.config/wldash/config.yml is identical on
every machine. Prefer a host-specific /etc/wldash/config.yml when it exists so
each machine can keep its own layout without conflicting; --config still
overrides both. Enables the 'factor host-specific config to /etc' pattern for
shared-home fleets.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-16 14:16:22 +02:00
Alejandro Visiedo 1156b3503a fix: ensure dirs exist
Ensure ~/.config/wldash and ~/.cache/wldash exist.
Provide hints when no configuration exists.

Signed-off-by: Alejandro Visiedo <alejandro.visiedo@gmail.com>
2025-05-08 12:59:41 +02:00
Kenny Levinsen d80a64444f cargo: Update lock 2025-04-08 11:51:15 +02:00
Kenny Levinsen 456d61de01 cargo: Set binary name back to wldash
During v2 development, the name was temporarily set to wldash2. Set it
back to wldash so that things work.
2025-03-20 16:57:58 +01:00
Kenny Levinsen ab2655556f readme: Make note of rewrite 2025-02-27 17:42:09 +01:00
Kenny Levinsen f0331e65b1 cargo: Bump to 2024 edition 2025-02-27 17:41:08 +01:00
Kenny Levinsen 25c7322c4b cargo: Bump version to 0.2 2025-02-27 17:40:56 +01:00
Kenny Levinsen 7af5c34856 readme: Update for v2 2025-02-27 17:39:49 +01:00
Kenny Levinsen e8def40fae cargo: Make fontconfig a default feature 2025-02-27 17:39:40 +01:00
Kenny Levinsen 34591f2677 ci: Add libxkbcommon 2025-02-27 16:53:24 +01:00
Kenny Levinsen 91c26b9d54 Merge new implementation
This implementation is a rewrite of wldash, implemented from scratch.
This also means that it is an unrelated history, hence the history now
having two initial commits.
2025-02-27 16:41:33 +01:00
Kenny Levinsen a8cd777ca9 Clean up command-line arguments, usage text 2025-02-27 16:38:52 +01:00
Kenny Levinsen 83179d2c7e state: Increase xdg_toplevel default dimensions
The previous values are too small for the default toplevel layout.
2025-02-27 16:38:52 +01:00
Kenny Levinsen 7e112ddd1f keyboard: Update to xkbcommon 0.8 2025-02-27 16:38:52 +01:00
Kenny Levinsen 9fd054fc2c Fix damage issue when multiple buffers are in use
wldash was originally written to expect server-side shm buffer
optimizations, which make it so only a single buffer has to be in use.
This simplifies damage tracking and repaint needs.

Support for using multiple buffers was added to support e.g., jay, but
the damage handling was not in place for this to work. Fix that by
tracking damage per buffer.
2025-02-27 16:38:52 +01:00
Kenny Levinsen 40aec97f79 Cargo format 2025-02-27 14:48:41 +01:00
Kenny Levinsen 9031361dd1 Cargo update 2025-02-27 14:48:41 +01:00
Kenny Levinsen f337ce6e95 layer-shell: Change to overlay 2025-01-12 23:08:24 +01:00
Kenny Levinsen bc9ba0045c launcher: Support launch_cmd config 2025-01-12 22:51:45 +01:00
Kenny Levinsen 2b3048faca Rework the initial wayland init a bit 2025-01-12 22:50:00 +01:00
Kenny Levinsen f09abf1d53 backlight: Auto-detect type 2025-01-12 22:47:16 +01:00
Kenny Levinsen 5776886884 keyboard: Fix repeat deadline handling
The calloop timer is only responsible for ensuring wakeup at the right
time, but we can also be woken up before time so we need to check the
deadline.

At the same time, We may end up being significantly delayed past the
deadline if something else was slow. If we are too far behind, reset the
base of the repeat timer by just offsetting from the current time.
2024-01-30 00:56:12 +01:00
Kenny Levinsen 7ee58d8d68 server: Make optional 2023-11-10 15:22:37 +01:00
Kenny Levinsen c169843bcb Add basic server operation 2023-11-10 15:10:10 +01:00
Kenny Levinsen 1d1f7d3a8e draw: Fix a bug I forgot the details of 2023-11-10 14:01:14 +01:00
Kenny Levinsen a882e26e2b widgets/backlight: Set support 2023-11-10 14:00:48 +01:00
Kenny Levinsen 84c241a90e keyboard: Use xkb_common::keysyms 2023-11-10 14:00:06 +01:00
Kenny Levinsen 921938cc0d Resolve keyboard after first draw 2023-11-10 13:59:09 +01:00
Kenny Levinsen 8835708b31 Make background configurable 2023-11-10 13:58:56 +01:00
Kenny Levinsen c01c810c10 Configurable config file 2023-09-28 23:40:20 +02:00
Kenny Levinsen b451a2de31 Fix keyboard resolve on sway 2023-08-22 14:39:20 +02:00
Kenny Levinsen ebeb21f3c2 Fix fontmap resolution on sway 2023-08-22 14:38:36 +02:00
Kenny Levinsen 558d528f70 Fix xdg_toplevel background 2023-05-20 17:34:52 +02:00
Kenny Levinsen 6351cc242d launcher: Use XDG_ACTIVATION_TOKEN for shell cmds 2023-04-04 01:53:29 +02:00
Kenny Levinsen 66e66e19ad launcher: Cache desktop files 2023-04-04 01:53:02 +02:00
Kenny Levinsen 3a77696569 calendar: Missed preload of 'N' 2023-03-01 11:48:25 +01:00
Kenny Levinsen a975da5074 config: Apply margins to default 2023-02-14 23:52:54 +01:00
Kenny Levinsen 9d1f310f12 cargo fmt 2023-02-14 10:23:20 +01:00
Kenny Levinsen 54e4ba16dd Add InvertedVerticalLayout 2023-02-14 10:23:12 +01:00
Kenny Levinsen 764a1e3444 config: Remove default configuration 2023-02-14 00:30:46 +01:00
Kenny Levinsen 6fac465c3a calendar: Highlight current week 2023-02-14 00:28:40 +01:00
Kenny Levinsen 5097faab66 launcher: Save prompt on exit 2023-02-14 00:28:40 +01:00
Kenny Levinsen 8202963a6f Add vertical line 2023-02-14 00:28:40 +01:00
Kenny Levinsen b09f642fd6 Avoid panic on very long prompt lines 2023-02-14 00:28:40 +01:00
Kenny Levinsen 59e2f658db keyboard: Rename realize to resolve 2023-02-13 19:43:15 +01:00