diff --git a/gfx/common/x11_common.c b/gfx/common/x11_common.c index 1ab16b90b7..6de3e8a3d7 100644 --- a/gfx/common/x11_common.c +++ b/gfx/common/x11_common.c @@ -685,6 +685,47 @@ void x11_event_queue_check(XEvent *event) XIfEvent(g_x11_dpy, event, x11_wait_notify, NULL); } +static bool x11_check_atom_supported(Display *dpy, Atom atom) +{ + Atom XA_NET_SUPPORTED = XInternAtom(dpy, "_NET_SUPPORTED", True); + Atom type; + int format; + unsigned long nitems; + unsigned long bytes_after; + Atom *prop; + int i; + + if (XA_NET_SUPPORTED == None) + return false; + + XGetWindowProperty(dpy, DefaultRootWindow(dpy), XA_NET_SUPPORTED, 0, UINT_MAX, False, XA_ATOM, &type, &format,&nitems, &bytes_after, (unsigned char **) &prop); + + if (!prop || type != XA_ATOM) + { + return false; + } + + for (i = 0; i < nitems; i++) + { + if (prop[i] == atom) + { + XFree(prop); + return true; + } + } + + XFree(prop); + + return false; +} + +bool x11_has_net_wm_fullscreen(Display *dpy) +{ + XA_NET_WM_STATE_FULLSCREEN = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False); + + return x11_check_atom_supported(dpy, XA_NET_WM_STATE_FULLSCREEN); +} + char *x11_get_wm_name(Display *dpy) { Atom XA_NET_SUPPORTING_WM_CHECK = XInternAtom(g_x11_dpy, "_NET_SUPPORTING_WM_CHECK", False); diff --git a/gfx/common/x11_common.h b/gfx/common/x11_common.h index ec4fa0dc28..6be78245d1 100644 --- a/gfx/common/x11_common.h +++ b/gfx/common/x11_common.h @@ -77,5 +77,7 @@ void x11_event_queue_check(XEvent *event); char *x11_get_wm_name(Display *dpy); +bool x11_has_net_wm_fullscreen(Display *dpy); + #endif diff --git a/gfx/drivers_context/x_ctx.c b/gfx/drivers_context/x_ctx.c index 387336f6a9..e623f6c287 100644 --- a/gfx/drivers_context/x_ctx.c +++ b/gfx/drivers_context/x_ctx.c @@ -705,6 +705,8 @@ static bool gfx_ctx_x_set_video_mode(void *data, } free(wm_name); } + if (!x11_has_net_wm_fullscreen(g_x11_dpy) && true_full) + swa.override_redirect = True; if (video_info->monitor_index) g_x11_screen = video_info->monitor_index - 1; diff --git a/gfx/drivers_context/xegl_ctx.c b/gfx/drivers_context/xegl_ctx.c index 2f120ad956..04485648e2 100644 --- a/gfx/drivers_context/xegl_ctx.c +++ b/gfx/drivers_context/xegl_ctx.c @@ -324,6 +324,8 @@ static bool gfx_ctx_xegl_set_video_mode(void *data, } free(wm_name); } + if (!x11_has_net_wm_fullscreen(g_x11_dpy) && true_full) + swa.override_redirect = True; if (video_info->monitor_index) g_x11_screen = video_info->monitor_index - 1;