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(); |
} |