Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(207)

Unified Diff: athena/activity/activity_manager_impl.cc

Issue 694353004: athena: Expose the list of activities from the ActivityManager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « athena/activity/activity_manager_impl.h ('k') | athena/activity/activity_manager_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: athena/activity/activity_manager_impl.cc
diff --git a/athena/activity/activity_manager_impl.cc b/athena/activity/activity_manager_impl.cc
index f8590f633cc694a703dfe169e553a3ad47000355..632504744126563c52c63a1f32d37b3c5729cedf 100644
--- a/athena/activity/activity_manager_impl.cc
+++ b/athena/activity/activity_manager_impl.cc
@@ -10,9 +10,12 @@
#include "athena/activity/public/activity.h"
#include "athena/activity/public/activity_manager_observer.h"
#include "athena/activity/public/activity_view_model.h"
+#include "athena/screen/public/screen_manager.h"
#include "base/logging.h"
#include "base/observer_list.h"
+#include "ui/aura/window.h"
#include "ui/views/widget/widget.h"
+#include "ui/wm/public/activation_client.h"
namespace athena {
@@ -46,9 +49,16 @@ views::Widget* GetWidget(Activity* activity) {
ActivityManagerImpl::ActivityManagerImpl() {
CHECK(!instance);
instance = this;
+
+ aura::Window* root_window =
+ ScreenManager::Get()->GetContext()->GetRootWindow();
+ aura::client::GetActivationClient(root_window)->AddObserver(this);
}
ActivityManagerImpl::~ActivityManagerImpl() {
+ aura::Window* root_window =
+ ScreenManager::Get()->GetContext()->GetRootWindow();
+ aura::client::GetActivationClient(root_window)->RemoveObserver(this);
while (!activities_.empty())
Activity::Delete(activities_.front());
@@ -59,9 +69,9 @@ ActivityManagerImpl::~ActivityManagerImpl() {
void ActivityManagerImpl::AddActivity(Activity* activity) {
CHECK(activities_.end() ==
std::find(activities_.begin(), activities_.end(), activity));
- activities_.push_back(activity);
+ activities_.insert(activities_.begin(), activity);
views::Widget* widget = CreateWidget(activity);
- widget->AddObserver(this);
+ widget->GetNativeView()->AddObserver(this);
FOR_EACH_OBSERVER(ActivityManagerObserver,
observers_,
OnActivityStarted(activity));
@@ -76,7 +86,7 @@ void ActivityManagerImpl::RemoveActivity(Activity* activity) {
ActivityManagerObserver, observers_, OnActivityEnding(activity));
activities_.erase(find);
views::Widget* widget = GetWidget(activity);
- widget->RemoveObserver(this);
+ widget->GetNativeView()->RemoveObserver(this);
widget->Close();
}
}
@@ -87,6 +97,10 @@ void ActivityManagerImpl::UpdateActivity(Activity* activity) {
widget->UpdateWindowTitle();
}
+const ActivityList& ActivityManagerImpl::GetActivityList() {
+ return activities_;
+}
+
Activity* ActivityManagerImpl::GetActivityForWindow(aura::Window* window) {
struct Matcher {
Matcher(aura::Window* w) : window(w) {}
@@ -108,14 +122,33 @@ void ActivityManagerImpl::RemoveObserver(ActivityManagerObserver* observer) {
observers_.RemoveObserver(observer);
}
-void ActivityManagerImpl::OnWidgetDestroying(views::Widget* widget) {
- Activity* activity = GetActivityForWindow(widget->GetNativeWindow());
+void ActivityManagerImpl::OnWindowDestroying(aura::Window* window) {
+ Activity* activity = GetActivityForWindow(window);
if (activity) {
- widget->RemoveObserver(this);
+ window->RemoveObserver(this);
Activity::Delete(activity);
}
}
+void ActivityManagerImpl::OnWindowActivated(aura::Window* gained_active,
+ aura::Window* lost_active) {
+ Activity* activity = GetActivityForWindow(gained_active);
+ if (!activity)
+ return;
+ CHECK(!activities_.empty());
+ if (activity == activities_.front())
+ return;
+ // Move the activity for |gained_active| at the front of the list.
+ ActivityList::reverse_iterator iter = std::find(activities_.rbegin(),
+ activities_.rend(),
+ activity);
+ CHECK(iter != activities_.rend());
+ std::rotate(iter, iter + 1, activities_.rend());
+ FOR_EACH_OBSERVER(ActivityManagerObserver,
+ observers_,
+ OnActivityOrderChanged());
+}
+
// static
ActivityManager* ActivityManager::Create() {
new ActivityManagerImpl();
« no previous file with comments | « athena/activity/activity_manager_impl.h ('k') | athena/activity/activity_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698