From 10090c059668e6194bf3ddb133997a4ac94ca9cc Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Fri, 20 May 2022 13:56:09 +0200 Subject: [PATCH] tree: fix jay hanging during shutdown --- src/client/objects.rs | 21 ++++++++------------- src/ifs/wl_surface.rs | 4 ++++ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/client/objects.rs b/src/client/objects.rs index 93ed3069..bc7e604e 100644 --- a/src/client/objects.rs +++ b/src/client/objects.rs @@ -20,7 +20,6 @@ use { xdg_wm_base::XdgWmBase, }, object::{Object, ObjectId}, - tree::ToplevelNode, utils::{ clonecell::CloneCell, copyhashmap::{CopyHashMap, Locked}, @@ -31,7 +30,7 @@ use { ZwpPrimarySelectionSourceV1Id, }, }, - std::{cell::RefCell, mem, ops::DerefMut, rc::Rc}, + std::{cell::RefCell, mem, rc::Rc}, }; pub struct Objects { @@ -80,25 +79,21 @@ impl Objects { } pub fn destroy(&self) { - { - let mut toplevel = self.xdg_toplevel.lock(); - for obj in toplevel.values_mut() { - obj.tl_destroy(); + for surface in self.surfaces.lock().values() { + if let Some(tl) = surface.get_toplevel() { + tl.tl_destroy(); } - mem::take(toplevel.deref_mut()); } - { - let mut registry = self.registry.lock(); - for obj in registry.values_mut() { - obj.break_loops(); - } - mem::take(registry.deref_mut()); + for obj in self.registry.lock().values_mut() { + obj.break_loops(); } self.display.set(None); + self.registry.clear(); self.registries.clear(); self.outputs.clear(); self.surfaces.clear(); self.xdg_surfaces.clear(); + self.xdg_toplevel.clear(); self.wl_data_source.clear(); self.zwp_primary_selection_source.clear(); self.xdg_positioners.clear(); diff --git a/src/ifs/wl_surface.rs b/src/ifs/wl_surface.rs index be646852..19479333 100644 --- a/src/ifs/wl_surface.rs +++ b/src/ifs/wl_surface.rs @@ -231,6 +231,10 @@ impl WlSurface { } } + pub fn get_toplevel(&self) -> Option> { + self.toplevel.get() + } + fn set_absolute_position(&self, x1: i32, y1: i32) { self.buffer_abs_pos .set(self.buffer_abs_pos.get().at_point(x1, y1));