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

Commit

Permalink
Fix SDL_SetWindowSize on certain WMs.
Browse files Browse the repository at this point in the history
Makes SDL_SetWindowSize work on some WMs (like Fluxbox, ion3, Awesome,
WindowMaker), and when running without a WM.

Fixes bug 1513.
CR: saml
  • Loading branch information
jorgenpt committed Feb 19, 2013
1 parent c8405f1 commit cd76821
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 27 deletions.
Binary file not shown.
Binary file not shown.
Binary file not shown.
45 changes: 18 additions & 27 deletions src/video/x11/SDL_x11window.c
Expand Up @@ -768,37 +768,28 @@ X11_SetWindowSize(_THIS, SDL_Window * window)
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.
*/
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.
Some of them resize only after:
- A user-initiated move or resize
- A code-initiated move or resize
- Hiding & showing window (Unmap & map)
The following move & resize seems to help a lot of WMs that didn't
properly update after the hints were changed. We don't do a
hide/show, because there are supposedly subtle problems with doing so
and transitioning from windowed to fullscreen in Unity.
*/
XResizeWindow(display, data->xwindow, window->w, window->h);
XMoveWindow(display, data->xwindow, window->x, window->y);
XRaiseWindow(display, data->xwindow);
} else {
XResizeWindow(display, data->xwindow, window->w, window->h);
}

XFlush(display);
}

Expand Down

0 comments on commit cd76821

Please sign in to comment.