aboutsummaryrefslogtreecommitdiff
path: root/src/platform/gui/sdl/Window.cpp
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-12-07 20:26:38 +0800
committerYuqian Yang <crupest@crupest.life>2025-12-07 20:26:38 +0800
commitb3b68c704926b71afc923f392b0cc91107717112 (patch)
tree36433a01478c4edbf1ab6554ddb3d736578847a2 /src/platform/gui/sdl/Window.cpp
parent358fbb2e02071b8c038e44bd3c45204a52272550 (diff)
downloadcru-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.cpp25
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: {