From 6a5d4656732696440360da1697ed28bc4d965394 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 3 Oct 2012 12:33:42 -0700 Subject: [PATCH] Poke window managers to get them to respect the resize hints. --- src/video/x11/SDL_x11window.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c index 559b7fce5..d31819b08 100644 --- a/src/video/x11/SDL_x11window.c +++ b/src/video/x11/SDL_x11window.c @@ -758,6 +758,36 @@ X11_SetWindowSize(_THIS, SDL_Window * window) XSetWMNormalHints(display, data->xwindow, sizehints); XFree(sizehints); + + /* From Pierre-Loup: + For the windowed resize problem; WMs each have their little quirks with + that. When you change the size hints, they get a ConfigureNotify event + with the WM_NORMAL_SIZE_HINTS Atom. They all save the hints then, but + they don't all resize the window right away to enforce the new hints. + Those who do properly do it are: + + - XFWM + - metacity + - KWin + + These are great. Now, others are more problematic as you could observe + first hand. Compiz/Unity only falls into the code that does it on select + actions, such as window move, raise, map, etc. + + WindowMaker is even more difficult and will _only_ do it on map. + + Awesome only does it on user-initiated moves as far as I can tell. + + Your raise workaround only fixes compiz/Unity. With that all "modern" + window managers are covered. Trying to Hide/Show on windowed resize + (UnMap/Map) fixes both Unity and WindowMaker, but introduces subtle + problems with transitioning from Windowed to Fullscreen on Unity. Since + some window moves happen after the transitions to fullscreen, that forces + SDL to fall from windowed to fullscreen repeatedly and it sometimes leaves + itself in a state where the fullscreen window is slightly offset by what + used to be the window decoration titlebar. + */ + XRaiseWindow(display, data->xwindow); } else { XResizeWindow(display, data->xwindow, window->w, window->h); }