Răsfoiți Sursa

Fixed crash at shutdown on Windows

The taskbar list is invalid after OleUninitialize(), so make sure we clean it up first.

Also don't bother creating the taskbar list if we don't have any progress state
Sam Lantinga 1 an în urmă
părinte
comite
c3ce216c4d
2 a modificat fișierele cu 10 adăugiri și 6 ștergeri
  1. 6 6
      src/video/windows/SDL_windowsvideo.c
  2. 4 0
      src/video/windows/SDL_windowswindow.c

+ 6 - 6
src/video/windows/SDL_windowsvideo.c

@@ -583,12 +583,6 @@ void WIN_VideoQuit(SDL_VideoDevice *_this)
     WIN_QuitKeyboard(_this);
     WIN_QuitKeyboard(_this);
     WIN_QuitMouse(_this);
     WIN_QuitMouse(_this);
 
 
-    if (data->oleinitialized) {
-        OleUninitialize();
-        data->oleinitialized = false;
-    }
-#endif // !(defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES))
-
 #if defined(HAVE_SHOBJIDL_CORE_H)
 #if defined(HAVE_SHOBJIDL_CORE_H)
     if (data->taskbar_list) {
     if (data->taskbar_list) {
         IUnknown_Release(data->taskbar_list);
         IUnknown_Release(data->taskbar_list);
@@ -596,6 +590,12 @@ void WIN_VideoQuit(SDL_VideoDevice *_this)
     }
     }
 #endif
 #endif
 
 
+    if (data->oleinitialized) {
+        OleUninitialize();
+        data->oleinitialized = false;
+    }
+#endif // !(defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES))
+
     if (data->coinitialized) {
     if (data->coinitialized) {
         WIN_CoUninitialize();
         WIN_CoUninitialize();
         data->coinitialized = false;
         data->coinitialized = false;

+ 4 - 0
src/video/windows/SDL_windowswindow.c

@@ -2253,6 +2253,10 @@ bool WIN_ApplyWindowProgress(SDL_VideoDevice *_this, SDL_Window* window)
         return true;
         return true;
     }
     }
 
 
+    if (window->progress_state == SDL_PROGRESS_STATE_NONE && !data->videodata->taskbar_list) {
+        return true;
+    }
+
     ITaskbarList3 *taskbar_list = GetTaskbarList(window);
     ITaskbarList3 *taskbar_list = GetTaskbarList(window);
     if (!taskbar_list) {
     if (!taskbar_list) {
         return false;
         return false;