| Index: athena/activity/activity_view_manager_impl.cc
|
| diff --git a/athena/activity/activity_view_manager_impl.cc b/athena/activity/activity_view_manager_impl.cc
|
| index 6974fe7dbed06a3cf2ce2ddac7d0b41ef14314cc..3dc8c7cf5b1f71b17a7ba03d7801203ac8246f68 100644
|
| --- a/athena/activity/activity_view_manager_impl.cc
|
| +++ b/athena/activity/activity_view_manager_impl.cc
|
| @@ -9,59 +9,40 @@
|
|
|
| #include "athena/activity/activity_widget_delegate.h"
|
| #include "athena/activity/public/activity.h"
|
| +#include "athena/activity/public/activity_manager.h"
|
| #include "athena/activity/public/activity_view_model.h"
|
| #include "athena/screen/public/screen_manager.h"
|
| #include "ui/aura/window.h"
|
| #include "ui/views/view.h"
|
| #include "ui/views/widget/widget.h"
|
| +#include "ui/views/widget/widget_observer.h"
|
|
|
| namespace athena {
|
| namespace {
|
|
|
| -class ActivityWidget {
|
| - public:
|
| - explicit ActivityWidget(Activity* activity)
|
| - : activity_(activity), widget_(NULL) {
|
| - ActivityViewModel* view_model = activity->GetActivityViewModel();
|
| - widget_ = new views::Widget;
|
| - views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
|
| - params.context = ScreenManager::Get()->GetContext();
|
| - params.delegate = new ActivityWidgetDelegate(view_model);
|
| - params.activatable = views::Widget::InitParams::ACTIVATABLE_YES;
|
| - widget_->Init(params);
|
| - activity_->GetActivityViewModel()->Init();
|
| - }
|
| -
|
| - virtual ~ActivityWidget() {
|
| - widget_->Close();
|
| - }
|
| -
|
| - void Show() {
|
| - Update();
|
| - widget_->Show();
|
| - widget_->Activate();
|
| - }
|
| -
|
| - void Update() {
|
| - widget_->UpdateWindowTitle();
|
| - }
|
| -
|
| - private:
|
| -
|
| - Activity* activity_;
|
| - views::Widget* widget_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ActivityWidget);
|
| -};
|
| +typedef std::map<Activity*, views::Widget*> ActivityWidgetMap;
|
| +
|
| +views::Widget* CreateWidget(Activity* activity) {
|
| + ActivityViewModel* view_model = activity->GetActivityViewModel();
|
| + views::Widget* widget = new views::Widget;
|
| + views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
|
| + params.delegate = new ActivityWidgetDelegate(view_model);
|
| + params.activatable = views::Widget::InitParams::ACTIVATABLE_YES;
|
| + widget->Init(params);
|
| + activity->GetActivityViewModel()->Init();
|
| + return widget;
|
| +}
|
|
|
| ActivityViewManager* instance = NULL;
|
|
|
| -class ActivityViewManagerImpl : public ActivityViewManager {
|
| +class ActivityViewManagerImpl : public ActivityViewManager,
|
| + public views::WidgetObserver {
|
| public:
|
| ActivityViewManagerImpl() {
|
| CHECK(!instance);
|
| instance = this;
|
| }
|
| +
|
| virtual ~ActivityViewManagerImpl() {
|
| CHECK_EQ(this, instance);
|
| instance = NULL;
|
| @@ -70,30 +51,44 @@ class ActivityViewManagerImpl : public ActivityViewManager {
|
| // ActivityViewManager:
|
| virtual void AddActivity(Activity* activity) OVERRIDE {
|
| CHECK(activity_widgets_.end() == activity_widgets_.find(activity));
|
| - ActivityWidget* container = new ActivityWidget(activity);
|
| + views::Widget* container = CreateWidget(activity);
|
| + container->AddObserver(this);
|
| activity_widgets_[activity] = container;
|
| + container->UpdateWindowTitle();
|
| container->Show();
|
| + container->Activate();
|
| }
|
|
|
| virtual void RemoveActivity(Activity* activity) OVERRIDE {
|
| - std::map<Activity*, ActivityWidget*>::iterator find =
|
| - activity_widgets_.find(activity);
|
| + ActivityWidgetMap::iterator find = activity_widgets_.find(activity);
|
| if (find != activity_widgets_.end()) {
|
| - ActivityWidget* widget = find->second;
|
| + views::Widget* widget = find->second;
|
| + widget->RemoveObserver(this);
|
| + widget->Close();
|
| activity_widgets_.erase(activity);
|
| - delete widget;
|
| }
|
| }
|
|
|
| virtual void UpdateActivity(Activity* activity) OVERRIDE {
|
| - std::map<Activity*, ActivityWidget*>::iterator find =
|
| - activity_widgets_.find(activity);
|
| + ActivityWidgetMap::iterator find = activity_widgets_.find(activity);
|
| if (find != activity_widgets_.end())
|
| - find->second->Update();
|
| + find->second->UpdateWindowTitle();
|
| + }
|
| +
|
| + // views::WidgetObserver:
|
| + virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE {
|
| + for (ActivityWidgetMap::iterator iter = activity_widgets_.begin();
|
| + iter != activity_widgets_.end();
|
| + ++iter) {
|
| + if (iter->second == widget) {
|
| + delete iter->first;
|
| + break;
|
| + }
|
| + }
|
| }
|
|
|
| private:
|
| - std::map<Activity*, ActivityWidget*> activity_widgets_;
|
| + ActivityWidgetMap activity_widgets_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ActivityViewManagerImpl);
|
| };
|
|
|