Fix SDL_SetWindowSize on certain WMs.
Makes SDL_SetWindowSize work on some WMs (like Fluxbox, ion3, Awesome, WindowMaker), and when running without a WM. Fixes bug 1513. CR: saml
This commit is contained in:
parent
72ec6bcbe2
commit
6e147b2087
4 changed files with 16 additions and 25 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -768,37 +768,28 @@ X11_SetWindowSize(_THIS, SDL_Window * window)
|
||||||
XFree(sizehints);
|
XFree(sizehints);
|
||||||
|
|
||||||
/* From Pierre-Loup:
|
/* From Pierre-Loup:
|
||||||
For the windowed resize problem; WMs each have their little quirks with
|
WMs each have their little quirks with that. When you change the
|
||||||
that. When you change the size hints, they get a ConfigureNotify event
|
size hints, they get a ConfigureNotify event with the
|
||||||
with the WM_NORMAL_SIZE_HINTS Atom. They all save the hints then, but
|
WM_NORMAL_SIZE_HINTS Atom. They all save the hints then, but they
|
||||||
they don't all resize the window right away to enforce the new hints.
|
don't all resize the window right away to enforce the new hints.
|
||||||
Those who do properly do it are:
|
|
||||||
|
|
||||||
- XFWM
|
Some of them resize only after:
|
||||||
- metacity
|
- A user-initiated move or resize
|
||||||
- KWin
|
- A code-initiated move or resize
|
||||||
|
- Hiding & showing window (Unmap & map)
|
||||||
|
|
||||||
These are great. Now, others are more problematic as you could observe
|
The following move & resize seems to help a lot of WMs that didn't
|
||||||
first hand. Compiz/Unity only falls into the code that does it on select
|
properly update after the hints were changed. We don't do a
|
||||||
actions, such as window move, raise, map, etc.
|
hide/show, because there are supposedly subtle problems with doing so
|
||||||
|
and transitioning from windowed to fullscreen in Unity.
|
||||||
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.
|
|
||||||
*/
|
*/
|
||||||
|
XResizeWindow(display, data->xwindow, window->w, window->h);
|
||||||
|
XMoveWindow(display, data->xwindow, window->x, window->y);
|
||||||
XRaiseWindow(display, data->xwindow);
|
XRaiseWindow(display, data->xwindow);
|
||||||
} else {
|
} else {
|
||||||
XResizeWindow(display, data->xwindow, window->w, window->h);
|
XResizeWindow(display, data->xwindow, window->w, window->h);
|
||||||
}
|
}
|
||||||
|
|
||||||
XFlush(display);
|
XFlush(display);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue