feat(gui): wire adw::ToastOverlay for error surfacing

This commit is contained in:
michael
2026-04-27 09:25:50 -07:00
parent 3fbd872a9c
commit 14b473a48a
2 changed files with 9 additions and 6 deletions

View File

@@ -12,14 +12,16 @@ pub(crate) struct KeysPage {
pub root: adw::Bin, pub root: adw::Bin,
daemon: Rc<RefCell<Option<Daemon>>>, daemon: Rc<RefCell<Option<Daemon>>>,
parent_window: gtk::Window, parent_window: gtk::Window,
toast_overlay: adw::ToastOverlay,
} }
impl KeysPage { impl KeysPage {
pub fn new(parent_window: gtk::Window) -> Rc<Self> { pub fn new(parent_window: gtk::Window, toast_overlay: adw::ToastOverlay) -> Rc<Self> {
let page = Rc::new(Self { let page = Rc::new(Self {
root: adw::Bin::new(), root: adw::Bin::new(),
daemon: Rc::new(RefCell::new(None)), daemon: Rc::new(RefCell::new(None)),
parent_window, parent_window,
toast_overlay,
}); });
let p = page.clone(); let p = page.clone();
glib::MainContext::default().spawn_local(async move { glib::MainContext::default().spawn_local(async move {
@@ -165,9 +167,8 @@ impl KeysPage {
} }
fn show_toast(self: &Rc<Self>, msg: &str) { fn show_toast(self: &Rc<Self>, msg: &str) {
// ToastOverlay wiring lands in Task 7. Until then write to stderr so let toast = adw::Toast::builder().title(msg).timeout(5).build();
// manual smoke can observe what would be shown. self.toast_overlay.add_toast(toast);
eprintln!("[gui toast] {msg}");
} }
} }

View File

@@ -35,7 +35,8 @@ fn main() -> glib::ExitCode {
.build(); .build();
header.set_title_widget(Some(&switcher)); header.set_title_widget(Some(&switcher));
let keys = keys_page::KeysPage::new(win.clone().upcast()); let toast_overlay = adw::ToastOverlay::new();
let keys = keys_page::KeysPage::new(win.clone().upcast(), toast_overlay.clone());
stack.add_titled(&keys.root, Some("keys"), "Keys"); stack.add_titled(&keys.root, Some("keys"), "Keys");
// ToolbarView is libadwaita v1_4-gated; the project sticks with the // ToolbarView is libadwaita v1_4-gated; the project sticks with the
@@ -44,8 +45,9 @@ fn main() -> glib::ExitCode {
layout.append(&header); layout.append(&header);
layout.append(&stack); layout.append(&stack);
stack.set_vexpand(true); stack.set_vexpand(true);
toast_overlay.set_child(Some(&layout));
win.set_content(Some(&layout)); win.set_content(Some(&toast_overlay));
win.present(); win.present();
}); });
app.run() app.run()