From 5dda8cfef59820fbb67126d8cd1557a89cc613f9 Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Mon, 12 Jun 2023 17:25:43 +0200 Subject: [PATCH] surface: Restore previous decoration mode --- src/shell/element/surface.rs | 32 +++++++++++++++++++++++------- src/wayland/handlers/decoration.rs | 2 +- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/shell/element/surface.rs b/src/shell/element/surface.rs index fedaec1c..d9d1df60 100644 --- a/src/shell/element/surface.rs +++ b/src/shell/element/surface.rs @@ -1,4 +1,4 @@ -use std::time::Duration; +use std::{cell::RefCell, time::Duration}; use smithay::{ backend::renderer::{ @@ -191,13 +191,31 @@ impl CosmicSurface { pub fn try_force_undecorated(&self, enable: bool) { match self { - CosmicSurface::Wayland(window) => window.toplevel().with_pending_state(|pending| { - pending.decoration_mode = if enable { - Some(DecorationMode::ServerSide) + CosmicSurface::Wayland(window) => { + if enable { + let previous_decoration_state = + window.toplevel().current_state().decoration_mode.clone(); + window + .user_data() + .insert_if_missing(|| RefCell::new(Option::::None)); + *window + .user_data() + .get::>>() + .unwrap() + .borrow_mut() = previous_decoration_state; + window.toplevel().with_pending_state(|pending| { + pending.decoration_mode = Some(DecorationMode::ServerSide); + }); } else { - None - }; - }), + let previous_mode = window + .user_data() + .get::>>() + .and_then(|m| m.borrow().clone()); + window.toplevel().with_pending_state(|pending| { + pending.decoration_mode = previous_mode; + }); + } + } _ => {} } } diff --git a/src/wayland/handlers/decoration.rs b/src/wayland/handlers/decoration.rs index 94c8f8be..d637dfa2 100644 --- a/src/wayland/handlers/decoration.rs +++ b/src/wayland/handlers/decoration.rs @@ -55,7 +55,7 @@ impl State { .find(|(window, _)| window.wl_surface().as_ref() == Some(surface)) { window.toplevel().with_pending_state(|state| { - state.decoration_mode = dbg!(Some(mode)); + state.decoration_mode = Some(mode); }); window.toplevel().send_configure(); }