summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordpolukhin@chromium.org <dpolukhin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-03 06:29:45 +0000
committerdpolukhin@chromium.org <dpolukhin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-03 06:29:45 +0000
commit4d6abe82e4e1b2decf9d661558bd5fb485173d2e (patch)
treef48e8c8430121753e748897917f48af898810c9d
parent1b81f5c30dbbf6768e0c9048be835c10fe50a441 (diff)
downloadchromium_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
-rw-r--r--ash/desktop_background/desktop_background_controller.cc9
-rw-r--r--ash/desktop_background/desktop_background_controller.h4
-rw-r--r--ash/desktop_background/desktop_background_view.cc38
-rw-r--r--ash/desktop_background/desktop_background_widget_controller.cc6
-rw-r--r--ash/desktop_background/desktop_background_widget_controller.h9
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);