Commit a03babce authored by flackr@chromium.org's avatar flackr@chromium.org

Defer preparing for overview until all overview items are initialized.

BUG=384495

Review URL: https://codereview.chromium.org/363133002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@281918 0039d316-1c4b-4281-b951-d872f2087c98
parent f3f611fb
...@@ -137,7 +137,6 @@ WindowGrid::WindowGrid(aura::Window* root_window, ...@@ -137,7 +137,6 @@ WindowGrid::WindowGrid(aura::Window* root_window,
continue; continue;
(*iter)->AddObserver(this); (*iter)->AddObserver(this);
observed_windows_.insert(*iter); observed_windows_.insert(*iter);
WindowSelectorItem* item = NULL;
if ((*iter)->type() == ui::wm::WINDOW_TYPE_PANEL && if ((*iter)->type() == ui::wm::WINDOW_TYPE_PANEL &&
wm::GetWindowState(*iter)->panel_attached()) { wm::GetWindowState(*iter)->panel_attached()) {
...@@ -148,20 +147,12 @@ WindowGrid::WindowGrid(aura::Window* root_window, ...@@ -148,20 +147,12 @@ WindowGrid::WindowGrid(aura::Window* root_window,
window_list_.push_back(panels_item); window_list_.push_back(panels_item);
} }
panels_item->AddWindow(*iter); panels_item->AddWindow(*iter);
item = panels_item;
} else { } else {
item = new WindowSelectorWindow(*iter); window_list_.push_back(new WindowSelectorWindow(*iter));
item->PrepareForOverview();
window_list_.push_back(item);
} }
} }
if (window_list_.empty()) if (window_list_.empty())
return; return;
if (panels_item)
panels_item->PrepareForOverview();
PositionWindows(true);
} }
WindowGrid::~WindowGrid() { WindowGrid::~WindowGrid() {
...@@ -171,6 +162,13 @@ WindowGrid::~WindowGrid() { ...@@ -171,6 +162,13 @@ WindowGrid::~WindowGrid() {
} }
} }
void WindowGrid::PrepareForOverview() {
for (ScopedVector<WindowSelectorItem>::iterator iter = window_list_.begin();
iter != window_list_.end(); ++iter) {
(*iter)->PrepareForOverview();
}
}
void WindowGrid::PositionWindows(bool animate) { void WindowGrid::PositionWindows(bool animate) {
CHECK(!window_list_.empty()); CHECK(!window_list_.empty());
......
...@@ -51,6 +51,10 @@ class ASH_EXPORT WindowGrid : public aura::WindowObserver { ...@@ -51,6 +51,10 @@ class ASH_EXPORT WindowGrid : public aura::WindowObserver {
WindowSelector* window_selector); WindowSelector* window_selector);
virtual ~WindowGrid(); virtual ~WindowGrid();
// Prepares the windows in this grid for overview. This will restore all
// minimized windows and ensure they are visible.
void PrepareForOverview();
// Positions all the windows in the grid. // Positions all the windows in the grid.
void PositionWindows(bool animate); void PositionWindows(bool animate);
......
...@@ -179,6 +179,15 @@ WindowSelector::WindowSelector(const WindowList& windows, ...@@ -179,6 +179,15 @@ WindowSelector::WindowSelector(const WindowList& windows,
grid_list_.push_back(grid.release()); grid_list_.push_back(grid.release());
} }
// Do not call PrepareForOverview until all items are added to window_list_ as
// we don't want to cause any window updates until all windows in overview
// are observed. See http://crbug.com/384495.
for (ScopedVector<WindowGrid>::iterator iter = grid_list_.begin();
iter != grid_list_.end(); ++iter) {
(*iter)->PrepareForOverview();
(*iter)->PositionWindows(true);
}
DCHECK(!grid_list_.empty()); DCHECK(!grid_list_.empty());
UMA_HISTOGRAM_COUNTS_100("Ash.WindowSelector.Items", num_items_); UMA_HISTOGRAM_COUNTS_100("Ash.WindowSelector.Items", num_items_);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment