Commit 2436ca200d912bd1b799ddecbd032a16fe562900

Ryan C. Gordon 2016-02-20T01:03:39

x11: better fix for the previous commit's fullscreen vs maximized issue.

diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c
index bb1b4bf..0917676 100644
--- a/src/video/x11/SDL_x11window.c
+++ b/src/video/x11/SDL_x11window.c
@@ -1186,6 +1186,22 @@ X11_SetWindowFullscreenViaWM(_THIS, SDL_Window * window, SDL_VideoDisplay * _dis
 
         X11_XSendEvent(display, RootWindow(display, displaydata->screen), 0,
                    SubstructureNotifyMask | SubstructureRedirectMask, &e);
+
+        /* Fullscreen windows sometimes end up being marked maximized by
+            window managers. Force it back to how we expect it to be. */
+        if (!fullscreen && ((window->flags & SDL_WINDOW_MAXIMIZED) == 0)) {
+            SDL_zero(e);
+            e.xany.type = ClientMessage;
+            e.xclient.message_type = _NET_WM_STATE;
+            e.xclient.format = 32;
+            e.xclient.window = data->xwindow;
+            e.xclient.data.l[0] = _NET_WM_STATE_REMOVE;
+            e.xclient.data.l[1] = data->videodata->_NET_WM_STATE_MAXIMIZED_VERT;
+            e.xclient.data.l[2] = data->videodata->_NET_WM_STATE_MAXIMIZED_HORZ;
+            e.xclient.data.l[3] = 0l;
+            X11_XSendEvent(display, RootWindow(display, displaydata->screen), 0,
+                   SubstructureNotifyMask | SubstructureRedirectMask, &e);
+        }
     } else {
         Uint32 flags;
 
@@ -1206,14 +1222,6 @@ X11_SetWindowFullscreenViaWM(_THIS, SDL_Window * window, SDL_VideoDisplay * _dis
         }
     }
 
-    /* Fullscreen windows sometimes end up being marked maximized by
-        window managers. Force it back to how we expect it to be. */
-    if (X11_IsWindowMapped(_this, window)) {
-        if (!fullscreen && ((window->flags & SDL_WINDOW_MAXIMIZED) == 0)) {
-            SetWindowMaximized(_this, window, SDL_FALSE);
-        }
-    }
-
     X11_XFlush(display);
 }