From b3b68c704926b71afc923f392b0cc91107717112 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Sun, 7 Dec 2025 20:26:38 +0800 Subject: Clean destroyed sdl window early. --- src/platform/gui/sdl/Window.cpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'src/platform/gui/sdl/Window.cpp') 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: { -- cgit v1.2.3