Don't update hidden child windows, their relative position doesn't change
This improves performance when moving a top level window that has many hidden child windows
This commit is contained in:
@@ -1310,7 +1310,10 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
/* Update the position of any child windows */
|
/* Update the position of any child windows */
|
||||||
for (win = data->window->first_child; win != NULL; win = win->next_sibling) {
|
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;
|
} break;
|
||||||
|
|
||||||
|
|||||||
@@ -884,6 +884,11 @@ void WIN_ShowWindow(_THIS, SDL_Window *window)
|
|||||||
HWND hwnd;
|
HWND hwnd;
|
||||||
int nCmdShow;
|
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;
|
hwnd = window->driverdata->hwnd;
|
||||||
nCmdShow = SDL_GetHintBoolean(SDL_HINT_WINDOW_NO_ACTIVATION_WHEN_SHOWN, SDL_FALSE) ? SW_SHOWNA : SW_SHOW;
|
nCmdShow = SDL_GetHintBoolean(SDL_HINT_WINDOW_NO_ACTIVATION_WHEN_SHOWN, SDL_FALSE) ? SW_SHOWNA : SW_SHOW;
|
||||||
style = GetWindowLong(hwnd, GWL_EXSTYLE);
|
style = GetWindowLong(hwnd, GWL_EXSTYLE);
|
||||||
|
|||||||
@@ -1219,7 +1219,10 @@ static void X11_DispatchEvent(_THIS, XEvent *xevent)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
for (w = data->window->first_child; w != NULL; w = w->next_sibling) {
|
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 ||
|
if (xevent->xconfigure.width != data->last_xconfigure.width ||
|
||||||
|
|||||||
@@ -1267,6 +1267,11 @@ void X11_ShowWindow(_THIS, SDL_Window *window)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (window->parent) {
|
||||||
|
/* Update our position in case our parent moved while we were hidden */
|
||||||
|
X11_UpdateWindowPosition(window);
|
||||||
|
}
|
||||||
|
|
||||||
if (!X11_IsWindowMapped(_this, window)) {
|
if (!X11_IsWindowMapped(_this, window)) {
|
||||||
X11_XMapRaised(display, data->xwindow);
|
X11_XMapRaised(display, data->xwindow);
|
||||||
/* Blocking wait for "MapNotify" event.
|
/* Blocking wait for "MapNotify" event.
|
||||||
|
|||||||
Reference in New Issue
Block a user