From 7d0831143cebac79628c8300ea69e32958baa6d7 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sun, 26 Jul 2020 15:58:53 -0500 Subject: [PATCH] Captures secondary window close events so secondary windows can be closed via hitting the x on the window itself. --- Engine/source/windowManager/sdl/sdlWindow.cpp | 19 ++++++++++++++----- Engine/source/windowManager/sdl/sdlWindow.h | 3 +++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Engine/source/windowManager/sdl/sdlWindow.cpp b/Engine/source/windowManager/sdl/sdlWindow.cpp index 2afd2054b..e863c730f 100644 --- a/Engine/source/windowManager/sdl/sdlWindow.cpp +++ b/Engine/source/windowManager/sdl/sdlWindow.cpp @@ -101,7 +101,8 @@ mPosition(0,0), mMouseLocked(false), mShouldLockMouse(false), mSuppressReset(false), -mMenuHandle(NULL) +mMenuHandle(NULL), +mClosing(false) { mCursorController = new PlatformCursorControllerSDL( this ); @@ -583,8 +584,10 @@ void PlatformWindowSDL::_processSDLEvent(SDL_Event &evt) case SDL_WINDOWEVENT: { - switch( evt.window.event ) + if (!mClosing) { + switch (evt.window.event) + { case SDL_WINDOWEVENT_FOCUS_GAINED: appEvent.trigger(getWindowId(), GainFocus); break; @@ -595,15 +598,21 @@ void PlatformWindowSDL::_processSDLEvent(SDL_Event &evt) case SDL_WINDOWEVENT_RESIZED: { int width, height; - SDL_GetWindowSize( mWindowHandle, &width, &height ); - mVideoMode.resolution.set( width, height ); + SDL_GetWindowSize(mWindowHandle, &width, &height); + mVideoMode.resolution.set(width, height); getGFXTarget()->resetMode(); resizeEvent.trigger(getWindowId(), width, height); break; } + case SDL_WINDOWEVENT_CLOSE: + { + appEvent.trigger(getWindowId(), WindowClose); + mClosing = true; + } default: break; + } } } } @@ -648,4 +657,4 @@ void PlatformWindowSDL::setKeyboardTranslation(const bool enabled) mOwningManager->updateSDLTextInputState(PlatformWindowManagerSDL::KeyboardInputState::TEXT_INPUT); else mOwningManager->updateSDLTextInputState(PlatformWindowManagerSDL::KeyboardInputState::RAW_INPUT); -} \ No newline at end of file +} diff --git a/Engine/source/windowManager/sdl/sdlWindow.h b/Engine/source/windowManager/sdl/sdlWindow.h index cbc1b8cdf..f96f2d1bf 100644 --- a/Engine/source/windowManager/sdl/sdlWindow.h +++ b/Engine/source/windowManager/sdl/sdlWindow.h @@ -87,6 +87,9 @@ private: /// Menu associated with this window. This is a passive property of the window and is not required to be used at all. void* mMenuHandle; + /// Indicates if the window is being closed. This allows us to safely ignore other events like focus being gained or losed after cleanup has begun + bool mClosing; + /// @} void _processSDLEvent(SDL_Event &evt);