aboutsummaryrefslogtreecommitdiff
path: root/src/platform/gui/sdl/UiApplication.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/platform/gui/sdl/UiApplication.cpp')
-rw-r--r--src/platform/gui/sdl/UiApplication.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/platform/gui/sdl/UiApplication.cpp b/src/platform/gui/sdl/UiApplication.cpp
index b448d8f0..c876ad19 100644
--- a/src/platform/gui/sdl/UiApplication.cpp
+++ b/src/platform/gui/sdl/UiApplication.cpp
@@ -25,6 +25,8 @@ SdlUiApplication::SdlUiApplication(graphics::IGraphicsFactory* graphics_factory,
SdlUiApplication::~SdlUiApplication() {
SDL_Quit();
+ delete_later_pool_.Clean();
+
if (release_graphics_factory_) {
delete graphics_factory_;
}
@@ -32,14 +34,12 @@ SdlUiApplication::~SdlUiApplication() {
int SdlUiApplication::Run() {
while (true) {
- auto now = std::chrono::steady_clock::now();
-
- if (auto result = timers_.Update(now)) {
+ if (auto result = timers_.Update(std::chrono::steady_clock::now())) {
result->data();
continue;
}
- auto timeout = timers_.NextTimeout(now);
+ auto timeout = timers_.NextTimeout(std::chrono::steady_clock::now());
SDL_Event event;
CheckSdlReturn(timeout ? SDL_WaitEventTimeout(&event, timeout->count())
@@ -47,6 +47,8 @@ int SdlUiApplication::Run() {
if (event.type == SDL_EVENT_QUIT) {
break;
}
+
+ delete_later_pool_.Clean();
}
for (const auto& handler : this->quit_handlers_) {
@@ -95,6 +97,10 @@ void SdlUiApplication::CancelTimer(long long id) {
return timers_.Remove(static_cast<int>(id));
}
+void SdlUiApplication::DeleteLater(Object* object) {
+ delete_later_pool_.Add(object);
+}
+
std::vector<INativeWindow*> SdlUiApplication::GetAllWindow() {
std::vector<INativeWindow*> windows(windows_.size());
std::ranges::copy(windows_, windows.begin());