| Index: ash/desktop_background/desktop_background_view.cc
|
| diff --git a/ash/desktop_background/desktop_background_view.cc b/ash/desktop_background/desktop_background_view.cc
|
| index 28a7a0c950a03b178c8eb942e8244d83dfcceb8f..f0f9a5e06c78ad709d491fe7ae21bdd07a0f34a4 100644
|
| --- a/ash/desktop_background/desktop_background_view.cc
|
| +++ b/ash/desktop_background/desktop_background_view.cc
|
| @@ -8,6 +8,7 @@
|
|
|
| #include "ash/ash_export.h"
|
| #include "ash/desktop_background/desktop_background_controller.h"
|
| +#include "ash/desktop_background/desktop_background_widget_controller.h"
|
| #include "ash/shell.h"
|
| #include "ash/shell_window_ids.h"
|
| #include "ash/wm/window_animations.h"
|
| @@ -43,8 +44,14 @@ class ShowWallpaperAnimationObserver : public ui::ImplicitAnimationObserver {
|
| private:
|
| // Overridden from ui::ImplicitAnimationObserver:
|
| virtual void OnImplicitAnimationsCompleted() OVERRIDE {
|
| - ash::Shell::GetInstance()->
|
| - user_wallpaper_delegate()->OnWallpaperAnimationFinished();
|
| + ash::Shell* shell = ash::Shell::GetInstance();
|
| + shell->user_wallpaper_delegate()->OnWallpaperAnimationFinished();
|
| + // Only removes old component when wallpaper animation finished. If we
|
| + // remove the old one too early, there will be a white flash during
|
| + // animation.
|
| + internal::DesktopBackgroundWidgetController* component =
|
| + root_window_->GetProperty(kComponentWrapper)->component();
|
| + root_window_->SetProperty(kWindowDesktopComponent, component);
|
|
|
| MessageLoop::current()->DeleteSoon(FROM_HERE, this);
|
| }
|
| @@ -153,8 +160,17 @@ views::Widget* CreateDesktopBackground(aura::RootWindow* root_window,
|
| ash::Shell::GetInstance()->user_wallpaper_delegate()->GetAnimationType();
|
| ash::SetWindowVisibilityAnimationType(desktop_widget->GetNativeView(),
|
| animation_type);
|
| - ash::SetWindowVisibilityAnimationTransition(desktop_widget->GetNativeView(),
|
| - ash::ANIMATE_SHOW);
|
| + // Disable animation when creating the first widget. Otherwise, wallpaper
|
| + // will animate from a white screen. Note that boot animation is different.
|
| + // It animates from a white background.
|
| + if (animation_type == ash::WINDOW_VISIBILITY_ANIMATION_TYPE_FADE &&
|
| + NULL == root_window->GetProperty(internal::kWindowDesktopComponent)) {
|
| + ash::SetWindowVisibilityAnimationTransition(desktop_widget->GetNativeView(),
|
| + ash::ANIMATE_NONE);
|
| + } else {
|
| + ash::SetWindowVisibilityAnimationTransition(desktop_widget->GetNativeView(),
|
| + ash::ANIMATE_SHOW);
|
| + }
|
| desktop_widget->SetBounds(params.parent->bounds());
|
| ui::ScopedLayerAnimationSettings settings(
|
| desktop_widget->GetNativeView()->layer()->GetAnimator());
|
|
|