Set X11Surface hidden when a surface is minimized
This seems for an SDL XWayland client to restore fullscreen after unminimize, it needs to see the `_NET_WM_STATE_HIDDEN` state get set and unset. In general `_NET_WM_STATE_HIDDEN` does not seem to cover all the cases covered by waylands "suspended" state, so let's not equate them. https://github.com/pop-os/cosmic-comp/issues/1510
This commit is contained in:
parent
1f9c130410
commit
282d76ef34
3 changed files with 8 additions and 10 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
|
@ -4961,7 +4961,7 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smithay"
|
name = "smithay"
|
||||||
version = "0.7.0"
|
version = "0.7.0"
|
||||||
source = "git+https://github.com/smithay/smithay.git?rev=15e3fcd#15e3fcde99deb1adfab4c63be0a06783b780e963"
|
source = "git+https://github.com/smithay/smithay.git?rev=d40ada5#d40ada55eceac04fb1c752f0f17b0c32cf24fbb1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aliasable",
|
"aliasable",
|
||||||
"appendlist",
|
"appendlist",
|
||||||
|
|
|
||||||
|
|
@ -145,4 +145,4 @@ cosmic-protocols = { git = "https://github.com/pop-os//cosmic-protocols", branch
|
||||||
cosmic-client-toolkit = { git = "https://github.com/pop-os//cosmic-protocols", branch = "main" }
|
cosmic-client-toolkit = { git = "https://github.com/pop-os//cosmic-protocols", branch = "main" }
|
||||||
|
|
||||||
[patch.crates-io]
|
[patch.crates-io]
|
||||||
smithay = { git = "https://github.com/smithay/smithay.git", rev = "15e3fcd" }
|
smithay = { git = "https://github.com/smithay/smithay.git", rev = "d40ada5" }
|
||||||
|
|
|
||||||
|
|
@ -416,8 +416,9 @@ impl CosmicSurface {
|
||||||
.get_or_insert_threadsafe(Minimized::default)
|
.get_or_insert_threadsafe(Minimized::default)
|
||||||
.0
|
.0
|
||||||
.store(minimized, Ordering::SeqCst);
|
.store(minimized, Ordering::SeqCst);
|
||||||
if !minimized {
|
if let WindowSurface::X11(surface) = self.0.underlying_surface() {
|
||||||
if let WindowSurface::X11(surface) = self.0.underlying_surface() {
|
let _ = surface.set_hidden(minimized);
|
||||||
|
if !minimized {
|
||||||
let _ = surface.set_mapped(false);
|
let _ = surface.set_mapped(false);
|
||||||
let _ = surface.set_mapped(true);
|
let _ = surface.set_mapped(true);
|
||||||
}
|
}
|
||||||
|
|
@ -441,17 +442,14 @@ impl CosmicSurface {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_suspended(&self, suspended: bool) {
|
pub fn set_suspended(&self, suspended: bool) {
|
||||||
match self.0.underlying_surface() {
|
if let WindowSurface::Wayland(window) = self.0.underlying_surface() {
|
||||||
WindowSurface::Wayland(window) => window.with_pending_state(|state| {
|
window.with_pending_state(|state| {
|
||||||
if suspended {
|
if suspended {
|
||||||
state.states.set(ToplevelState::Suspended);
|
state.states.set(ToplevelState::Suspended);
|
||||||
} else {
|
} else {
|
||||||
state.states.unset(ToplevelState::Suspended);
|
state.states.unset(ToplevelState::Suspended);
|
||||||
}
|
}
|
||||||
}),
|
});
|
||||||
WindowSurface::X11(surface) => {
|
|
||||||
let _ = surface.set_suspended(suspended);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue