surface: Restore previous decoration mode
This commit is contained in:
parent
8e4fa6bfc6
commit
5dda8cfef5
2 changed files with 26 additions and 8 deletions
|
|
@ -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::<DecorationMode>::None));
|
||||
*window
|
||||
.user_data()
|
||||
.get::<RefCell<Option<DecorationMode>>>()
|
||||
.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::<RefCell<Option<DecorationMode>>>()
|
||||
.and_then(|m| m.borrow().clone());
|
||||
window.toplevel().with_pending_state(|pending| {
|
||||
pending.decoration_mode = previous_mode;
|
||||
});
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue