summaryrefslogtreecommitdiffstats
path: root/views/desktop
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-12 16:26:48 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-12 16:26:48 +0000
commitae1db5c0ef02b23f7e670eee09b2d06ec978a364 (patch)
tree43fa1ec1e0b57b13b88dedade62411493569a996 /views/desktop
parent7ad40225da25437f7cf000c0848ab2102767209c (diff)
downloadchromium_src-ae1db5c0ef02b23f7e670eee09b2d06ec978a364.zip
chromium_src-ae1db5c0ef02b23f7e670eee09b2d06ec978a364.tar.gz
chromium_src-ae1db5c0ef02b23f7e670eee09b2d06ec978a364.tar.bz2
views desktop: Maintain a list of toplevel windows.
BUG=none TEST=none Review URL: http://codereview.chromium.org/7867026 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@100702 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/desktop')
-rw-r--r--views/desktop/desktop_window_manager.cc14
-rw-r--r--views/desktop/desktop_window_manager.h6
2 files changed, 20 insertions, 0 deletions
diff --git a/views/desktop/desktop_window_manager.cc b/views/desktop/desktop_window_manager.cc
index beb35c8..8dec7c8 100644
--- a/views/desktop/desktop_window_manager.cc
+++ b/views/desktop/desktop_window_manager.cc
@@ -98,6 +98,8 @@ DesktopWindowManager::DesktopWindowManager(Widget* desktop)
}
DesktopWindowManager::~DesktopWindowManager() {
+ DCHECK_EQ(0U, toplevels_.size()) << "Window manager getting destroyed "
+ << "before all the windows are closed.";
}
////////////////////////////////////////////////////////////////////////////////
@@ -199,6 +201,9 @@ bool DesktopWindowManager::HandleMouseEvent(
void DesktopWindowManager::Register(Widget* widget) {
DCHECK(!widget->HasObserver(this));
+ if (widget->is_top_level()) {
+ toplevels_.push_back(widget);
+ }
widget->AddObserver(this);
}
@@ -208,6 +213,15 @@ void DesktopWindowManager::Register(Widget* widget) {
void DesktopWindowManager::OnWidgetClosing(Widget* widget) {
if (active_widget_ && active_widget_ == widget)
active_widget_ = NULL;
+ if (widget->is_top_level()) {
+ for (std::vector<Widget*>::iterator i = toplevels_.begin();
+ i != toplevels_.end(); ++i) {
+ if (*i == widget) {
+ toplevels_.erase(i);
+ break;
+ }
+ }
+ }
}
void DesktopWindowManager::OnWidgetVisibilityChanged(Widget* widget,
diff --git a/views/desktop/desktop_window_manager.h b/views/desktop/desktop_window_manager.h
index 9f39b6d..6466816 100644
--- a/views/desktop/desktop_window_manager.h
+++ b/views/desktop/desktop_window_manager.h
@@ -10,6 +10,8 @@
#include "views/widget/widget.h"
#include "views/widget/window_manager.h"
+#include <vector>
+
namespace gfx {
class Point;
}
@@ -60,6 +62,10 @@ class DesktopWindowManager : public views::WindowManager,
views::Widget* desktop_;
views::Widget* mouse_capture_;
views::Widget* active_widget_;
+
+ // An unordered list of all the top-level Widgets.
+ std::vector<views::Widget*> toplevels_;
+
scoped_ptr<WindowController> window_controller_;
DISALLOW_COPY_AND_ASSIGN(DesktopWindowManager);