Chromium Code Reviews| Index: athena/wm/window_manager_impl.cc |
| diff --git a/athena/wm/window_manager_impl.cc b/athena/wm/window_manager_impl.cc |
| index bd93b2350cbca65bc48af2ab0addf40162dae5b7..ecf5bcc820ab11262d3d5a8f8175a752da560113 100644 |
| --- a/athena/wm/window_manager_impl.cc |
| +++ b/athena/wm/window_manager_impl.cc |
| @@ -193,7 +193,11 @@ void WindowManagerImpl::SetInOverview(bool active) { |
| container_.get(), window_list_provider_.get(), |
| split_view_controller_.get(), this); |
| } else { |
| - overview_.reset(); |
| + // Deleting the WindowOverviewMode object may call back to SetInOverview(). |
| + // Clear |overview_| first, then delete the object. |
| + WindowOverviewMode* to_delete = overview_.release(); |
| + delete to_delete; |
| + |
| FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnOverviewModeExit()); |
| } |
| } |
| @@ -221,13 +225,29 @@ void WindowManagerImpl::ToggleSplitViewForTest() { |
| ToggleSplitview(); |
| } |
| -void WindowManagerImpl::OnSelectWindow(aura::Window* window) { |
| +void WindowManagerImpl::OnSelectWindow(aura::Window* window, |
| + SplitType split_type) { |
| + SetInOverview(false); |
| + window->layer()->SetOpacity(1.0f); |
| + window->Show(); |
| + wm::ActivateWindow(window); |
| + |
| + if (split_type != SPLIT_NONE) { |
| + FOR_EACH_OBSERVER(WindowManagerObserver, |
| + observers_, |
| + OnSplitViewModeEnter()); |
| + if (split_type == SPLIT_LEFT) |
| + split_view_controller_->ActivateSplitMode(window, NULL); |
| + else |
| + split_view_controller_->ActivateSplitMode(NULL, window); |
| + return; |
| + } |
| + |
| if (split_view_controller_->IsSplitViewModeActive()) { |
| split_view_controller_->DeactivateSplitMode(); |
|
pkotwicz
2014/09/05 22:02:07
This ends up hiding the windows in split view imme
|
| FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnSplitViewModeExit()); |
| } |
| - wm::ActivateWindow(window); |
| - SetInOverview(false); |
| + |
| // If |window| does not have the size of the work-area, then make sure it is |
| // resized. |
| const gfx::Size work_area = |
| @@ -240,7 +260,6 @@ void WindowManagerImpl::OnSelectWindow(aura::Window* window) { |
| desired_bounds.y() - window_bounds.y()); |
| transform.Scale(desired_bounds.width() / window_bounds.width(), |
| desired_bounds.height() / window_bounds.height()); |
| - window->layer()->GetAnimator()->AbortAllAnimations(); |
| ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator()); |
| settings.SetPreemptionStrategy( |
| ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); |
| @@ -253,13 +272,6 @@ void WindowManagerImpl::OnSelectWindow(aura::Window* window) { |
| } |
| } |
| -void WindowManagerImpl::OnSplitViewMode(aura::Window* left, |
| - aura::Window* right) { |
| - SetInOverview(false); |
| - FOR_EACH_OBSERVER(WindowManagerObserver, observers_, OnSplitViewModeEnter()); |
| - split_view_controller_->ActivateSplitMode(left, right); |
| -} |
| - |
| void WindowManagerImpl::OnWindowAdded(aura::Window* new_window) { |
| // TODO(oshima): Creating a new window should updates the ovewview mode |
| // instead of exitting. |