Atom X_ATOM_NETWM_MAXIMIZE_VERT;\r
Atom X_ATOM_NETWM_MAXIMIZE_HORZ;\r
Atom X_ATOM_NETWM_STATE;\r
+ Atom X_ATOM_NETWM_STATE_FULLSCREEN;\r
\r
Atom X_ATOM_WM_DELETE_WINDOW;\r
\r
if (!CreationParams.Fullscreen)\r
return true;\r
\r
- // To be filled...\r
+ if (!HasNetWM)\r
+ {\r
+ os::Printer::log("NetWM support is required to allow Irrlicht to switch "\r
+ "to fullscreen mode. Running in windowed mode instead.", ELL_WARNING);\r
+ CreationParams.Fullscreen = false;\r
+ return false;\r
+ }\r
+\r
+ XEvent ev = {0};\r
+\r
+ ev.type = ClientMessage;\r
+ ev.xclient.window = XWindow;\r
+ ev.xclient.message_type = X_ATOM_NETWM_STATE;\r
+ ev.xclient.format = 32;\r
+ ev.xclient.data.l[0] = 1; // _NET_WM_STATE_ADD\r
+ ev.xclient.data.l[1] = X_ATOM_NETWM_STATE_FULLSCREEN;\r
+\r
+ XSendEvent(XDisplay, DefaultRootWindow(XDisplay), false,\r
+ SubstructureNotifyMask | SubstructureRedirectMask, &ev);\r
+\r
return true;\r
}\r
\r
\r
Screennr = DefaultScreen(XDisplay);\r
\r
- switchToFullscreen();\r
+ initXAtoms();\r
+\r
+ // check netwm support\r
+ Atom WMCheck = XInternAtom(XDisplay, "_NET_SUPPORTING_WM_CHECK", True);\r
+ if (WMCheck != None)\r
+ HasNetWM = true;\r
\r
#if defined(_IRR_COMPILE_WITH_OPENGL_)\r
// don't use the XVisual with OpenGL, because it ignores all requested\r
ExternalWindow = true;\r
}\r
\r
+ switchToFullscreen();\r
+\r
WindowMinimized=false;\r
// Currently broken in X, see Bug ID 2795321\r
// XkbSetDetectableAutoRepeat(XDisplay, True, &AutorepeatSupport);\r
SoftwareImage->data = (char*) malloc(SoftwareImage->bytes_per_line * SoftwareImage->height * sizeof(char));\r
}\r
\r
- initXAtoms();\r
-\r
- // check netwm support\r
- Atom WMCheck = XInternAtom(XDisplay, "_NET_SUPPORTING_WM_CHECK", true);\r
- if (WMCheck != None)\r
- HasNetWM = true;\r
-\r
initXInput2();\r
\r
#endif // #ifdef _IRR_COMPILE_WITH_X11_\r
X_ATOM_NETWM_MAXIMIZE_VERT = XInternAtom(XDisplay, "_NET_WM_STATE_MAXIMIZED_VERT", true);\r
X_ATOM_NETWM_MAXIMIZE_HORZ = XInternAtom(XDisplay, "_NET_WM_STATE_MAXIMIZED_HORZ", true);\r
X_ATOM_NETWM_STATE = XInternAtom(XDisplay, "_NET_WM_STATE", true);\r
+ X_ATOM_NETWM_STATE_FULLSCREEN = XInternAtom(XDisplay, "_NET_WM_STATE_FULLSCREEN", True);\r
#endif\r
}\r
\r