fix: panel items not dropping on toplevel close

This commit is contained in:
Nova
2023-08-14 03:05:22 -04:00
parent 4e199dd43f
commit 433568da63
2 changed files with 7 additions and 9 deletions

View File

@@ -201,10 +201,6 @@ impl<B: Backend + ?Sized> PanelItem<B> {
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<B: Backend + ?Sized> PanelItem<B> {
panel_item.configure_toplevel(info.size, info.states, info.bounds);
Ok(())
}
fn set_toplevel_capabilities_flex(
node: &Node,
_calling_client: Arc<Client>,
@@ -434,7 +429,6 @@ impl<B: Backend + ?Sized> PanelItem<B> {
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<B: Backend + ?Sized> PanelItem<B> {
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<B: Backend + ?Sized> PanelItemTrait for PanelItem<B> {
fn uid(&self) -> &str {
@@ -477,11 +476,9 @@ impl<B: Backend + ?Sized> Backend for PanelItem<B> {
fn pointer_motion(&self, surface: &SurfaceID, position: Vector2<f32>) {
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<B: Backend + ?Sized> Backend for PanelItem<B> {
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)
}

View File

@@ -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);