summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/guichan/include/guichan/widget.hpp3
-rw-r--r--src/guichan/widget.cpp15
2 files changed, 8 insertions, 10 deletions
diff --git a/src/guichan/include/guichan/widget.hpp b/src/guichan/include/guichan/widget.hpp
index 0f8c803ca..ccb56ea70 100644
--- a/src/guichan/include/guichan/widget.hpp
+++ b/src/guichan/include/guichan/widget.hpp
@@ -45,6 +45,7 @@
#define GCN_WIDGET_HPP
#include <list>
+#include <set>
#include <string>
#include "guichan/color.hpp"
@@ -1196,6 +1197,8 @@ namespace gcn
* Holds a list of all instances of widgets.
*/
static std::list<Widget*> mWidgets;
+
+ static std::set<Widget*> mWidgetsSet;
};
}
diff --git a/src/guichan/widget.cpp b/src/guichan/widget.cpp
index e143e4a97..8ec3a8178 100644
--- a/src/guichan/widget.cpp
+++ b/src/guichan/widget.cpp
@@ -69,6 +69,7 @@ namespace gcn
Font* Widget::mGlobalFont = NULL;
DefaultFont Widget::mDefaultFont;
std::list<Widget*> Widget::mWidgets;
+ std::set<Widget*> Widget::mWidgetsSet;
Widget::Widget() :
mForegroundColor(0x000000),
@@ -87,6 +88,7 @@ namespace gcn
mCurrentFont(NULL)
{
mWidgets.push_back(this);
+ mWidgetsSet.insert(this);
}
Widget::~Widget()
@@ -104,6 +106,7 @@ namespace gcn
_setFocusHandler(NULL);
mWidgets.remove(this);
+ mWidgetsSet.erase(this);
}
void Widget::drawFrame(Graphics* graphics)
@@ -482,16 +485,8 @@ namespace gcn
bool Widget::widgetExists(const Widget* widget)
{
- bool result = false;
-
- std::list<Widget*>::iterator iter;
- for (iter = mWidgets.begin(); iter != mWidgets.end(); ++iter)
- {
- if (*iter == widget)
- return true;
- }
-
- return result;
+ return mWidgetsSet.find(const_cast<Widget*>(widget))
+ != mWidgetsSet.end();
}
bool Widget::isTabInEnabled() const