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