diff options
| -rw-r--r-- | include/cru/platform/gui/sdl/Window.h | 1 | ||||
| -rw-r--r-- | src/platform/gui/sdl/Window.cpp | 25 |
2 files changed, 19 insertions, 7 deletions
diff --git a/include/cru/platform/gui/sdl/Window.h b/include/cru/platform/gui/sdl/Window.h index 5b8b17a2..85b8e53a 100644 --- a/include/cru/platform/gui/sdl/Window.h +++ b/include/cru/platform/gui/sdl/Window.h @@ -93,6 +93,7 @@ class SdlWindow : public SdlResource, public virtual INativeWindow { private: void DoCreateWindow(); + void DoCleanWindow(); void DoUpdateClientRect(); void DoUpdateParent(); void DoUpdateStyleFlag(); diff --git a/src/platform/gui/sdl/Window.cpp b/src/platform/gui/sdl/Window.cpp index 8146a8d0..35d33172 100644 --- a/src/platform/gui/sdl/Window.cpp +++ b/src/platform/gui/sdl/Window.cpp @@ -46,6 +46,7 @@ bool SdlWindow::IsCreated() { return sdl_window_ != nullptr; } void SdlWindow::Close() { if (sdl_window_) { SDL_DestroyWindow(sdl_window_); + DoCleanWindow(); } } @@ -270,6 +271,8 @@ void SdlWindow::DoCreateWindow() { throw SdlException("Failed to get ID of created window."); } + CruLogDebug(kLogTag, "SDL window created id {}.", sdl_window_id_); + CreateEvent_.Raise(nullptr); if (!IsWayland() || sdl_is_popup_) { @@ -291,6 +294,20 @@ void SdlWindow::DoCreateWindow() { #endif } +void SdlWindow::DoCleanWindow() { + assert(sdl_window_); + + DestroyEvent_.Raise(nullptr); +#ifdef __unix + UnixOnDestroy(); +#endif + + CruLogDebug(kLogTag, "SDL window destroyed id {}.", sdl_window_id_); + + sdl_window_ = nullptr; + sdl_window_id_ = 0; +} + void SdlWindow::DoUpdateClientRect() { assert(sdl_window_); @@ -441,13 +458,7 @@ bool SdlWindow::HandleEvent(const SDL_Event* event) { return true; } case SDL_EVENT_WINDOW_DESTROYED: { - VisibilityChangeEvent_.Raise(WindowVisibilityType::Hide); - DestroyEvent_.Raise(nullptr); -#ifdef __unix - UnixOnDestroy(); -#endif - sdl_window_ = nullptr; - sdl_window_id_ = 0; + DoCleanWindow(); return true; } case SDL_EVENT_MOUSE_MOTION: { |
