diff --git a/README.md b/README.md index 46321e0e..16f7b0f0 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,7 @@ guide in the GLFW documentation. - [Cocoa] Bugfix: Controllers were reported as having zero buttons and axes - [Cocoa] Bugfix: Removed joystick axis value negation left over from GLFW 2 - [X11] Added setting of the `WM_CLASS` property to the initial window title + - [X11] Added support for `_NET_WM_BYPASS_COMPOSITOR` - [X11] Bugfix: Removed joystick axis value negation left over from GLFW 2 - [X11] Bugfix: The position of hidden windows was ignored by Metacity and Compiz diff --git a/src/x11_init.c b/src/x11_init.c index 269314cb..5b477f04 100644 --- a/src/x11_init.c +++ b/src/x11_init.c @@ -409,6 +409,8 @@ static void detectEWMH(void) getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_PING"); _glfw.x11.NET_ACTIVE_WINDOW = getSupportedAtom(supportedAtoms, atomCount, "_NET_ACTIVE_WINDOW"); + _glfw.x11.NET_WM_BYPASS_COMPOSITOR = + getSupportedAtom(supportedAtoms, atomCount, "_NET_WM_BYPASS_COMPOSITOR"); XFree(supportedAtoms); diff --git a/src/x11_platform.h b/src/x11_platform.h index 868429fa..f8129385 100644 --- a/src/x11_platform.h +++ b/src/x11_platform.h @@ -117,6 +117,7 @@ typedef struct _GLFWlibraryX11 Atom NET_WM_PING; Atom NET_WM_STATE; Atom NET_WM_STATE_FULLSCREEN; + Atom NET_WM_BYPASS_COMPOSITOR; Atom NET_ACTIVE_WINDOW; Atom MOTIF_WM_HINTS; diff --git a/src/x11_window.c b/src/x11_window.c index 115ab1df..164f1070 100644 --- a/src/x11_window.c +++ b/src/x11_window.c @@ -399,6 +399,15 @@ static void enterFullscreenMode(_GLFWwindow* window) _glfwSetVideoMode(window->monitor, &window->videoMode); + if (_glfw.x11.NET_WM_BYPASS_COMPOSITOR != None) + { + const unsigned long value = 1; + + XChangeProperty(_glfw.x11.display, window->x11.handle, + _glfw.x11.NET_WM_BYPASS_COMPOSITOR, XA_CARDINAL, 32, + PropModeReplace, (unsigned char*) &value, 1); + } + if (_glfw.x11.hasEWMH && _glfw.x11.NET_WM_STATE != None && _glfw.x11.NET_WM_STATE_FULLSCREEN != None) @@ -487,6 +496,15 @@ static void leaveFullscreenMode(_GLFWwindow* window) _glfw.x11.saver.exposure); } + if (_glfw.x11.NET_WM_BYPASS_COMPOSITOR != None) + { + const unsigned long value = 0; + + XChangeProperty(_glfw.x11.display, window->x11.handle, + _glfw.x11.NET_WM_BYPASS_COMPOSITOR, XA_CARDINAL, 32, + PropModeReplace, (unsigned char*) &value, 1); + } + if (_glfw.x11.hasEWMH && _glfw.x11.NET_WM_STATE != None && _glfw.x11.NET_WM_STATE_FULLSCREEN != None)