summaryrefslogtreecommitdiffstats
path: root/views/desktop/desktop_window_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'views/desktop/desktop_window_manager.cc')
-rw-r--r--views/desktop/desktop_window_manager.cc14
1 files changed, 14 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,