Browse Source

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.
Sam Lantinga 2 years ago
parent
commit
05b701f12e
1 changed files with 10 additions and 0 deletions
  1. 10 0
      src/video/windows/SDL_windowsevents.c

+ 10 - 0
src/video/windows/SDL_windowsevents.c

@@ -1358,6 +1358,16 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
     {
         RECT rect;
         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);
             SDL_SendWindowEvent(data->window, SDL_EVENT_WINDOW_EXPOSED, 0, 0);
         }