| Index: ash/shelf/shelf_layout_manager.cc
|
| diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
|
| index 0d6713b15feb21df009f6147a2b125bd33b6e8ab..887c6fc5119e88f2ddf1825cfbd0d9d324404cbc 100644
|
| --- a/ash/shelf/shelf_layout_manager.cc
|
| +++ b/ash/shelf/shelf_layout_manager.cc
|
| @@ -651,71 +651,78 @@ void ShelfLayoutManager::UpdateBoundsAndOpacity(
|
| bool animate,
|
| ui::ImplicitAnimationObserver* observer) {
|
| base::AutoReset<bool> auto_reset_updating_bounds(&updating_bounds_, true);
|
| -
|
| - ui::ScopedLayerAnimationSettings shelf_animation_setter(
|
| - GetLayer(shelf_)->GetAnimator());
|
| - ui::ScopedLayerAnimationSettings status_animation_setter(
|
| - GetLayer(shelf_->status_area_widget())->GetAnimator());
|
| - if (animate) {
|
| - int duration = duration_override_in_ms_ ? duration_override_in_ms_ :
|
| - kCrossFadeDurationMS;
|
| - shelf_animation_setter.SetTransitionDuration(
|
| - base::TimeDelta::FromMilliseconds(duration));
|
| - shelf_animation_setter.SetTweenType(gfx::Tween::EASE_OUT);
|
| - shelf_animation_setter.SetPreemptionStrategy(
|
| - ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
|
| - status_animation_setter.SetTransitionDuration(
|
| - base::TimeDelta::FromMilliseconds(duration));
|
| - status_animation_setter.SetTweenType(gfx::Tween::EASE_OUT);
|
| - status_animation_setter.SetPreemptionStrategy(
|
| - ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
|
| - } else {
|
| - StopAnimating();
|
| - shelf_animation_setter.SetTransitionDuration(base::TimeDelta());
|
| - status_animation_setter.SetTransitionDuration(base::TimeDelta());
|
| - }
|
| - if (observer)
|
| - status_animation_setter.AddObserver(observer);
|
| -
|
| - GetLayer(shelf_)->SetOpacity(target_bounds.opacity);
|
| - shelf_->SetBounds(ScreenUtil::ConvertRectToScreen(
|
| - shelf_->GetNativeView()->parent(),
|
| - target_bounds.shelf_bounds_in_root));
|
| -
|
| - GetLayer(shelf_->status_area_widget())->SetOpacity(
|
| - target_bounds.status_opacity);
|
| -
|
| - // Having a window which is visible but does not have an opacity is an illegal
|
| - // state. We therefore show / hide the shelf here if required.
|
| - if (!target_bounds.status_opacity)
|
| - shelf_->status_area_widget()->Hide();
|
| - else if (target_bounds.status_opacity)
|
| - shelf_->status_area_widget()->Show();
|
| -
|
| - // TODO(harrym): Once status area widget is a child view of shelf
|
| - // this can be simplified.
|
| - gfx::Rect status_bounds = target_bounds.status_bounds_in_shelf;
|
| - status_bounds.set_x(status_bounds.x() +
|
| - target_bounds.shelf_bounds_in_root.x());
|
| - status_bounds.set_y(status_bounds.y() +
|
| - target_bounds.shelf_bounds_in_root.y());
|
| - shelf_->status_area_widget()->SetBounds(
|
| - ScreenUtil::ConvertRectToScreen(
|
| - shelf_->status_area_widget()->GetNativeView()->parent(),
|
| - status_bounds));
|
| - SessionStateDelegate* session_state_delegate =
|
| - Shell::GetInstance()->session_state_delegate();
|
| - if (!state_.is_screen_locked) {
|
| - gfx::Insets insets;
|
| - // If user session is blocked (login to new user session or add user to
|
| - // the existing session - multi-profile) then give 100% of work area only if
|
| - // keyboard is not shown.
|
| - if (!session_state_delegate->IsUserSessionBlocked() ||
|
| - !keyboard_bounds_.IsEmpty()) {
|
| - insets = target_bounds.work_area_insets;
|
| + {
|
| + ui::ScopedLayerAnimationSettings shelf_animation_setter(
|
| + GetLayer(shelf_)->GetAnimator());
|
| + ui::ScopedLayerAnimationSettings status_animation_setter(
|
| + GetLayer(shelf_->status_area_widget())->GetAnimator());
|
| + if (animate) {
|
| + int duration = duration_override_in_ms_ ? duration_override_in_ms_ :
|
| + kCrossFadeDurationMS;
|
| + shelf_animation_setter.SetTransitionDuration(
|
| + base::TimeDelta::FromMilliseconds(duration));
|
| + shelf_animation_setter.SetTweenType(gfx::Tween::EASE_OUT);
|
| + shelf_animation_setter.SetPreemptionStrategy(
|
| + ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
|
| + status_animation_setter.SetTransitionDuration(
|
| + base::TimeDelta::FromMilliseconds(duration));
|
| + status_animation_setter.SetTweenType(gfx::Tween::EASE_OUT);
|
| + status_animation_setter.SetPreemptionStrategy(
|
| + ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
|
| + } else {
|
| + StopAnimating();
|
| + shelf_animation_setter.SetTransitionDuration(base::TimeDelta());
|
| + status_animation_setter.SetTransitionDuration(base::TimeDelta());
|
| + }
|
| + if (observer)
|
| + status_animation_setter.AddObserver(observer);
|
| +
|
| + GetLayer(shelf_)->SetOpacity(target_bounds.opacity);
|
| + shelf_->SetBounds(ScreenUtil::ConvertRectToScreen(
|
| + shelf_->GetNativeView()->parent(),
|
| + target_bounds.shelf_bounds_in_root));
|
| +
|
| + GetLayer(shelf_->status_area_widget())->SetOpacity(
|
| + target_bounds.status_opacity);
|
| +
|
| + // Having a window which is visible but does not have an opacity is an
|
| + // illegal state. We therefore hide the shelf here if required.
|
| + if (!target_bounds.status_opacity)
|
| + shelf_->status_area_widget()->Hide();
|
| + // Setting visibility during an animation causes the visibility property to
|
| + // animate. Override the animation settings to immediately set the
|
| + // visibility property. Opacity will still animate.
|
| +
|
| + // TODO(harrym): Once status area widget is a child view of shelf
|
| + // this can be simplified.
|
| + gfx::Rect status_bounds = target_bounds.status_bounds_in_shelf;
|
| + status_bounds.set_x(status_bounds.x() +
|
| + target_bounds.shelf_bounds_in_root.x());
|
| + status_bounds.set_y(status_bounds.y() +
|
| + target_bounds.shelf_bounds_in_root.y());
|
| + shelf_->status_area_widget()->SetBounds(
|
| + ScreenUtil::ConvertRectToScreen(
|
| + shelf_->status_area_widget()->GetNativeView()->parent(),
|
| + status_bounds));
|
| + SessionStateDelegate* session_state_delegate =
|
| + Shell::GetInstance()->session_state_delegate();
|
| + if (!state_.is_screen_locked) {
|
| + gfx::Insets insets;
|
| + // If user session is blocked (login to new user session or add user to
|
| + // the existing session - multi-profile) then give 100% of work area only
|
| + // if keyboard is not shown.
|
| + if (!session_state_delegate->IsUserSessionBlocked() ||
|
| + !keyboard_bounds_.IsEmpty()) {
|
| + insets = target_bounds.work_area_insets;
|
| + }
|
| + Shell::GetInstance()->SetDisplayWorkAreaInsets(root_window_, insets);
|
| }
|
| - Shell::GetInstance()->SetDisplayWorkAreaInsets(root_window_, insets);
|
| }
|
| +
|
| + // Setting visibility during an animation causes the visibility property to
|
| + // animate. Set the visibility property without an animation.
|
| + if (target_bounds.status_opacity)
|
| + shelf_->status_area_widget()->Show();
|
| }
|
|
|
| void ShelfLayoutManager::StopAnimating() {
|
|
|