summaryrefslogtreecommitdiff
path: root/src/gui/widgets/windowcontainer.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2018-02-12 03:40:01 +0300
committerAndrei Karas <akaras@inbox.ru>2018-02-12 19:17:06 +0300
commit0a47f5c44ddd5fb5157d116ffe0f5ee5f4207eb0 (patch)
treee726c4c04bef0639aaee1bc4d903f94e7ce728c1 /src/gui/widgets/windowcontainer.cpp
parent0e1d656e85e1bbc80e9e8adcfb2c07a8bc0d4bb8 (diff)
downloadplus-0a47f5c44ddd5fb5157d116ffe0f5ee5f4207eb0.tar.gz
plus-0a47f5c44ddd5fb5157d116ffe0f5ee5f4207eb0.tar.bz2
plus-0a47f5c44ddd5fb5157d116ffe0f5ee5f4207eb0.tar.xz
plus-0a47f5c44ddd5fb5157d116ffe0f5ee5f4207eb0.zip
Dont allow add same window into delete list more than once.
Diffstat (limited to 'src/gui/widgets/windowcontainer.cpp')
-rw-r--r--src/gui/widgets/windowcontainer.cpp18
1 files changed, 16 insertions, 2 deletions
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<void*>(widget));
+ }
}
void WindowContainer::adjustAfterResize(const int oldScreenWidth,