Chromium Code Reviews| Index: ash/wm/overview/window_selector_panels.cc |
| diff --git a/ash/wm/overview/window_selector_panels.cc b/ash/wm/overview/window_selector_panels.cc |
| index e936f929e31cd702e530efd0845c66b074665309..f70b015649613f19063b13b7c179956a06dabe0a 100644 |
| --- a/ash/wm/overview/window_selector_panels.cc |
| +++ b/ash/wm/overview/window_selector_panels.cc |
| @@ -92,10 +92,15 @@ WindowSelectorPanels::~WindowSelectorPanels() { |
| static_cast<PanelLayoutManager*>( |
| Shell::GetContainer(panels_root_window_, kShellWindowId_PanelContainer)-> |
| layout_manager())->SetShowCalloutWidgets(true); |
| + if (!transform_windows_.empty()) |
| + transform_windows_[0]->window()->RemoveObserver(this); |
|
flackr
2014/06/24 17:10:51
nit: For consistency use transform_windows_.front(
Nina
2014/06/24 18:36:28
Done.
|
| } |
| void WindowSelectorPanels::AddWindow(aura::Window* window) { |
| DCHECK(window->GetRootWindow() == panels_root_window_); |
| + // If this is the panel we use to get the label text, observe it for changes. |
| + if (transform_windows_.empty()) |
| + window->AddObserver(this); |
| transform_windows_.push_back(new ScopedTransformPanelWindow(window)); |
| } |
| @@ -139,6 +144,14 @@ void WindowSelectorPanels::RemoveWindow(const aura::Window* window) { |
| for (WindowList::iterator iter = transform_windows_.begin(); |
| iter != transform_windows_.end(); ++iter) { |
| if ((*iter)->window() == window) { |
| + // If this is the first window, we are observing it for label changes, |
| + // stop doing so before it is destructed. |
|
flackr
2014/06/24 17:10:51
I would also be fine with observing all of the win
Nina
2014/06/24 18:36:28
Changed the code to observe all of the transform w
|
| + if (window == transform_windows_[0]->window()) { |
| + transform_windows_[0]->window()->RemoveObserver(this); |
| + // If we still have windows after deletion, observe the next one. |
| + if (transform_windows_.size() > 1) |
| + transform_windows_[1]->window()->AddObserver(this); |
| + } |
| (*iter)->OnWindowDestroyed(); |
| transform_windows_.erase(iter); |
| break; |