From 0454463e5003a0acf193a786af9b9fe92d3b89ba Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Thu, 6 Jan 2022 10:50:47 -0500 Subject: [PATCH] clear dock popover when hidden --- examples/dock/dock_item/mod.rs | 6 ++++-- examples/dock/dock_popover/mod.rs | 24 ++++++++++++++---------- examples/dock/window/mod.rs | 2 +- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/examples/dock/dock_item/mod.rs b/examples/dock/dock_item/mod.rs index 4337852..76bab98 100644 --- a/examples/dock/dock_item/mod.rs +++ b/examples/dock/dock_item/mod.rs @@ -70,8 +70,9 @@ impl DockItem { .connect_local( "menu-hide", false, - glib::clone!(@weak popover => @default-return None, move |_| { + glib::clone!(@weak popover, @weak popover_menu => @default-return None, move |_| { popover.popdown(); + popover_menu.reset_menu(); None }), ) @@ -140,7 +141,8 @@ impl DockItem { pub fn clear_popover(&self) { let imp = imp::DockItem::from_instance(self); let popover = imp.popover.borrow(); - + let popover_menu = imp.popover_menu.borrow(); popover.popdown(); + popover_menu.reset_menu(); } } diff --git a/examples/dock/dock_popover/mod.rs b/examples/dock/dock_popover/mod.rs index b8f4158..327e45e 100644 --- a/examples/dock/dock_popover/mod.rs +++ b/examples/dock/dock_popover/mod.rs @@ -44,13 +44,7 @@ impl DockPopover { pub fn update_layout(&self) { let imp = imp::DockPopover::from_instance(&self); let dock_object = imp.dock_object.borrow(); - - // reset menu - let menu_handle = cascade! { - Box::new(Orientation::Vertical, 4); - }; - self.append(&menu_handle); - + let menu_handle = imp.menu_handle.borrow(); // build menu if let Some(dock_object) = dock_object.as_ref() { cascade! { @@ -183,14 +177,12 @@ impl DockPopover { } self.setup_handlers(); } - let old_menu_handle = imp.menu_handle.replace(menu_handle); - self.remove(&old_menu_handle); } fn layout(&self) { let imp = imp::DockPopover::from_instance(&self); let menu_handle = cascade! { - Box::default(); + Box::new(Orientation::Vertical, 4); }; self.append(&menu_handle); imp.menu_handle.replace(menu_handle); @@ -200,6 +192,18 @@ impl DockPopover { self.emit_by_name::<&str>("menu-hide", &[]).unwrap(); } + pub fn reset_menu(&self) { + // reset menu + let menu_handle = cascade! { + Box::new(Orientation::Vertical, 4); + }; + self.append(&menu_handle); + + let imp = imp::DockPopover::from_instance(&self); + let old_menu_handle = imp.menu_handle.replace(menu_handle); + self.remove(&old_menu_handle); + } + fn setup_handlers(&self) { let imp = imp::DockPopover::from_instance(&self); let dock_object = imp.dock_object.borrow(); diff --git a/examples/dock/window/mod.rs b/examples/dock/window/mod.rs index bbefe36..eba80a0 100644 --- a/examples/dock/window/mod.rs +++ b/examples/dock/window/mod.rs @@ -221,7 +221,7 @@ impl Window { glib::clone!(@weak revealer, @weak drop_controller => move |_evc| { // only hide if DnD is not happening if drop_controller.current_drop().is_none() { - dbg!("hello, mouse left me :)"); + // dbg!("hello, mouse left me :)"); revealer.set_reveal_child(false); } }),