diff options
Diffstat (limited to 'views/desktop/desktop_window_manager.cc')
-rw-r--r-- | views/desktop/desktop_window_manager.cc | 14 |
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, |