clear dock popover when hidden

This commit is contained in:
Ashley Wulber 2022-01-06 10:50:47 -05:00
parent 9231d84dbf
commit 0454463e50
3 changed files with 19 additions and 13 deletions

View file

@ -70,8 +70,9 @@ impl DockItem {
.connect_local( .connect_local(
"menu-hide", "menu-hide",
false, false,
glib::clone!(@weak popover => @default-return None, move |_| { glib::clone!(@weak popover, @weak popover_menu => @default-return None, move |_| {
popover.popdown(); popover.popdown();
popover_menu.reset_menu();
None None
}), }),
) )
@ -140,7 +141,8 @@ impl DockItem {
pub fn clear_popover(&self) { pub fn clear_popover(&self) {
let imp = imp::DockItem::from_instance(self); let imp = imp::DockItem::from_instance(self);
let popover = imp.popover.borrow(); let popover = imp.popover.borrow();
let popover_menu = imp.popover_menu.borrow();
popover.popdown(); popover.popdown();
popover_menu.reset_menu();
} }
} }

View file

@ -44,13 +44,7 @@ impl DockPopover {
pub fn update_layout(&self) { pub fn update_layout(&self) {
let imp = imp::DockPopover::from_instance(&self); let imp = imp::DockPopover::from_instance(&self);
let dock_object = imp.dock_object.borrow(); let dock_object = imp.dock_object.borrow();
let menu_handle = imp.menu_handle.borrow();
// reset menu
let menu_handle = cascade! {
Box::new(Orientation::Vertical, 4);
};
self.append(&menu_handle);
// build menu // build menu
if let Some(dock_object) = dock_object.as_ref() { if let Some(dock_object) = dock_object.as_ref() {
cascade! { cascade! {
@ -183,14 +177,12 @@ impl DockPopover {
} }
self.setup_handlers(); self.setup_handlers();
} }
let old_menu_handle = imp.menu_handle.replace(menu_handle);
self.remove(&old_menu_handle);
} }
fn layout(&self) { fn layout(&self) {
let imp = imp::DockPopover::from_instance(&self); let imp = imp::DockPopover::from_instance(&self);
let menu_handle = cascade! { let menu_handle = cascade! {
Box::default(); Box::new(Orientation::Vertical, 4);
}; };
self.append(&menu_handle); self.append(&menu_handle);
imp.menu_handle.replace(menu_handle); imp.menu_handle.replace(menu_handle);
@ -200,6 +192,18 @@ impl DockPopover {
self.emit_by_name::<&str>("menu-hide", &[]).unwrap(); 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) { fn setup_handlers(&self) {
let imp = imp::DockPopover::from_instance(&self); let imp = imp::DockPopover::from_instance(&self);
let dock_object = imp.dock_object.borrow(); let dock_object = imp.dock_object.borrow();

View file

@ -221,7 +221,7 @@ impl Window {
glib::clone!(@weak revealer, @weak drop_controller => move |_evc| { glib::clone!(@weak revealer, @weak drop_controller => move |_evc| {
// only hide if DnD is not happening // only hide if DnD is not happening
if drop_controller.current_drop().is_none() { if drop_controller.current_drop().is_none() {
dbg!("hello, mouse left me :)"); // dbg!("hello, mouse left me :)");
revealer.set_reveal_child(false); revealer.set_reveal_child(false);
} }
}), }),