| Index: athena/activity/activity_manager_impl.cc
|
| diff --git a/athena/activity/activity_manager_impl.cc b/athena/activity/activity_manager_impl.cc
|
| index b0074cbab3cfcc8e657578ecb396f465d425b0df..7313b24430169ab240aad14b54de00335799099c 100644
|
| --- a/athena/activity/activity_manager_impl.cc
|
| +++ b/athena/activity/activity_manager_impl.cc
|
| @@ -6,11 +6,13 @@
|
|
|
| #include <algorithm>
|
|
|
| +#include "athena/activity/activity_widget_delegate.h"
|
| #include "athena/activity/public/activity.h"
|
| #include "athena/activity/public/activity_manager_observer.h"
|
| -#include "athena/activity/public/activity_view_manager.h"
|
| +#include "athena/activity/public/activity_view_model.h"
|
| #include "base/logging.h"
|
| #include "base/observer_list.h"
|
| +#include "ui/views/widget/widget.h"
|
|
|
| namespace athena {
|
|
|
| @@ -18,6 +20,25 @@ namespace {
|
|
|
| ActivityManager* instance = NULL;
|
|
|
| +views::Widget* CreateWidget(Activity* activity) {
|
| + ActivityViewModel* view_model = activity->GetActivityViewModel();
|
| + views::Widget* widget = view_model->CreateWidget();
|
| + if (widget)
|
| + return widget;
|
| + widget = new views::Widget;
|
| + views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
|
| + params.delegate = new ActivityWidgetDelegate(view_model);
|
| + widget->Init(params);
|
| + activity->GetActivityViewModel()->Init();
|
| + return widget;
|
| +}
|
| +
|
| +views::Widget* GetWidget(Activity* activity) {
|
| + CHECK(activity);
|
| + CHECK(activity->GetWindow());
|
| + return views::Widget::GetWidgetForNativeWindow(activity->GetWindow());
|
| +}
|
| +
|
| } // namespace
|
|
|
| ActivityManagerImpl::ActivityManagerImpl() {
|
| @@ -37,8 +58,8 @@ void ActivityManagerImpl::AddActivity(Activity* activity) {
|
| CHECK(activities_.end() ==
|
| std::find(activities_.begin(), activities_.end(), activity));
|
| activities_.push_back(activity);
|
| - ActivityViewManager* manager = ActivityViewManager::Get();
|
| - manager->AddActivity(activity);
|
| + views::Widget* widget = CreateWidget(activity);
|
| + widget->AddObserver(this);
|
| FOR_EACH_OBSERVER(ActivityManagerObserver,
|
| observers_,
|
| OnActivityStarted(activity));
|
| @@ -47,19 +68,21 @@ void ActivityManagerImpl::AddActivity(Activity* activity) {
|
| void ActivityManagerImpl::RemoveActivity(Activity* activity) {
|
| std::vector<Activity*>::iterator find =
|
| std::find(activities_.begin(), activities_.end(), activity);
|
| - FOR_EACH_OBSERVER(ActivityManagerObserver,
|
| - observers_,
|
| - OnActivityEnding(activity));
|
| + DCHECK(find != activities_.end());
|
| if (find != activities_.end()) {
|
| + FOR_EACH_OBSERVER(
|
| + ActivityManagerObserver, observers_, OnActivityEnding(activity));
|
| activities_.erase(find);
|
| - ActivityViewManager* manager = ActivityViewManager::Get();
|
| - manager->RemoveActivity(activity);
|
| + views::Widget* widget = GetWidget(activity);
|
| + widget->RemoveObserver(this);
|
| + widget->Close();
|
| }
|
| }
|
|
|
| void ActivityManagerImpl::UpdateActivity(Activity* activity) {
|
| - ActivityViewManager* manager = ActivityViewManager::Get();
|
| - manager->UpdateActivity(activity);
|
| + views::Widget* widget = GetWidget(activity);
|
| + widget->UpdateWindowIcon();
|
| + widget->UpdateWindowTitle();
|
| }
|
|
|
| void ActivityManagerImpl::AddObserver(ActivityManagerObserver* observer) {
|
| @@ -70,10 +93,28 @@ void ActivityManagerImpl::RemoveObserver(ActivityManagerObserver* observer) {
|
| observers_.RemoveObserver(observer);
|
| }
|
|
|
| +void ActivityManagerImpl::OnWidgetDestroying(views::Widget* widget) {
|
| + struct Matcher {
|
| + Matcher(aura::Window* w) : window(w) {}
|
| +
|
| + bool operator()(Activity* activity) {
|
| + return activity->GetWindow() == window;
|
| + }
|
| + aura::Window* window;
|
| + };
|
| + std::vector<Activity*>::iterator iter =
|
| + std::find_if(activities_.begin(),
|
| + activities_.end(),
|
| + Matcher(widget->GetNativeWindow()));
|
| + DCHECK(iter != activities_.end());
|
| + if (iter != activities_.end()) {
|
| + widget->RemoveObserver(this);
|
| + Activity::Delete(*iter);
|
| + }
|
| +}
|
| +
|
| // static
|
| ActivityManager* ActivityManager::Create() {
|
| - ActivityViewManager::Create();
|
| -
|
| new ActivityManagerImpl();
|
| CHECK(instance);
|
| return instance;
|
| @@ -86,7 +127,6 @@ ActivityManager* ActivityManager::Get() {
|
| void ActivityManager::Shutdown() {
|
| CHECK(instance);
|
| delete instance;
|
| - ActivityViewManager::Shutdown();
|
| }
|
|
|
|
|
|
|