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

Side by Side Diff: athena/activity/activity_view_manager_impl.cc

Issue 596623005: Do not show the activity widget in ActivityManager::AddActivity (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Created 6 years, 3 months 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 unified diff | Download patch
« no previous file with comments | « athena/activity/activity_manager_unittest.cc ('k') | athena/activity/public/activity.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
Mr4D (OOO till 08-26) 2014/09/23 23:14:33 Yay! I found this class odd from the beginning...
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "athena/activity/public/activity_view_manager.h"
6
7 #include <algorithm>
8 #include <map>
9
10 #include "athena/activity/activity_widget_delegate.h"
11 #include "athena/activity/public/activity.h"
12 #include "athena/activity/public/activity_manager.h"
13 #include "athena/activity/public/activity_view_model.h"
14 #include "athena/screen/public/screen_manager.h"
15 #include "ui/aura/window.h"
16 #include "ui/views/view.h"
17 #include "ui/views/widget/widget.h"
18 #include "ui/views/widget/widget_observer.h"
19
20 namespace athena {
21 namespace {
22
23 typedef std::map<Activity*, views::Widget*> ActivityWidgetMap;
24
25 views::Widget* CreateWidget(Activity* activity) {
26 ActivityViewModel* view_model = activity->GetActivityViewModel();
27 views::Widget* widget = view_model->CreateWidget();
28 if (widget)
29 return widget;
30 widget = new views::Widget;
31 views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
32 params.delegate = new ActivityWidgetDelegate(view_model);
33 widget->Init(params);
34 return widget;
35 }
36
37 ActivityViewManager* instance = NULL;
38
39 class ActivityViewManagerImpl : public ActivityViewManager,
40 public views::WidgetObserver {
41 public:
42 ActivityViewManagerImpl() {
43 CHECK(!instance);
44 instance = this;
45 }
46
47 virtual ~ActivityViewManagerImpl() {
48 CHECK_EQ(this, instance);
49 instance = NULL;
50 }
51
52 // ActivityViewManager:
53 virtual void AddActivity(Activity* activity) OVERRIDE {
54 CHECK(activity_widgets_.end() == activity_widgets_.find(activity));
55 views::Widget* container = CreateWidget(activity);
56 container->AddObserver(this);
57 activity_widgets_[activity] = container;
58 container->Show();
59 container->Activate();
60 // Call the Activity model's initializer. It might re-order the activity
61 // against others, which has to be done before before registering it to the
62 // system.
63 activity->GetActivityViewModel()->Init();
64 }
65
66 virtual void RemoveActivity(Activity* activity) OVERRIDE {
67 ActivityWidgetMap::iterator find = activity_widgets_.find(activity);
68 if (find != activity_widgets_.end()) {
69 views::Widget* widget = find->second;
70 widget->RemoveObserver(this);
71 widget->Close();
72 activity_widgets_.erase(activity);
73 }
74 }
75
76 virtual void UpdateActivity(Activity* activity) OVERRIDE {
77 ActivityWidgetMap::iterator find = activity_widgets_.find(activity);
78 if (find != activity_widgets_.end()) {
79 find->second->UpdateWindowIcon();
80 find->second->UpdateWindowTitle();
81 }
82 }
83
84 // views::WidgetObserver:
85 virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE {
86 for (ActivityWidgetMap::iterator iter = activity_widgets_.begin();
87 iter != activity_widgets_.end();
88 ++iter) {
89 if (iter->second == widget) {
90 Activity::Delete(iter->first);
91 break;
92 }
93 }
94 }
95
96 private:
97 ActivityWidgetMap activity_widgets_;
98
99 DISALLOW_COPY_AND_ASSIGN(ActivityViewManagerImpl);
100 };
101
102 } // namespace
103
104 // static
105 ActivityViewManager* ActivityViewManager::Create() {
106 new ActivityViewManagerImpl();
107 CHECK(instance);
108 return instance;
109 }
110
111 ActivityViewManager* ActivityViewManager::Get() {
112 return instance;
113 }
114
115 void ActivityViewManager::Shutdown() {
116 CHECK(instance);
117 delete instance;
118 }
119
120 } // namespace athena
OLDNEW
« no previous file with comments | « athena/activity/activity_manager_unittest.cc ('k') | athena/activity/public/activity.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698