mirror of https://github.com/libsdl-org/SDL.git
windows: Fix stale zoom/iconic state in WM_WINDOWPOSCHANGED handler
- IsIconic/IsZoomed must be checked after sending SDL_EVENT_WINDOW_SHOWN as that may trigger window operations if any are pending from when the window was hidden. e.g. the window may be shown, which triggers SDL_MaximizeWindow and a new WM_WINDOWPOSCHANGED where SDL_EVENT_WINDOW_MAXIMIZED is sent, then control returns to the original WM_WINDOWPOSCHANGED which would not think the window is zoomed and send SDL_EVENT_WINDOW_RESTORED.
This commit is contained in:
parent
14ae45c2b8
commit
c2ed58db7b
|
|
@ -1718,8 +1718,8 @@ LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
|
|||
SDL_Window *win;
|
||||
const SDL_DisplayID original_displayID = data->last_displayID;
|
||||
const WINDOWPOS *windowpos = (WINDOWPOS *)lParam;
|
||||
const bool iconic = IsIconic(hwnd);
|
||||
const bool zoomed = IsZoomed(hwnd);
|
||||
bool iconic;
|
||||
bool zoomed;
|
||||
RECT rect;
|
||||
int x, y;
|
||||
int w, h;
|
||||
|
|
@ -1728,6 +1728,11 @@ LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
|
|||
SDL_SendWindowEvent(data->window, SDL_EVENT_WINDOW_SHOWN, 0, 0);
|
||||
}
|
||||
|
||||
// These must be set after sending SDL_EVENT_WINDOW_SHOWN as that may apply pending
|
||||
// window operations that change the window state.
|
||||
iconic = IsIconic(hwnd);
|
||||
zoomed = IsZoomed(hwnd);
|
||||
|
||||
if (iconic) {
|
||||
SDL_SendWindowEvent(data->window, SDL_EVENT_WINDOW_MINIMIZED, 0, 0);
|
||||
} else if (zoomed) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue