diff --git a/src/events/SDL_windowevents.c b/src/events/SDL_windowevents.c index fb66714f93..0273b2c61f 100644 --- a/src/events/SDL_windowevents.c +++ b/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 */ } diff --git a/src/test/SDL_test_common.c b/src/test/SDL_test_common.c index 84f2a1c6ca..791c5b4c38 100644 --- a/src/test/SDL_test_common.c +++ b/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);