Add Window::is_minimized

Co-authored-by: Kirill Chibisov <contact@kchibisov.com>
Co-authored-by: Markus Siglreithmaier <m.siglreith@gmail.com>
This commit is contained in:
Amr Bashir 2023-01-19 23:39:04 +02:00 committed by GitHub
parent de782504ab
commit 809162fbd0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 83 additions and 11 deletions

View file

@ -464,6 +464,11 @@ impl Window {
x11_or_wayland!(match self; Window(w) => w.set_minimized(minimized))
}
#[inline]
pub fn is_minimized(&self) -> Option<bool> {
x11_or_wayland!(match self; Window(w) => w.is_minimized())
}
#[inline]
pub(crate) fn fullscreen(&self) -> Option<Fullscreen> {
x11_or_wayland!(match self; Window(w) => w.fullscreen())

View file

@ -483,6 +483,11 @@ impl Window {
self.decorated.load(Ordering::Relaxed)
}
#[inline]
pub fn is_minimized(&self) -> Option<bool> {
None
}
#[inline]
pub fn set_minimized(&self, minimized: bool) {
// You can't unminimize the window on Wayland.

View file

@ -802,6 +802,20 @@ impl UnownedWindow {
self.xconn.primary_monitor()
}
#[inline]
pub fn is_minimized(&self) -> Option<bool> {
let state_atom = unsafe { self.xconn.get_atom_unchecked(b"_NET_WM_STATE\0") };
let state = self
.xconn
.get_property(self.xwindow, state_atom, ffi::XA_ATOM);
let hidden_atom = unsafe { self.xconn.get_atom_unchecked(b"_NET_WM_STATE_HIDDEN\0") };
Some(match state {
Ok(atoms) => atoms.iter().any(|atom: &ffi::Atom| *atom == hidden_atom),
_ => false,
})
}
fn set_minimized_inner(&self, minimized: bool) -> util::Flusher<'_> {
unsafe {
if minimized {