Use EWMH for DisplayServerX11::_window_minimize_check() implementation
(cherry picked from commit 5666656d42
)
This commit is contained in:
parent
67f5ec2f2f
commit
f5130502be
|
@ -2097,9 +2097,10 @@ bool DisplayServerX11::_window_maximize_check(WindowID p_window, const char *p_a
|
||||||
bool DisplayServerX11::_window_minimize_check(WindowID p_window) const {
|
bool DisplayServerX11::_window_minimize_check(WindowID p_window) const {
|
||||||
const WindowData &wd = windows[p_window];
|
const WindowData &wd = windows[p_window];
|
||||||
|
|
||||||
// Using ICCCM -- Inter-Client Communication Conventions Manual
|
// Using EWMH instead of ICCCM, might work better for Wayland users.
|
||||||
Atom property = XInternAtom(x11_display, "WM_STATE", True);
|
Atom property = XInternAtom(x11_display, "_NET_WM_STATE", True);
|
||||||
if (property == None) {
|
Atom hidden = XInternAtom(x11_display, "_NET_WM_STATE_HIDDEN", True);
|
||||||
|
if (property == None || hidden == None) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2107,7 +2108,7 @@ bool DisplayServerX11::_window_minimize_check(WindowID p_window) const {
|
||||||
int format;
|
int format;
|
||||||
unsigned long len;
|
unsigned long len;
|
||||||
unsigned long remaining;
|
unsigned long remaining;
|
||||||
unsigned char *data = nullptr;
|
Atom *atoms = nullptr;
|
||||||
|
|
||||||
int result = XGetWindowProperty(
|
int result = XGetWindowProperty(
|
||||||
x11_display,
|
x11_display,
|
||||||
|
@ -2116,20 +2117,21 @@ bool DisplayServerX11::_window_minimize_check(WindowID p_window) const {
|
||||||
0,
|
0,
|
||||||
32,
|
32,
|
||||||
False,
|
False,
|
||||||
AnyPropertyType,
|
XA_ATOM,
|
||||||
&type,
|
&type,
|
||||||
&format,
|
&format,
|
||||||
&len,
|
&len,
|
||||||
&remaining,
|
&remaining,
|
||||||
&data);
|
(unsigned char **)&atoms);
|
||||||
|
|
||||||
if (result == Success && data) {
|
if (result == Success && atoms) {
|
||||||
long *state = (long *)data;
|
for (unsigned int i = 0; i < len; i++) {
|
||||||
if (state[0] == WM_IconicState) {
|
if (atoms[i] == hidden) {
|
||||||
XFree(data);
|
XFree(atoms);
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
XFree(data);
|
XFree(atoms);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue