diff options
author | dpolukhin@chromium.org <dpolukhin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-03 06:29:45 +0000 |
---|---|---|
committer | dpolukhin@chromium.org <dpolukhin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-03 06:29:45 +0000 |
commit | 4d6abe82e4e1b2decf9d661558bd5fb485173d2e (patch) | |
tree | f48e8c8430121753e748897917f48af898810c9d | |
parent | 1b81f5c30dbbf6768e0c9048be835c10fe50a441 (diff) | |
download | chromium_src-4d6abe82e4e1b2decf9d661558bd5fb485173d2e.zip chromium_src-4d6abe82e4e1b2decf9d661558bd5fb485173d2e.tar.gz chromium_src-4d6abe82e4e1b2decf9d661558bd5fb485173d2e.tar.bz2 |
Merge 159221 - Make DesktopBackgroundWidgetController derivative from views::WidgetObserver to track widget lifetime
BUG=144047
TEST=manual
Review URL: https://chromiumcodereview.appspot.com/10987069
TBR=dpolukhin@chromium.org
Review URL: https://codereview.chromium.org/11046015
git-svn-id: svn://svn.chromium.org/chrome/branches/1271/src@159857 0039d316-1c4b-4281-b951-d872f2087c98
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); |