From 0a78a0992fba6dcfc777afb108a42d9a1b94eb98 Mon Sep 17 00:00:00 2001 From: krogoway Date: Thu, 27 Jan 2011 15:58:30 -0600 Subject: [PATCH] When the last window is closed and the SDL_WINDOWEVENT_CLOSE event is sent, send the SDL_QUIT event. Common.c now destroys the SDL_Window upon a SDL_WINDOWEVENT_CLOSE event to ensure that all windows get closed properly and the new code to handle the last window closes gets executed. --- src/events/SDL_windowevents.c | 8 ++++++++ test/common.c | 7 ++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/events/SDL_windowevents.c b/src/events/SDL_windowevents.c index ff92e82dd..fa34034a2 100644 --- a/src/events/SDL_windowevents.c +++ b/src/events/SDL_windowevents.c @@ -176,6 +176,14 @@ SDL_SendWindowEvent(SDL_Window * window, Uint8 windowevent, int data1, posted = (SDL_PushEvent(&event) > 0); } + + if (windowevent == SDL_WINDOWEVENT_CLOSE) { + if ( !window->prev && !window->next ) { + // This is the last window in the list so send the SDL_QUIT event + SDL_SendQuit(); + } + } + return (posted); } diff --git a/test/common.c b/test/common.c index 167694420..7b48a644f 100644 --- a/test/common.c +++ b/test/common.c @@ -1038,7 +1038,12 @@ CommonEvent(CommonState * state, SDL_Event * event, int *done) case SDL_WINDOWEVENT: switch (event->window.event) { case SDL_WINDOWEVENT_CLOSE: - *done = 1; + { + SDL_Window *pWindow = SDL_GetWindowFromID(event->window.windowID); + if ( pWindow ) { + SDL_DestroyWindow( pWindow ); + } + } break; } break;