Index: ash/wm/system_modal_container_layout_manager.cc |
diff --git a/ash/wm/system_modal_container_layout_manager.cc b/ash/wm/system_modal_container_layout_manager.cc |
index 3cad5879d76b48e8f821bf985f6c240989964e69..c0fda1460e26c28d3fcb474bd2ccfcd54888bf56 100644 |
--- a/ash/wm/system_modal_container_layout_manager.cc |
+++ b/ash/wm/system_modal_container_layout_manager.cc |
@@ -122,22 +122,14 @@ void SystemModalContainerLayoutManager::OnWindowPropertyChanged( |
} |
//////////////////////////////////////////////////////////////////////////////// |
-// SystemModalContainerLayoutManager, ui::LayerAnimationObserver implementation: |
+// SystemModalContainerLayoutManager, |
+// ui::ImplicitAnimationObserver implementation: |
-void SystemModalContainerLayoutManager::OnLayerAnimationEnded( |
- const ui::LayerAnimationSequence* sequence) { |
+void SystemModalContainerLayoutManager::OnImplicitAnimationsCompleted() { |
if (modal_screen_ && !modal_screen_->GetNativeView()->layer()->ShouldDraw()) |
DestroyModalScreen(); |
} |
-void SystemModalContainerLayoutManager::OnLayerAnimationAborted( |
- const ui::LayerAnimationSequence* sequence) { |
-} |
- |
-void SystemModalContainerLayoutManager::OnLayerAnimationScheduled( |
- const ui::LayerAnimationSequence* sequence) { |
-} |
- |
//////////////////////////////////////////////////////////////////////////////// |
// SystemModalContainerLayoutManager, |
// SystemModalContainerEventFilter::Delegate implementation: |
@@ -186,27 +178,33 @@ void SystemModalContainerLayoutManager::CreateModalScreen() { |
"SystemModalContainerLayoutManager.ModalScreen"); |
modal_screen_->SetContentsView(new ScreenView); |
modal_screen_->GetNativeView()->layer()->SetOpacity(0.0f); |
- modal_screen_->GetNativeView()->layer()->GetAnimator()->AddObserver(this); |
Shell::GetInstance()->AddRootWindowEventFilter(modality_filter_.get()); |
+ StopObservingImplicitAnimations(); |
+ |
ui::ScopedLayerAnimationSettings settings( |
modal_screen_->GetNativeView()->layer()->GetAnimator()); |
+ settings.AddObserver(this); |
modal_screen_->Show(); |
modal_screen_->GetNativeView()->layer()->SetOpacity(0.5f); |
container_->StackChildAtTop(modal_screen_->GetNativeView()); |
} |
void SystemModalContainerLayoutManager::DestroyModalScreen() { |
- modal_screen_->GetNativeView()->layer()->GetAnimator()->RemoveObserver(this); |
+ // Stop observing the modal screen's animations. |
+ StopObservingImplicitAnimations(); |
modal_screen_->Close(); |
modal_screen_ = NULL; |
} |
void SystemModalContainerLayoutManager::HideModalScreen() { |
+ StopObservingImplicitAnimations(); |
+ |
Shell::GetInstance()->RemoveRootWindowEventFilter(modality_filter_.get()); |
ui::ScopedLayerAnimationSettings settings( |
modal_screen_->GetNativeView()->layer()->GetAnimator()); |
+ settings.AddObserver(this); |
modal_screen_->GetNativeView()->layer()->SetOpacity(0.0f); |
} |