shell: add spotlight builtin (theme 04), dots/placeholder-clock schema, and anim::spring_to
- bread-theme:🐚 WorkspacesModule.dot_widths and ClockModule.placeholder_clock,
resolved/validated in manifest.rs and modeled in types.rs, so a theme can
actually configure dot-pill widths and an entry-as-clock placeholder
instead of those staying schema-only.
- New compiled-in builtin "spotlight" (assets/shell/spotlight/), registered
in builtin.rs so list() returns three themes: centred capsule window spec
(anchors=[top] only, width=480, exclusive=none, keyboard=on_demand),
workspaces.style=dots, clock.style=none+placeholder_clock, launcher.mode=
embedded, drawer=[launcher_results]. Colours are palette token names
(pink), never hex.
- bread-theme::anim::spring_to: a reusable TickCallback size-interpolation
helper (GTK4 has no CSS width/height transition on a widget or layer-shell
surface), generalized from WorkspaceTrail's existing ease/tick pattern, for
breadbar's capsule-drawer expand/collapse.
- bread_launcher::LAUNCHER_APP: the launcher's one shared on-disk identity
(cache/config/history), so breadbar's embedded capsule and breadbox's
overlay window read and write the SAME cache and launch history rather
than forking into two rankings of a user's apps.
Tests: +6 spotlight builtin tests (loads/in list/capsule window shape/
embedded mode/dots widths/flat-pink-not-hex), bread-theme --lib 63->69,
bread-launcher --lib unchanged at 18.
This commit is contained in:
parent
6ffd689a4d
commit
8c5e42230a
9 changed files with 505 additions and 2 deletions
|
|
@ -9,7 +9,10 @@
|
|||
//!
|
||||
//! Every path/cache/history entry point here takes an explicit `app: &str`
|
||||
//! rather than hardcoding an app name, so more than one host can use this
|
||||
//! crate without colliding — see [`cache_dir`]/[`config_dir`].
|
||||
//! crate without colliding — see [`cache_dir`]/[`config_dir`]. [`LAUNCHER_APP`]
|
||||
//! is the one identity every *launcher* host (as opposed to some unrelated
|
||||
//! future consumer of `cache_dir`/`config_dir`) should actually pass — see
|
||||
//! its own doc comment for why.
|
||||
|
||||
mod desktop;
|
||||
mod history;
|
||||
|
|
@ -27,3 +30,23 @@ pub use icon::IconCache;
|
|||
pub use launch::{do_launch, emit_launched};
|
||||
pub use matching::{fuzzy_matches, fuzzy_score, load_sorted_entries, matches_term, priority_rank};
|
||||
pub use paths::{app_dirs, cache_dir, config_dir, home_dir};
|
||||
|
||||
/// The launcher's one shared identity, passed to [`cache_dir`]/[`config_dir`]/
|
||||
/// [`IconCache::new`]/[`LaunchHistory::load`] by every host that embeds this
|
||||
/// crate — breadbox's overlay window AND breadbar's embedded capsule
|
||||
/// (theme 04/spotlight) alike.
|
||||
///
|
||||
/// This is deliberate, not a leftover of breadbox being first: theme 04's
|
||||
/// whole premise is that breadbar's capsule IS the launcher wearing a
|
||||
/// different shell, not a second launcher with its own history
|
||||
/// (`THEME_SYSTEM_PLAN.md` §7). If each host passed its own binary name here,
|
||||
/// the same physical launcher would rank a user's apps differently
|
||||
/// depending on which theme happened to be active — the icon cache and
|
||||
/// "most launched" ordering would silently fork in two. Sharing this
|
||||
/// constant is what keeps them one launcher.
|
||||
///
|
||||
/// Do not pass a bare `"breadbox"` string literal at a call site instead of
|
||||
/// this constant — that reads exactly like an unfixed bug (breadbar naming
|
||||
/// another app's identity) and invites a later "fix" that would quietly
|
||||
/// break the shared history this constant exists to guarantee.
|
||||
pub const LAUNCHER_APP: &str = "breadbox";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue