Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2937)

Unified Diff: ash/desktop_background/desktop_background_controller.cc

Issue 24499002: Reload wallpaper when display configuration changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ash/desktop_background/desktop_background_controller.cc
diff --git a/ash/desktop_background/desktop_background_controller.cc b/ash/desktop_background/desktop_background_controller.cc
index b8fef380f931c62af99ed73a93260a810b3b1e64..8cdd72e212101f0b7549ad58e4e418db6c8f5fd0 100644
--- a/ash/desktop_background/desktop_background_controller.cc
+++ b/ash/desktop_background/desktop_background_controller.cc
@@ -39,6 +39,10 @@ using content::BrowserThread;
namespace ash {
namespace {
+// How long to wait reloading the wallpaper after the max display has
+// changed?
+const int kWallpaperReloadDelayMs = 2000;
+
const SkColor kTransparentColor = SkColorSetARGB(0x00, 0x00, 0x00, 0x00);
internal::RootWindowLayoutManager* GetRootWindowLayoutManager(
@@ -161,11 +165,14 @@ DesktopBackgroundController::DesktopBackgroundController()
locked_(false),
desktop_background_mode_(BACKGROUND_NONE),
current_default_wallpaper_resource_id_(-1),
- weak_ptr_factory_(this) {
+ weak_ptr_factory_(this),
+ wallpaper_reload_delay_(kWallpaperReloadDelayMs) {
+ Shell::GetInstance()->display_controller()->AddObserver(this);
}
DesktopBackgroundController::~DesktopBackgroundController() {
CancelPendingWallpaperOperation();
+ Shell::GetInstance()->display_controller()->RemoveObserver(this);
}
gfx::ImageSkia DesktopBackgroundController::GetWallpaper() const {
@@ -195,23 +202,13 @@ void DesktopBackgroundController::OnRootWindowAdded(
// The background hasn't been set yet.
if (desktop_background_mode_ == BACKGROUND_NONE)
return;
-
+ gfx::Size max_display_size = GetMaxDisplaySizeInNative();
// Handle resolution change for "built-in" images.
if (BACKGROUND_IMAGE == desktop_background_mode_ &&
- current_wallpaper_.get()) {
- gfx::Size root_window_size = root_window->GetHostSize();
- int width = current_wallpaper_->wallpaper_image().width();
- int height = current_wallpaper_->wallpaper_image().height();
- // Reloads wallpaper if current wallpaper is smaller than the new added root
- // window.
- if (width < root_window_size.width() ||
- height < root_window_size.height()) {
- current_wallpaper_.reset(NULL);
- current_default_wallpaper_path_ = base::FilePath();
- current_default_wallpaper_resource_id_ = -1;
- ash::Shell::GetInstance()->user_wallpaper_delegate()->
- UpdateWallpaper();
- }
+ current_wallpaper_.get() &&
+ current_max_display_size_ != max_display_size) {
+ current_max_display_size_ = max_display_size;
+ UpdateWallpaper();
}
InstallDesktopController(root_window);
@@ -310,6 +307,18 @@ bool DesktopBackgroundController::MoveDesktopToUnlockedContainer() {
GetBackgroundContainerId(false));
}
+void DesktopBackgroundController::OnDisplayConfigurationChanged() {
+ gfx::Size max_display_size = GetMaxDisplaySizeInNative();
+ if (current_max_display_size_ != max_display_size) {
+ current_max_display_size_ = max_display_size;
+ timer_.Stop();
+ timer_.Start(FROM_HERE,
+ base::TimeDelta::FromMilliseconds(wallpaper_reload_delay_),
+ this,
+ &DesktopBackgroundController::UpdateWallpaper);
+ }
+}
+
bool DesktopBackgroundController::DefaultWallpaperIsAlreadyLoadingOrLoaded(
const base::FilePath& image_file, int image_resource_id) const {
return (wallpaper_loader_.get() &&
@@ -375,6 +384,7 @@ void DesktopBackgroundController::InstallDesktopControllerForAllWindows() {
iter != root_windows.end(); ++iter) {
InstallDesktopController(*iter);
}
+ current_max_display_size_ = GetMaxDisplaySizeInNative();
}
bool DesktopBackgroundController::ReparentBackgroundWidgets(int src_container,
@@ -420,6 +430,14 @@ int DesktopBackgroundController::GetBackgroundContainerId(bool locked) {
internal::kShellWindowId_DesktopBackgroundContainer;
}
+void DesktopBackgroundController::UpdateWallpaper() {
+ current_wallpaper_.reset(NULL);
+ current_default_wallpaper_path_ = base::FilePath();
+ current_default_wallpaper_resource_id_ = -1;
+ ash::Shell::GetInstance()->user_wallpaper_delegate()->
+ UpdateWallpaper();
+}
+
// static
gfx::Size DesktopBackgroundController::GetMaxDisplaySizeInNative() {
int width = 0;

Powered by Google App Engine
This is Rietveld 408576698