diff options
5 files changed, 10 insertions, 56 deletions
diff --git a/ash/desktop_background/desktop_background_controller.cc b/ash/desktop_background/desktop_background_controller.cc index cb186ad..b1ca185 100644 --- a/ash/desktop_background/desktop_background_controller.cc +++ b/ash/desktop_background/desktop_background_controller.cc @@ -245,15 +245,6 @@ void DesktopBackgroundController::MoveDesktopToLockedContainer() { GetBackgroundContainerId(true)); } -void DesktopBackgroundController::CleanupView(aura::RootWindow* root_window) { - internal::ComponentWrapper* wrapper = - root_window->GetProperty(internal::kComponentWrapper); - if (NULL == wrapper) - return; - if (wrapper->GetComponent(false)) - wrapper->GetComponent(false)->CleanupWidget(); -} - void DesktopBackgroundController::MoveDesktopToUnlockedContainer() { if (!locked_) return; diff --git a/ash/desktop_background/desktop_background_controller.h b/ash/desktop_background/desktop_background_controller.h index 71eb8ff..0251c1c 100644 --- a/ash/desktop_background/desktop_background_controller.h +++ b/ash/desktop_background/desktop_background_controller.h @@ -125,10 +125,6 @@ class ASH_EXPORT DesktopBackgroundController : public aura::WindowObserver { // Move all desktop widgets to unlocked container. void MoveDesktopToUnlockedContainer(); - // Drop references to background view for |root_window|, because the view - // was deleted. - void CleanupView(aura::RootWindow* root_window); - // WindowObserver implementation. virtual void OnWindowDestroying(aura::Window* window) OVERRIDE; diff --git a/ash/desktop_background/desktop_background_view.cc b/ash/desktop_background/desktop_background_view.cc index c703786..74dbb72 100644 --- a/ash/desktop_background/desktop_background_view.cc +++ b/ash/desktop_background/desktop_background_view.cc @@ -28,41 +28,6 @@ namespace ash { namespace internal { namespace { -class DesktopBackgroundViewCleanup : public views::WidgetDelegate { - public: - DesktopBackgroundViewCleanup(views::Widget* widget, - aura::RootWindow* root_window) - : widget_(widget), - root_window_(root_window) { - } - - // Called when the window closes. The delegate MUST NOT delete itself during - // this call, since it can be called afterwards. See DeleteDelegate(). - virtual void WindowClosing() OVERRIDE { - DesktopBackgroundController* controller = - ash::Shell::GetInstance()->desktop_background_controller(); - controller->CleanupView(root_window_); - } - - virtual views::Widget* GetWidget() OVERRIDE { - return widget_; - } - - virtual const views::Widget* GetWidget() const OVERRIDE { - return widget_; - } - - virtual void DeleteDelegate() OVERRIDE { - delete this; - } - - private: - views::Widget* widget_; - aura::RootWindow* root_window_; - - DISALLOW_COPY_AND_ASSIGN(DesktopBackgroundViewCleanup); -}; - class ShowWallpaperAnimationObserver : public ui::ImplicitAnimationObserver, public aura::WindowObserver { public: @@ -191,13 +156,10 @@ views::Widget* CreateDesktopBackground(aura::RootWindow* root_window, DesktopBackgroundController* controller = ash::Shell::GetInstance()->desktop_background_controller(); views::Widget* desktop_widget = new views::Widget; - DesktopBackgroundViewCleanup* cleanup = - new DesktopBackgroundViewCleanup(desktop_widget, root_window); views::Widget::InitParams params( views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); if (controller->GetWallpaper().isNull()) params.transparent = true; - params.delegate = cleanup; params.parent = root_window->GetChildById(container_id); desktop_widget->Init(params); desktop_widget->SetContentsView(new DesktopBackgroundView()); diff --git a/ash/desktop_background/desktop_background_widget_controller.cc b/ash/desktop_background/desktop_background_widget_controller.cc index 8ee45ed..9ad1f95 100644 --- a/ash/desktop_background/desktop_background_widget_controller.cc +++ b/ash/desktop_background/desktop_background_widget_controller.cc @@ -19,6 +19,8 @@ DEFINE_OWNED_WINDOW_PROPERTY_KEY(ComponentWrapper, kComponentWrapper, NULL); DesktopBackgroundWidgetController::DesktopBackgroundWidgetController( views::Widget* widget) : widget_(widget) { + DCHECK(widget_); + widget_->AddObserver(this); } DesktopBackgroundWidgetController::DesktopBackgroundWidgetController( @@ -28,13 +30,15 @@ DesktopBackgroundWidgetController::DesktopBackgroundWidgetController( DesktopBackgroundWidgetController::~DesktopBackgroundWidgetController() { if (widget_) { + widget_->RemoveObserver(this); widget_->CloseNow(); widget_ = NULL; } else if (layer_.get()) layer_.reset(NULL); } -void DesktopBackgroundWidgetController::CleanupWidget() { +void DesktopBackgroundWidgetController::OnWidgetClosing(views::Widget* widget) { + widget_->RemoveObserver(this); widget_ = NULL; } diff --git a/ash/desktop_background/desktop_background_widget_controller.h b/ash/desktop_background/desktop_background_widget_controller.h index 41288cd..d565332 100644 --- a/ash/desktop_background/desktop_background_widget_controller.h +++ b/ash/desktop_background/desktop_background_widget_controller.h @@ -9,6 +9,7 @@ #include "ui/aura/window_property.h" #include "ui/compositor/layer.h" #include "ui/views/widget/widget.h" +#include "ui/views/widget/widget_observer.h" namespace ash { namespace internal { @@ -20,16 +21,16 @@ namespace internal { // DesktopBackgroundWidgetController is moved to a secondary property // (kComponentWrapper). When the animation completes the old // DesktopBackgroundWidgetController is destroyed. -class DesktopBackgroundWidgetController { +class DesktopBackgroundWidgetController : public views::WidgetObserver { public: // Create explicit DesktopBackgroundWidgetController(views::Widget* widget); explicit DesktopBackgroundWidgetController(ui::Layer* layer); - ~DesktopBackgroundWidgetController(); + virtual ~DesktopBackgroundWidgetController(); - // Drop widget reference. widget is not owned. - void CleanupWidget(); + // Overridden from views::WidgetObserver. + virtual void OnWidgetClosing(views::Widget* widget) OVERRIDE; // Set bounds of component that draws background. void SetBounds(gfx::Rect bounds); |