diff --git a/src/gui/core/event/handler.cpp b/src/gui/core/event/handler.cpp index 0298f519f7e6..bf3cd89e0c7a 100644 --- a/src/gui/core/event/handler.cpp +++ b/src/gui/core/event/handler.cpp @@ -1022,6 +1022,16 @@ std::ostream& operator<<(std::ostream& stream, const ui_event event) std::vector open_window_stack {}; +void remove_from_window_stack(window* window) +{ + for(auto iter = open_window_stack.rbegin(); iter != open_window_stack.rend(); ++iter) { + if(*iter == window) { + open_window_stack.erase(std::next(iter).base()); + break; + } + } +} + bool is_in_dialog() { return !open_window_stack.empty(); diff --git a/src/gui/core/event/handler.hpp b/src/gui/core/event/handler.hpp index c0be440993c2..d41794dab997 100644 --- a/src/gui/core/event/handler.hpp +++ b/src/gui/core/event/handler.hpp @@ -297,6 +297,9 @@ std::ostream& operator<<(std::ostream& stream, const ui_event event); */ extern std::vector open_window_stack; +/** Removes a entry from the open_window_stack list. This should be used instead of pop_back. */ +void remove_from_window_stack(window* window); + /** * Is a dialog open? * diff --git a/src/gui/dialogs/modal_dialog.cpp b/src/gui/dialogs/modal_dialog.cpp index 73f7cee51725..5edcbf93a127 100644 --- a/src/gui/dialogs/modal_dialog.cpp +++ b/src/gui/dialogs/modal_dialog.cpp @@ -69,7 +69,7 @@ bool modal_dialog::show(CVideo& video, const unsigned auto_close_time) retval_ = window->show(restore_, auto_close_time); - open_window_stack.pop_back(); + remove_from_window_stack(window.get()); /* * It can happen that when two clicks follow each other fast that the event