diff options
-rw-r--r-- | src/guichan/include/guichan/widget.hpp | 3 | ||||
-rw-r--r-- | src/guichan/widget.cpp | 15 |
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 |