Fix win32 windows with WS_EX_COMPOSITED style continuing to receive WM_PAINT messages after ValidateRect

- Composited windows seem to need to actually paint (or appear to paint) through calls to Begin/EndPaint to properly validate
  their update region. If not done they will continue to receive WM_PAINT messages for the same region.
main
Sam Lantinga 2023-04-07 06:20:28 -07:00
parent 17bdea7a91
commit 05b701f12e
1 changed files with 10 additions and 0 deletions

View File

@ -1358,6 +1358,16 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{ {
RECT rect; RECT rect;
if (GetUpdateRect(hwnd, &rect, FALSE)) { if (GetUpdateRect(hwnd, &rect, FALSE)) {
const LONG style = GetWindowLong(hwnd, GWL_EXSTYLE);
/* Composited windows will continue to receive WM_PAINT messages for update
regions until the window is actually painted through Begin/EndPaint */
if (style & WS_EX_COMPOSITED) {
PAINTSTRUCT ps;
BeginPaint(hwnd, &ps);
EndPaint(hwnd, &ps);
}
ValidateRect(hwnd, NULL); ValidateRect(hwnd, NULL);
SDL_SendWindowEvent(data->window, SDL_EVENT_WINDOW_EXPOSED, 0, 0); SDL_SendWindowEvent(data->window, SDL_EVENT_WINDOW_EXPOSED, 0, 0);
} }