Fix fullscreen on X11 for non-resizable windows
This commit is contained in:
@ -686,6 +686,16 @@ void OS_X11::get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen) con
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OS_X11::set_wm_fullscreen(bool p_enabled) {
|
void OS_X11::set_wm_fullscreen(bool p_enabled) {
|
||||||
|
if (p_enabled && !is_window_resizable()) {
|
||||||
|
// Set the window as resizable to prevent window managers to ignore the fullscreen state flag.
|
||||||
|
XSizeHints *xsh;
|
||||||
|
|
||||||
|
xsh = XAllocSizeHints();
|
||||||
|
xsh->flags = 0L;
|
||||||
|
XSetWMNormalHints(x11_display, x11_window, xsh);
|
||||||
|
XFree(xsh);
|
||||||
|
}
|
||||||
|
|
||||||
// Using EWMH -- Extened Window Manager Hints
|
// Using EWMH -- Extened Window Manager Hints
|
||||||
XEvent xev;
|
XEvent xev;
|
||||||
Atom wm_state = XInternAtom(x11_display, "_NET_WM_STATE", False);
|
Atom wm_state = XInternAtom(x11_display, "_NET_WM_STATE", False);
|
||||||
@ -701,6 +711,23 @@ void OS_X11::set_wm_fullscreen(bool p_enabled) {
|
|||||||
xev.xclient.data.l[2] = 0;
|
xev.xclient.data.l[2] = 0;
|
||||||
|
|
||||||
XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
|
XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
|
||||||
|
XFlush(x11_display);
|
||||||
|
|
||||||
|
if (!p_enabled && !is_window_resizable()) {
|
||||||
|
// Reset the non-resizable flags if we un-set these before.
|
||||||
|
Size2 size = get_window_size();
|
||||||
|
XSizeHints *xsh;
|
||||||
|
|
||||||
|
xsh = XAllocSizeHints();
|
||||||
|
xsh->flags = PMinSize | PMaxSize;
|
||||||
|
xsh->min_width = size.x;
|
||||||
|
xsh->max_width = size.x;
|
||||||
|
xsh->min_height = size.y;
|
||||||
|
xsh->max_height = size.y;
|
||||||
|
|
||||||
|
XSetWMNormalHints(x11_display, x11_window, xsh);
|
||||||
|
XFree(xsh);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int OS_X11::get_screen_count() const {
|
int OS_X11::get_screen_count() const {
|
||||||
|
|||||||
Reference in New Issue
Block a user