diff options
| author | Yuqian Yang <crupest@crupest.life> | 2025-12-07 20:26:38 +0800 |
|---|---|---|
| committer | Yuqian Yang <crupest@crupest.life> | 2025-12-07 20:26:38 +0800 |
| commit | b3b68c704926b71afc923f392b0cc91107717112 (patch) | |
| tree | 36433a01478c4edbf1ab6554ddb3d736578847a2 /src/platform/gui/sdl/Window.cpp | |
| parent | 358fbb2e02071b8c038e44bd3c45204a52272550 (diff) | |
| download | cru-b3b68c704926b71afc923f392b0cc91107717112.tar.gz cru-b3b68c704926b71afc923f392b0cc91107717112.tar.bz2 cru-b3b68c704926b71afc923f392b0cc91107717112.zip | |
Clean destroyed sdl window early.
Diffstat (limited to 'src/platform/gui/sdl/Window.cpp')
| -rw-r--r-- | src/platform/gui/sdl/Window.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
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: { |
