SDL: Only check to see if the ICC profile changes when the display changes or we gain focus (d1dcb)

From d1dcbfe9e99777a328f3d5c1e17eb14f1c9363e9 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Mon, 10 Oct 2022 08:27:42 -0700
Subject: [PATCH] Only check to see if the ICC profile changes when the display
 changes or we gain focus

Fixes https://github.com/libsdl-org/SDL/issues/6366
(cherry-picked from commit 61b5360e17107c13749eba8be83f31695e5632cf)
---
 src/video/windows/SDL_windowsevents.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c
index 60a563e18900..aaf711ebab60 100644
--- a/src/video/windows/SDL_windowsevents.c
+++ b/src/video/windows/SDL_windowsevents.c
@@ -445,6 +445,7 @@ WIN_UpdateFocus(SDL_Window *window, SDL_bool expect_focus)
         SDL_ToggleModState(KMOD_NUM, (GetKeyState(VK_NUMLOCK) & 0x0001) != 0);
         SDL_ToggleModState(KMOD_SCROLL, (GetKeyState(VK_SCROLL) & 0x0001) != 0);
 
+        WIN_UpdateWindowICCProfile(data->window, SDL_TRUE);
     } else {
         RECT rect;
 
@@ -693,7 +694,6 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
                actually being the foreground window, but this appears to get called in all cases where
                the global foreground window changes to and from this window. */
             WIN_UpdateFocus(data->window, !!wParam);
-            WIN_UpdateWindowICCProfile(data->window, SDL_TRUE);
         }
         break;
 
@@ -1163,6 +1163,7 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
             RECT rect;
             int x, y;
             int w, h;
+            int display_index = data->window->display_index;
 
             if (data->initializing || data->in_border_change) {
                 break;
@@ -1203,7 +1204,10 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
             /* Forces a WM_PAINT event */
             InvalidateRect(hwnd, NULL, FALSE);
 
-            WIN_UpdateWindowICCProfile(data->window, SDL_TRUE);
+            if (data->window->display_index != display_index) {
+                /* Display changed, check ICC profile */
+                WIN_UpdateWindowICCProfile(data->window, SDL_TRUE);
+            }
         }
         break;