Index: ash/desktop_background/desktop_background_controller.cc |
=================================================================== |
--- ash/desktop_background/desktop_background_controller.cc (revision 151397) |
+++ ash/desktop_background/desktop_background_controller.cc (working copy) |
@@ -106,6 +106,7 @@ |
desktop_background_mode_(BACKGROUND_SOLID_COLOR), |
background_color_(kTransparentColor), |
weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
+ InstallComponentForAllWindows(); |
} |
DesktopBackgroundController::~DesktopBackgroundController() { |
@@ -212,9 +213,22 @@ |
void DesktopBackgroundController::SetDesktopBackgroundSolidColorMode( |
SkColor color) { |
background_color_ = color; |
- desktop_background_mode_ = BACKGROUND_SOLID_COLOR; |
+ if (desktop_background_mode_ != BACKGROUND_SOLID_COLOR) { |
+ desktop_background_mode_ = BACKGROUND_SOLID_COLOR; |
+ InstallComponentForAllWindows(); |
+ return; |
+ } |
- InstallComponentForAllWindows(); |
+ Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
+ for (Shell::RootWindowList::iterator iter = root_windows.begin(); |
+ iter != root_windows.end(); ++iter) { |
+ aura::RootWindow* root_window = *iter; |
+ internal::DesktopBackgroundWidgetController* component = root_window-> |
+ GetProperty(internal::kWindowDesktopComponent); |
+ DCHECK(component); |
+ DCHECK(component->layer()); |
+ component->layer()->SetColor(background_color_ ); |
+ } |
} |
void DesktopBackgroundController::CreateEmptyWallpaper() { |
@@ -241,13 +255,28 @@ |
void DesktopBackgroundController::OnWindowDestroying(aura::Window* window) { |
window->SetProperty(internal::kWindowDesktopComponent, |
static_cast<internal::DesktopBackgroundWidgetController*>(NULL)); |
- window->SetProperty(internal::kComponentWrapper, |
- static_cast<internal::ComponentWrapper*>(NULL)); |
} |
void DesktopBackgroundController::SetDesktopBackgroundImageMode() { |
- desktop_background_mode_ = BACKGROUND_IMAGE; |
- InstallComponentForAllWindows(); |
+ if (desktop_background_mode_ != BACKGROUND_IMAGE) { |
+ desktop_background_mode_ = BACKGROUND_IMAGE; |
+ InstallComponentForAllWindows(); |
+ return; |
+ } |
+ |
+ Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
+ for (Shell::RootWindowList::iterator iter = root_windows.begin(); |
+ iter != root_windows.end(); ++iter) { |
+ aura::RootWindow* root_window = *iter; |
+ internal::DesktopBackgroundWidgetController* component = root_window-> |
+ GetProperty(internal::kWindowDesktopComponent); |
+ DCHECK(component); |
+ DCHECK(component->widget()); |
+ aura::Window* window = component->widget()->GetNativeView(); |
+ gfx::Rect bounds = window->bounds(); |
+ window->SchedulePaintInRect(gfx::Rect(0, 0, |
+ bounds.width(), bounds.height())); |
+ } |
} |
void DesktopBackgroundController::OnWallpaperLoadCompleted( |
@@ -299,8 +328,7 @@ |
// First time for this root window |
root_window->AddObserver(this); |
} |
- root_window->SetProperty(internal::kComponentWrapper, |
- new internal::ComponentWrapper(component)); |
+ root_window->SetProperty(internal::kWindowDesktopComponent, component); |
} |
void DesktopBackgroundController::InstallComponentForAllWindows() { |