Properly check for fullscreen toggle made through the Window Manager
(cherry picked from commit cf38b6f187
)
This commit is contained in:
parent
5fcdbfb2be
commit
720b3a40ce
|
@ -1701,6 +1701,49 @@ bool OS_X11::window_maximize_check(const char *p_atom_name) const {
|
|||
return retval;
|
||||
}
|
||||
|
||||
bool OS_X11::window_fullscreen_check() const {
|
||||
// Using EWMH -- Extended Window Manager Hints
|
||||
Atom property = XInternAtom(x11_display, "_NET_WM_STATE", False);
|
||||
Atom type;
|
||||
int format;
|
||||
unsigned long len;
|
||||
unsigned long remaining;
|
||||
unsigned char *data = nullptr;
|
||||
bool retval = false;
|
||||
|
||||
if (property == None) {
|
||||
return retval;
|
||||
}
|
||||
|
||||
int result = XGetWindowProperty(
|
||||
x11_display,
|
||||
x11_window,
|
||||
property,
|
||||
0,
|
||||
1024,
|
||||
False,
|
||||
XA_ATOM,
|
||||
&type,
|
||||
&format,
|
||||
&len,
|
||||
&remaining,
|
||||
&data);
|
||||
|
||||
if (result == Success) {
|
||||
Atom *atoms = (Atom *)data;
|
||||
Atom wm_fullscreen = XInternAtom(x11_display, "_NET_WM_STATE_FULLSCREEN", False);
|
||||
for (uint64_t i = 0; i < len; i++) {
|
||||
if (atoms[i] == wm_fullscreen) {
|
||||
retval = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
XFree(data);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
bool OS_X11::is_window_maximize_allowed() const {
|
||||
return window_maximize_check("_NET_WM_ALLOWED_ACTIONS");
|
||||
}
|
||||
|
@ -2538,6 +2581,8 @@ void OS_X11::process_xevents() {
|
|||
|
||||
switch (event.type) {
|
||||
case Expose:
|
||||
current_videomode.fullscreen = window_fullscreen_check();
|
||||
|
||||
Main::force_redraw();
|
||||
break;
|
||||
|
||||
|
|
|
@ -244,6 +244,7 @@ protected:
|
|||
void _window_changed(XEvent *event);
|
||||
|
||||
bool window_maximize_check(const char *p_atom_name) const;
|
||||
bool window_fullscreen_check() const;
|
||||
bool is_window_maximize_allowed() const;
|
||||
|
||||
public:
|
||||
|
|
Loading…
Reference in New Issue