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

View File

@@ -35,7 +35,8 @@ fn main() -> glib::ExitCode {
.build();
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");
// ToolbarView is libadwaita v1_4-gated; the project sticks with the
@@ -44,8 +45,9 @@ fn main() -> glib::ExitCode {
layout.append(&header);
layout.append(&stack);
stack.set_vexpand(true);
toast_overlay.set_child(Some(&layout));
win.set_content(Some(&layout));
win.set_content(Some(&toast_overlay));
win.present();
});
app.run()