Daylight bar chrome + embedded launcher, v0.7.5 pins #5
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/theme-spotlight"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Rebased onto
origin/main(which is now297207a, the toast focus/click-through hotfix). 41 commits: 38 rebased theme-spotlight,fix/osd-pactl-watcher-cleanupcherry-picked in, a clippy-1.97 cleanup, and the v0.7.5 pin bump.The Daylight bar work
Bottom-anchored segmented bar chrome, capsule-opens-only-on-real-input, workspace trail squash/stretch, notification toast card + dismiss + click-through-except-buttons, OSD overshoot, odometer digit rolls, entrance animation,
[bar.slots]-driven module assembly, embedded launcher capsule (consumes the samebread-launcherResultsListbreadbox wraps). Sub-branchesfix/{capsule-interaction,capsule-interaction-v2,chrome-polish,theme-visual}andfeature/{shell-theme-slots,shell-theme-tokens,theme-glass-workbench}are folded in — prune after merge.Reconciliation with origin/main
The one behind-commit,
297207a"stop toast popups from stealing focus or blocking clicks" (KeyboardMode::None+ empty input region), conflicted at the early commit594f843. Resolved in favour of the branch: its later commits (c77c8f6,3ee0d38) build a more capable version — click-through except on buttons, a dismiss button, andOnDemandkeyboard mode for inline reply — which supersedes the blanket click-through.Pins (
e7c1f77)bread-theme/bread-utils/bread-screenshots/bread-launcher→ v0.7.5 (carries the shell-theme manifest +bread-launcherAPI this branch needs).bread-shared→ v0.8.0 to match what bread-utils v0.7.5 pins, so only one copy of bread-shared is linked.Clippy (
a806ac0)breadbar CI runs
clippy --all-targets --locked -- -D warnings, andmainis already red under clippy 0.1.97 (toolchain drift). Two#[allow]s with rationale: the four held-for-lifetime sys-grid widget fields, andfrom_geom's&self(fromis a noun).Checks
cargo buildclean ·cargo test --locked38 pass ·cargo clippy --all-targets --locked -- -D warningsclean.Manual smoke (needs doing on hermes)
--screenshotcapture of each viewbread_theme:🐚:watch() now returns an opaque ThemeWatch (it re-arms itself onto a new theme's directory when the active theme id changes, rather than staying pinned to whichever directory was active at call time) instead of a bare gio::FileMonitor. Update the stored handle's type to match.wifi_img.set_hexpand(false) meant the icon packed at the start of the 32px icon-only chip with no leftover space for halign:Center to work with, sitting visibly left of center on glass-workbench/liquid-motion. hexpand(true) fixes the centering, but that alone silently bubbles the expand flag up through connectivity_pair into the shared right-hand stats box and the centerbox's end slot, blowing the wifi/vol cluster's layout apart (confirmed via a --screenshot bar capture: the whole cluster jumped left against the clock with a huge gap before battery/hamburger). connectivity_pair.set_hexpand(false) pins the box's own expand explicitly so the fix stays contained to this chip. Also drops the dead .wifi-pair { padding: 6px } rule: it can never apply since .stat-pair.icon-only's two-class selector always beats its one-class specificity regardless of source order, so the intended padding never actually rendered.Three prior fixes failed because each neutered one path that called open_fn while others remained. This inverts the approach: opening is now gated on the input actually coming from a person. - connect_enter no longer opens. Focus alone is not intent, and GTK grants focus during window construction, which is what put the capsule in its open state at startup. - connect_changed skips when a programmatic_text_change flag is set, so close_fn's set_text("") and initial buffer setup cannot reopen it. - A click gesture and the OpenLauncher hotkey are the only paths that open. - BREADBAR_CAPSULE_DEBUG=1 traces every open/close and why, so a future accidental open is diagnosable instead of mysterious. Compiles and tests pass, but NOT yet verified against a live compositor: the agent that wrote this was interrupted before running it. The startup-collapsed check still needs a real session.Found via isolated bread-capture screenshots of daylight (BREAD_SHELL_THEME= daylight), not guesswork: - theme::fg_color() computed icon tint from load_palette().background, which is bread-theme's FIXED (never-pywal, never-theme-aware) dark constant — every SVG-rasterised bar/OSD icon was baked near-white regardless of the active theme: invisible-but-correct on every prior dark theme, nearly invisible on daylight's own near-white pills. Now theme-aware via tokens.light(). - Real GtkButtons (power row, hamburger, wifi/bluetooth popover rows, the add-network dialog) don't inherit the window's ink colour: the shared ecosystem stylesheet's unscoped button{color:@on-surface} rule matches them directly first, and @on-surface is ink computed against the same kind of fixed dark constant. One ancestor-scoped override per breadbar-owned window fixes all of them without touching the shared rule. - The notification/history/OSD/wifi-add-dialog cards and the popover window hardcoded their own 0.70/0.72 alpha literals independent of bg_alpha — fine as translucent glass on a dark fill, but reads as pale glass instead of opaque paper on daylight. Now uses bg_alpha for light themes only, unchanged literal for the other three. - Same story for the OSD/widget-node progress trough's accent-tinted empty track, barely visible against a light pill. - screenshot.rs: the "bar"/"capsule-collapsed" capture views hardcoded a top-left capture rectangle — correct for every top-anchored theme, but a bottom-anchored bar's real footprint is the last bar_capture_height() pixels of the canvas. Confirmed empirically: a daylight bar capture returned a plain background gradient with no dock in frame at all before this fix.Each breadbar restart orphaned a blocking `pactl subscribe` that kept its PulseAudio connection open; once pipewire-pulse's client cap filled, new clients (settings apps among them) were refused ("no devices in settings"). Register an atexit hook (osd.rs) plus SIGINT/SIGTERM handlers (main.rs) that kill and reap the watcher children before breadbar exits. Generated with Codebuff 🤖 Co-Authored-By: Codebuff <noreply@codebuff.com>