Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / ash / wm / panels / panel_layout_manager.cc
index a19c245..bf69c2c 100644 (file)
@@ -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();