diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-12 16:26:48 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-12 16:26:48 +0000 |
commit | ae1db5c0ef02b23f7e670eee09b2d06ec978a364 (patch) | |
tree | 43fa1ec1e0b57b13b88dedade62411493569a996 /views/desktop | |
parent | 7ad40225da25437f7cf000c0848ab2102767209c (diff) | |
download | chromium_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.cc | 14 | ||||
-rw-r--r-- | views/desktop/desktop_window_manager.h | 6 |
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); |