Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Poke window managers to get them to respect the resize hints.
Browse files Browse the repository at this point in the history
  • Loading branch information
slouken committed Oct 3, 2012
1 parent 35f25e6 commit 6a5d465
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/video/x11/SDL_x11window.c
Expand Up @@ -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);
}
Expand Down

0 comments on commit 6a5d465

Please sign in to comment.