Consume [panel]/[osd] + render [[bar.widget]] declarative widgets (v0.7.8) #12

Merged
Breadway merged 2 commits from feature/theme-ui-control into main 2026-09-04 23:44:40 +08:00
Owner

breadbar side of the shell-theme UI-control expansion (bread-ecosystem #11, tag v0.7.8).

  • [panel].sections reorders/drops the control-panel body; min_width via CSS
  • osd::spawn gates the volume/brightness watchers on [osd].enabled + takes dismiss_ms
  • new src/theme_widgets.rs maps bread_theme ThemeWidget -> bread_shared WidgetSpec and runs one sh -c poll per bar.widget; reconcile_widgets split so daemon + theme specs render through one path
  • needs_restart also fires on panel.sections / osd.enabled
  • repinned bread-ecosystem crates to v0.7.8

Verified live: a bar.widget chip renders + updates right of the clock; [panel].sections shows only the listed sections. 44 tests, clippy clean.

breadbar side of the shell-theme UI-control expansion (bread-ecosystem #11, tag v0.7.8). - [panel].sections reorders/drops the control-panel body; min_width via CSS - osd::spawn gates the volume/brightness watchers on [osd].enabled + takes dismiss_ms - new src/theme_widgets.rs maps bread_theme ThemeWidget -> bread_shared WidgetSpec and runs one sh -c poll per [[bar.widget]]; reconcile_widgets split so daemon + theme specs render through one path - needs_restart also fires on panel.sections / osd.enabled - repinned bread-ecosystem crates to v0.7.8 Verified live: a [[bar.widget]] chip renders + updates right of the clock; [panel].sections shows only the listed sections. 44 tests, clippy clean.
Axes 3 + 4 of the theme-UI-control expansion, breadbar side (needs
bread-ecosystem v0.7.8).

[panel] — the control-panel sections (volume/output/brightness/system/
power/tray) are each built in full then appended to panel_inner in
shell_theme().panel().sections order; a dropped name is never parented.
min_width flows in via CSS ({panel_min_width}), no code.

[osd] — osd::spawn takes the enabled kinds (gates the volume/brightness
watcher threads) and dismiss_ms (replaces the 2000ms constant).

[[bar.widget]] — a new theme_widgets module maps bread_theme:🐚:
ThemeWidget onto bread_shared::widget::WidgetSpec (same shape, mechanical
1:1) and runs one sh -c poll per widget, feeding trimmed stdout back as
{value} via AppInput::ThemeWidgetTick. reconcile_widgets is split:
reconcile_all_widgets merges the daemon's specs with the theme's, so both
sources render through the one build_node path. Pollers are primary-only
(matching widgets::client::spawn), abort on Drop, and are refreshed by
rebuild_from_theme on a live switch. Bundled 'cpu'/'ram' icon names added.

needs_restart now also fires on [panel].sections / [osd].enabled changes
(both assembled once in init); everything else stays live.

Verified live: a [[bar.widget]] label chip renders right of the clock and
updates on its interval; a full glass-workbench->loaf-with-widget path.
44 tests, clippy clean.
deps: repin bread-ecosystem crates to v0.7.8
All checks were successful
check / check (push) Successful in 27m34s
dc8de82ff1
Picks up the expanded shell-theme API (Typography, [panel]/[osd]/
[[bar.widget]]) the theme code in this branch consumes. Local .cargo
patch removed; Cargo.lock resolves the v0.7.8 git tag.
Breadway force-pushed feature/theme-ui-control from dc8de82ff1
All checks were successful
check / check (push) Successful in 27m34s
to c6a0e2daa0
All checks were successful
check / check (push) Successful in 12m37s
2026-09-04 23:29:09 +08:00
Compare
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Breadway/breadbar!12
No description provided.