Parcourir la source

Fixed multi-window test programs not quitting when windows are closed

Sam Lantinga il y a 9 mois
Parent
commit
b37b94453c
2 fichiers modifiés avec 10 ajouts et 2 suppressions
  1. 2 2
      src/events/SDL_windowevents.c
  2. 8 0
      src/test/SDL_test_common.c

+ 2 - 2
src/events/SDL_windowevents.c

@@ -248,12 +248,12 @@ int SDL_SendWindowEvent(SDL_Window *window, SDL_EventType windowevent,
         int toplevel_count = 0;
         SDL_Window *n;
         for (n = SDL_GetVideoDevice()->windows; n; n = n->next) {
-            if (!n->parent) {
+            if (!n->parent && !(n->flags & SDL_WINDOW_HIDDEN)) {
                 ++toplevel_count;
             }
         }
 
-        if (toplevel_count == 1) {
+        if (toplevel_count <= 1) {
             if (SDL_GetHintBoolean(SDL_HINT_QUIT_ON_LAST_WINDOW_CLOSE, SDL_TRUE)) {
                 SDL_SendQuit(); /* This is the last toplevel window in the list so send the SDL_EVENT_QUIT event */
             }

+ 8 - 0
src/test/SDL_test_common.c

@@ -2095,6 +2095,14 @@ int SDLTest_CommonEventMainCallbacks(SDLTest_CommonState *state, const SDL_Event
             }
         }
         break;
+    case SDL_EVENT_WINDOW_CLOSE_REQUESTED:
+    {
+        SDL_Window *window = SDL_GetWindowFromID(event->window.windowID);
+        if (window) {
+            SDL_HideWindow(window);
+        }
+        break;
+    }
     case SDL_EVENT_KEY_DOWN:
     {
         SDL_bool withControl = !!(event->key.mod & SDL_KMOD_CTRL);