diff --git a/src/nodes/items/panel.rs b/src/nodes/items/panel.rs index 0755450..a15e1c6 100644 --- a/src/nodes/items/panel.rs +++ b/src/nodes/items/panel.rs @@ -201,10 +201,6 @@ impl PanelItem { ItemType::Panel(generic_panel_item), ); - // panel_item - // .seat_data - // .new_surface(&wl_surface, Arc::downgrade(&panel_item)); - if let Some(startup_settings) = &startup_settings { if let Some(acceptor) = startup_settings .acceptors @@ -413,7 +409,6 @@ impl PanelItem { panel_item.configure_toplevel(info.size, info.states, info.bounds); Ok(()) } - fn set_toplevel_capabilities_flex( node: &Node, _calling_client: Arc, @@ -434,7 +429,6 @@ impl PanelItem { let Ok(data) = self.backend.serialize_toplevel() else {return}; let _ = node.send_remote_signal("commit_toplevel", data); } - pub fn recommend_toplevel_state(&self, state: RecommendedState) { let Some(node) = self.node.upgrade() else {return}; let data = serialize(state).unwrap(); @@ -442,6 +436,11 @@ impl PanelItem { let _ = node.send_remote_signal("recommend_toplevel_state", data); } + + pub fn drop_toplevel(&self) { + let Some(node) = self.node.upgrade() else {return}; + node.destroy(); + } } impl PanelItemTrait for PanelItem { fn uid(&self) -> &str { @@ -477,11 +476,9 @@ impl Backend for PanelItem { fn pointer_motion(&self, surface: &SurfaceID, position: Vector2) { self.backend.pointer_motion(surface, position) } - fn pointer_button(&self, surface: &SurfaceID, button: u32, pressed: bool) { self.backend.pointer_button(surface, button, pressed) } - fn pointer_scroll( &self, surface: &SurfaceID, @@ -495,7 +492,6 @@ impl Backend for PanelItem { fn keyboard_set_keymap(&self, keymap: &str) -> Result<()> { self.backend.keyboard_set_keymap(keymap) } - fn keyboard_key(&self, surface: &SurfaceID, key: u32, state: bool) { self.backend.keyboard_key(surface, key, state) } diff --git a/src/wayland/xdg_shell.rs b/src/wayland/xdg_shell.rs index 38a0b9a..f5ccf94 100644 --- a/src/wayland/xdg_shell.rs +++ b/src/wayland/xdg_shell.rs @@ -908,6 +908,8 @@ impl XDGBackend { } pub fn on_drop(&self) { + let Some(toplevel_popup) = self.toplevel_xdg_surface().and_then(|s| XdgSurfaceData::get(&s).and_then(|s| s.lock().panel_item.upgrade())) else {return}; + toplevel_popup.drop_toplevel(); let Some(toplevel) = self.toplevel_wl_surface() else {return}; self.seat.drop_surface(&toplevel);