Chromium Code Reviews| Index: ash/wm/overview/window_grid.cc |
| diff --git a/ash/wm/overview/window_grid.cc b/ash/wm/overview/window_grid.cc |
| index 3b27667d7821785128963dc6874bbdab19d6e966..20aabd3f28018fdaa8f1f26bbaf165196d0d487d 100644 |
| --- a/ash/wm/overview/window_grid.cc |
| +++ b/ash/wm/overview/window_grid.cc |
| @@ -260,14 +260,16 @@ bool IsMinimizedStateType(wm::WindowStateType type) { |
| WindowGrid::WindowGrid(aura::Window* root_window, |
| const std::vector<aura::Window*>& windows, |
| - WindowSelector* window_selector) |
| + WindowSelector* window_selector, |
| + const gfx::Rect& bounds_in_screen) |
| : root_window_(root_window), |
| window_selector_(window_selector), |
| window_observer_(this), |
| window_state_observer_(this), |
| selected_index_(0), |
| num_columns_(0), |
| - prepared_for_overview_(false) { |
| + prepared_for_overview_(false), |
| + bounds_(bounds_in_screen) { |
| aura::Window::Windows windows_in_root; |
| for (auto* window : windows) { |
| if (window->GetRootWindow() == root_window) |
| @@ -329,9 +331,8 @@ void WindowGrid::PositionWindows(bool animate) { |
| aura::Window* widget_window = shield_widget_->GetNativeWindow(); |
| const gfx::Rect bounds = widget_window->parent()->bounds(); |
| widget_window->SetBounds(bounds); |
| - gfx::Rect total_bounds = ScreenUtil::GetDisplayWorkAreaBoundsInParent( |
| - root_window_->GetChildById(kShellWindowId_DefaultContainer)); |
| - ::wm::ConvertRectToScreen(root_window_, &total_bounds); |
| + |
| + gfx::Rect total_bounds = bounds_; |
| // Windows occupy vertically centered area with additional vertical insets. |
| int horizontal_inset = |
| gfx::ToFlooredInt(std::min(kOverviewInsetRatio * total_bounds.width(), |
| @@ -521,6 +522,20 @@ bool WindowGrid::Contains(const aura::Window* window) const { |
| return false; |
| } |
| +void WindowGrid::RemoveItem(WindowSelectorItem* selector_item) { |
| + auto iter = |
| + std::find_if(window_list_.begin(), window_list_.end(), |
| + [selector_item](std::unique_ptr<WindowSelectorItem>& item) { |
| + return (item.get() == selector_item); |
| + }); |
| + if (iter != window_list_.end()) { |
| + window_observer_.Remove(selector_item->GetWindow()); |
| + window_state_observer_.Remove( |
| + wm::GetWindowState(selector_item->GetWindow())); |
| + window_list_.erase(iter); |
| + } |
| +} |
| + |
| void WindowGrid::FilterItems(const base::string16& pattern) { |
| base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents finder(pattern); |
| for (const auto& window : window_list_) { |
| @@ -547,6 +562,11 @@ void WindowGrid::WindowClosing(WindowSelectorItem* window) { |
| selection_widget_->SetOpacity(0.f); |
| } |
| +void WindowGrid::SetTotalBoundsInScreen(const gfx::Rect bounds) { |
| + bounds_ = bounds; |
| + PositionWindows(true); |
|
varkha
2017/06/21 01:51:52
nit: true /* animate */
xdai1
2017/06/22 21:46:33
Done.
|
| +} |
| + |
| void WindowGrid::OnWindowDestroying(aura::Window* window) { |
| window_observer_.Remove(window); |
| window_state_observer_.Remove(wm::GetWindowState(window)); |