diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c index a9f85f843..484ddf674 100644 --- a/src/video/windows/SDL_windowsevents.c +++ b/src/video/windows/SDL_windowsevents.c @@ -1310,7 +1310,10 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) /* Update the position of any child windows */ for (win = data->window->first_child; win != NULL; win = win->next_sibling) { - WIN_SetWindowPositionInternal(win, SWP_NOCOPYBITS | SWP_NOACTIVATE); + /* Don't update hidden child windows, their relative position doesn't change */ + if (!(win->flags & SDL_WINDOW_HIDDEN)) { + WIN_SetWindowPositionInternal(win, SWP_NOCOPYBITS | SWP_NOACTIVATE); + } } } break; diff --git a/src/video/windows/SDL_windowswindow.c b/src/video/windows/SDL_windowswindow.c index 5ee59bd30..dc44cebee 100644 --- a/src/video/windows/SDL_windowswindow.c +++ b/src/video/windows/SDL_windowswindow.c @@ -884,6 +884,11 @@ void WIN_ShowWindow(_THIS, SDL_Window *window) HWND hwnd; int nCmdShow; + if (window->parent) { + /* Update our position in case our parent moved while we were hidden */ + WIN_SetWindowPositionInternal(window, SWP_NOCOPYBITS | SWP_NOACTIVATE); + } + hwnd = window->driverdata->hwnd; nCmdShow = SDL_GetHintBoolean(SDL_HINT_WINDOW_NO_ACTIVATION_WHEN_SHOWN, SDL_FALSE) ? SW_SHOWNA : SW_SHOW; style = GetWindowLong(hwnd, GWL_EXSTYLE); diff --git a/src/video/x11/SDL_x11events.c b/src/video/x11/SDL_x11events.c index c3de0c798..bf226b31d 100644 --- a/src/video/x11/SDL_x11events.c +++ b/src/video/x11/SDL_x11events.c @@ -1219,7 +1219,10 @@ static void X11_DispatchEvent(_THIS, XEvent *xevent) } #endif for (w = data->window->first_child; w != NULL; w = w->next_sibling) { - X11_UpdateWindowPosition(w); + /* Don't update hidden child windows, their relative position doesn't change */ + if (!(w->flags & SDL_WINDOW_HIDDEN)) { + X11_UpdateWindowPosition(w); + } } } if (xevent->xconfigure.width != data->last_xconfigure.width || diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c index 5a4661b8f..d5750ce3e 100644 --- a/src/video/x11/SDL_x11window.c +++ b/src/video/x11/SDL_x11window.c @@ -1267,6 +1267,11 @@ void X11_ShowWindow(_THIS, SDL_Window *window) return; } + if (window->parent) { + /* Update our position in case our parent moved while we were hidden */ + X11_UpdateWindowPosition(window); + } + if (!X11_IsWindowMapped(_this, window)) { X11_XMapRaised(display, data->xwindow); /* Blocking wait for "MapNotify" event.