From 0c22e23ad37a003282114d48b8d6a3c3b78ad8fe Mon Sep 17 00:00:00 2001 From: funman300 Date: Sat, 18 Apr 2026 23:34:22 -0700 Subject: [PATCH] fix(gui): load Bootstrap Icons font via Task instead of builder The .font() builder method was silently failing to register the font for named lookup. Using iced::font::load() as a startup Task ensures the font is properly loaded before any text rendering occurs. Co-Authored-By: Claude Sonnet 4.6 --- src/gui.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gui.rs b/src/gui.rs index 787b038..f7fa58d 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -12,6 +12,7 @@ use std::time::Duration; #[derive(Debug, Clone)] pub enum Message { + FontLoaded, PollProcesses, ReloadConfig, AddLauncher, @@ -123,6 +124,7 @@ impl Dashboard { fn update(state: &mut Dashboard, msg: Message) -> Task { match msg { + Message::FontLoaded => Task::none(), Message::PollProcesses => { for l in &state.config.launchers { state.running.insert(l.name.clone(), launcher::is_running(l)); @@ -1168,11 +1170,15 @@ pub fn run(config: &Config) -> Result<()> { iced::application(|_: &Dashboard| String::from("umutray"), update, view) .subscription(subscription) .theme(|_| Theme::Dark) - .font(iced_fonts::BOOTSTRAP_FONT_BYTES) + .window(iced::window::Settings { size: iced::Size::new(600.0, 560.0), ..Default::default() }) - .run_with(move || (Dashboard::new(config.clone()), Task::none())) + .run_with(move || { + let cfg = config.clone(); + let load_font = iced::font::load(std::borrow::Cow::Borrowed(iced_fonts::BOOTSTRAP_FONT_BYTES)).map(|_| Message::FontLoaded); + (Dashboard::new(cfg), load_font) + }) .map_err(|e| anyhow::anyhow!("iced: {e}")) }