diff --git a/src/ifs/ext_session_lock_v1.rs b/src/ifs/ext_session_lock_v1.rs index 51479322..5bb3bb07 100644 --- a/src/ifs/ext_session_lock_v1.rs +++ b/src/ifs/ext_session_lock_v1.rs @@ -87,16 +87,7 @@ impl ExtSessionLockV1RequestHandler for ExtSessionLockV1 { return Err(ExtSessionLockV1Error::NeverLocked); } if !self.finished.get() { - let state = &self.client.state; - state.lock.locked.set(false); - state.lock.lock.take(); - for output in state.root.outputs.lock().values() { - if let Some(surface) = output.set_lock_surface(None) { - surface.destroy_node(); - } - } - state.tree_changed(); - state.damage(); + self.client.state.do_unlock(); } self.client.remove_obj(self)?; Ok(()) diff --git a/src/ifs/jay_compositor.rs b/src/ifs/jay_compositor.rs index ddbdba84..e041a384 100644 --- a/src/ifs/jay_compositor.rs +++ b/src/ifs/jay_compositor.rs @@ -216,19 +216,12 @@ impl JayCompositorRequestHandler for JayCompositor { fn unlock(&self, _req: Unlock, _slf: &Rc) -> Result<(), Self::Error> { let state = &self.client.state; - if state.lock.locked.replace(false) { - if let Some(lock) = state.lock.lock.take() { + if state.lock.locked.get() { + if let Some(lock) = state.lock.lock.get() { lock.finish(); } - for output in state.root.outputs.lock().values() { - if let Some(surface) = output.set_lock_surface(None) { - surface.destroy_node(); - } - } - state.tree_changed(); - state.damage(); + state.do_unlock(); } - self.client.symmetric_delete.set(true); Ok(()) } diff --git a/src/state.rs b/src/state.rs index 9d51140d..07af9b1b 100644 --- a/src/state.rs +++ b/src/state.rs @@ -736,6 +736,18 @@ impl State { } } + pub fn do_unlock(&self) { + self.lock.locked.set(false); + self.lock.lock.take(); + for output in self.root.outputs.lock().values() { + if let Some(surface) = output.set_lock_surface(None) { + surface.destroy_node(); + } + } + self.tree_changed(); + self.damage(); + } + pub fn clear(&self) { self.lock.lock.take(); self.xwayland.handler.borrow_mut().take();