diff --git a/src/ifs/wl_surface.rs b/src/ifs/wl_surface.rs index 54ed4b4d..770d4571 100644 --- a/src/ifs/wl_surface.rs +++ b/src/ifs/wl_surface.rs @@ -906,6 +906,12 @@ impl WlSurface { fn unset_ext(&self) { self.ext.set(self.client.state.none_surface_ext.clone()); + self.set_dummy_output(); + } + + fn set_dummy_output(&self) { + let dummy_output = self.client.state.dummy_output.get().unwrap(); + self.set_output(&dummy_output, NodeLocation::Output(dummy_output.id)); } fn calculate_extents(&self, propagate: bool) { diff --git a/src/ifs/wl_surface/xdg_surface.rs b/src/ifs/wl_surface/xdg_surface.rs index 69a5f085..4814c95b 100644 --- a/src/ifs/wl_surface/xdg_surface.rs +++ b/src/ifs/wl_surface/xdg_surface.rs @@ -433,6 +433,11 @@ impl XdgSurface { f(&popup.popup); } } + + fn unset_ext(&self) { + self.ext.set(None); + self.surface.set_dummy_output(); + } } impl XdgSurfaceRequestHandler for XdgSurface { diff --git a/src/ifs/wl_surface/xdg_surface/xdg_popup.rs b/src/ifs/wl_surface/xdg_surface/xdg_popup.rs index f4c98bde..7758c138 100644 --- a/src/ifs/wl_surface/xdg_surface/xdg_popup.rs +++ b/src/ifs/wl_surface/xdg_surface/xdg_popup.rs @@ -229,7 +229,7 @@ impl XdgPopupRequestHandler for XdgPopup { fn destroy(&self, _req: Destroy, _slf: &Rc) -> Result<(), Self::Error> { self.destroy_node(); - self.xdg.ext.set(None); + self.xdg.unset_ext(); self.xdg.surface.client.remove_obj(self)?; Ok(()) } diff --git a/src/ifs/wl_surface/xdg_surface/xdg_toplevel.rs b/src/ifs/wl_surface/xdg_surface/xdg_toplevel.rs index 73054d94..0f01ab95 100644 --- a/src/ifs/wl_surface/xdg_surface/xdg_toplevel.rs +++ b/src/ifs/wl_surface/xdg_surface/xdg_toplevel.rs @@ -256,7 +256,7 @@ impl XdgToplevelRequestHandler for XdgToplevel { fn destroy(&self, _req: Destroy, _slf: &Rc) -> Result<(), Self::Error> { self.tl_destroy(); - self.xdg.ext.set(None); + self.xdg.unset_ext(); { let mut children = self.children.borrow_mut(); let parent = self.parent.get();