| Index: ash/wm/panels/panel_layout_manager.cc
|
| diff --git a/ash/wm/panels/panel_layout_manager.cc b/ash/wm/panels/panel_layout_manager.cc
|
| index a19c24568ab7383d1f2629a73e998014ec12810a..bf69c2c06d349518f2533258192adcfcf38e40b6 100644
|
| --- a/ash/wm/panels/panel_layout_manager.cc
|
| +++ b/ash/wm/panels/panel_layout_manager.cc
|
| @@ -551,10 +551,14 @@ void PanelLayoutManager::WillChangeVisibilityState(
|
| return;
|
| scoped_ptr<aura::WindowTracker> minimized_windows(new aura::WindowTracker);
|
| for (PanelList::iterator iter = panel_windows_.begin();
|
| - iter != panel_windows_.end(); ++iter) {
|
| - if (iter->window->IsVisible()) {
|
| - minimized_windows->Add(iter->window);
|
| - wm::GetWindowState(iter->window)->Minimize();
|
| + iter != panel_windows_.end();) {
|
| + aura::Window* window = iter->window;
|
| + // Minimizing a panel window may remove it from the panel_windows_ list.
|
| + // Advance the iterator before minimizing it: http://crbug.com/393047.
|
| + ++iter;
|
| + if (window != dragged_panel_ && window->IsVisible()) {
|
| + minimized_windows->Add(window);
|
| + wm::GetWindowState(window)->Minimize();
|
| }
|
| }
|
| restore_windows_on_shelf_visible_ = minimized_windows.Pass();
|
|
|