Fixed crash if all displays have been disconnected

Fixes https://github.com/libsdl-org/SDL/issues/5867
This commit is contained in:
Sam Lantinga 2022-08-01 14:23:50 -07:00
parent 12aa4d5653
commit cb107bef58

View file

@ -623,24 +623,24 @@ WIN_KeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam)
static void WIN_CheckICMProfileChanged(SDL_Window* window) static void WIN_CheckICMProfileChanged(SDL_Window* window)
{ {
SDL_VideoDisplay* display = SDL_GetDisplayForWindow(window); SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
SDL_DisplayData* data = (SDL_DisplayData*)display->driverdata; SDL_DisplayData *data = display ? (SDL_DisplayData*)display->driverdata : NULL;
static WCHAR currentIcmFileName[MAX_PATH] = { '\0' };
WCHAR icmFileName[MAX_PATH];
HDC hdc;
SDL_bool succeeded;
DWORD fileNameSize = MAX_PATH;
hdc = CreateDCW(data->DeviceName, NULL, NULL, NULL); if (data) {
if (hdc) { HDC hdc = CreateDCW(data->DeviceName, NULL, NULL, NULL);
succeeded = GetICMProfileW(hdc, &fileNameSize, icmFileName); if (hdc) {
DeleteDC(hdc); static WCHAR currentIcmFileName[MAX_PATH];
if (succeeded) { WCHAR icmFileName[MAX_PATH];
DWORD fileNameSize = SDL_arraysize(icmFileName);
if (SDL_wcsncmp(currentIcmFileName, icmFileName, fileNameSize)) { if (GetICMProfileW(hdc, &fileNameSize, icmFileName)) {
SDL_wcslcpy(currentIcmFileName, icmFileName, fileNameSize); /* fileNameSize includes '\0' on return */
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_ICCPROF_CHANGED, 0, 0); fileNameSize *= sizeof(icmFileName[0]);
if (SDL_memcmp(currentIcmFileName, icmFileName, fileNameSize) != 0) {
SDL_memcpy(currentIcmFileName, icmFileName, fileNameSize);
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_ICCPROF_CHANGED, 0, 0);
}
} }
DeleteDC(hdc);
} }
} }
} }