Poke window managers to get them to respect the resize hints.
This commit is contained in:
parent
39f2156ead
commit
670eb787d6
1 changed files with 30 additions and 0 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue