From 968d79df7b90bcbdf9feceb31bffa2992ca82172 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Tue, 20 Sep 2022 15:44:41 +0300 Subject: [PATCH] Fix on_scene_exit called multiple times --- libs/app/source/app.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/libs/app/source/app.cpp b/libs/app/source/app.cpp index 3697a786..bf5c5476 100644 --- a/libs/app/source/app.cpp +++ b/libs/app/source/app.cpp @@ -25,6 +25,7 @@ namespace psemek::app bool running = false; bool had_initial_resize = false; + bool had_scene_exit = false; clock::time_point start_time; @@ -246,14 +247,23 @@ namespace psemek::app SDL_GL_SwapWindow(impl().window); } - impl().get_scene()->on_scene_exit(); + if (!impl().had_scene_exit) + { + impl().had_scene_exit = true; + impl().get_scene()->on_scene_exit(); + } } void app::push_scene(std::shared_ptr s) { - impl().get_scene()->on_scene_exit(); + if (!impl().had_scene_exit) + { + impl().had_scene_exit = true; + impl().get_scene()->on_scene_exit(); + } impl().had_initial_resize = false; + impl().had_scene_exit = false; impl().scene_stack.push_back(std::move(s)); impl().get_scene()->on_scene_enter(this); @@ -264,7 +274,11 @@ namespace psemek::app if (impl().scene_stack.empty()) return nullptr; - impl().get_scene()->on_scene_exit(); + if (!impl().had_scene_exit) + { + impl().had_scene_exit = true; + impl().get_scene()->on_scene_exit(); + } impl().had_initial_resize = false; auto s = std::move(impl().scene_stack.back());