From 0a47f5c44ddd5fb5157d116ffe0f5ee5f4207eb0 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 12 Feb 2018 03:40:01 +0300 Subject: Dont allow add same window into delete list more than once. --- src/gui/widgets/windowcontainer.cpp | 18 ++++++++++++++++-- src/gui/widgets/windowcontainer.h | 3 +++ 2 files changed, 19 insertions(+), 2 deletions(-) (limited to 'src/gui') diff --git a/src/gui/widgets/windowcontainer.cpp b/src/gui/widgets/windowcontainer.cpp index a0e4e8dad..a275b7cb1 100644 --- a/src/gui/widgets/windowcontainer.cpp +++ b/src/gui/widgets/windowcontainer.cpp @@ -24,6 +24,7 @@ #include "gui/widgets/window.h" +#include "utils/checkutils.h" #include "utils/dtor.h" #include "utils/foreach.h" @@ -33,7 +34,8 @@ WindowContainer *windowContainer = nullptr; WindowContainer::WindowContainer(const Widget2 *const widget) : Container(widget), - mDeathList() + mDeathList(), + mDeathSet() { } @@ -41,12 +43,24 @@ void WindowContainer::slowLogic() { delete_all(mDeathList); mDeathList.clear(); + mDeathSet.clear(); } void WindowContainer::scheduleDelete(Widget *const widget) { - if (widget != nullptr) + if (widget == nullptr) + return; + + if (mDeathSet.find(widget) == mDeathSet.end()) + { mDeathList.push_back(widget); + mDeathSet.insert(widget); + } + else + { + reportAlways("double adding pointer %p for deletion in scheduleDelete", + static_cast(widget)); + } } void WindowContainer::adjustAfterResize(const int oldScreenWidth, diff --git a/src/gui/widgets/windowcontainer.h b/src/gui/widgets/windowcontainer.h index 10c96e88d..0c04849e6 100644 --- a/src/gui/widgets/windowcontainer.h +++ b/src/gui/widgets/windowcontainer.h @@ -25,6 +25,8 @@ #include "gui/widgets/container.h" +#include + /** * A window container. This container adds functionality for more convenient * widget (windows in particular) destruction. @@ -67,6 +69,7 @@ class WindowContainer notfinal : public Container typedef STD_VECTOR Widgets; typedef Widgets::iterator WidgetIterator; Widgets mDeathList; + std::set mDeathSet; }; extern WindowContainer *windowContainer; -- cgit v1.2.3-70-g09d2