OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef ASH_COMMON_WM_SHELL_H_ | 5 #ifndef ASH_COMMON_WM_SHELL_H_ |
6 #define ASH_COMMON_WM_SHELL_H_ | 6 #define ASH_COMMON_WM_SHELL_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
11 #include <vector> | 11 #include <vector> |
12 | 12 |
13 #include "ash/ash_export.h" | 13 #include "ash/ash_export.h" |
14 #include "ash/common/media_delegate.h" | 14 #include "ash/common/media_delegate.h" |
15 #include "ash/common/metrics/user_metrics_action.h" | 15 #include "ash/common/metrics/user_metrics_action.h" |
| 16 #include "base/observer_list.h" |
16 | 17 |
17 namespace gfx { | 18 namespace gfx { |
18 class Rect; | 19 class Rect; |
19 } | 20 } |
20 | 21 |
21 namespace views { | 22 namespace views { |
22 class PointerWatcher; | 23 class PointerWatcher; |
23 } | 24 } |
24 | 25 |
25 namespace ash { | 26 namespace ash { |
(...skipping 29 matching lines...) Expand all Loading... |
55 // This is necessary for a handful of places that is difficult to plumb | 56 // This is necessary for a handful of places that is difficult to plumb |
56 // through context. | 57 // through context. |
57 static void Set(WmShell* instance); | 58 static void Set(WmShell* instance); |
58 static WmShell* Get(); | 59 static WmShell* Get(); |
59 static bool HasInstance() { return instance_ != nullptr; } | 60 static bool HasInstance() { return instance_ != nullptr; } |
60 | 61 |
61 FocusCycler* focus_cycler() { return focus_cycler_.get(); } | 62 FocusCycler* focus_cycler() { return focus_cycler_.get(); } |
62 | 63 |
63 KeyboardUI* keyboard_ui() { return keyboard_ui_.get(); } | 64 KeyboardUI* keyboard_ui() { return keyboard_ui_.get(); } |
64 | 65 |
| 66 MruWindowTracker* mru_window_tracker() { return mru_window_tracker_.get(); } |
| 67 |
65 MediaDelegate* media_delegate() { return media_delegate_.get(); } | 68 MediaDelegate* media_delegate() { return media_delegate_.get(); } |
66 | 69 |
67 SystemTrayNotifier* system_tray_notifier() { | 70 SystemTrayNotifier* system_tray_notifier() { |
68 return system_tray_notifier_.get(); | 71 return system_tray_notifier_.get(); |
69 } | 72 } |
70 | 73 |
71 SystemTrayDelegate* system_tray_delegate() { | 74 SystemTrayDelegate* system_tray_delegate() { |
72 return system_tray_delegate_.get(); | 75 return system_tray_delegate_.get(); |
73 } | 76 } |
74 | 77 |
75 WindowSelectorController* window_selector_controller() { | 78 WindowSelectorController* window_selector_controller() { |
76 return window_selector_controller_.get(); | 79 return window_selector_controller_.get(); |
77 } | 80 } |
78 | 81 |
79 virtual MruWindowTracker* GetMruWindowTracker() = 0; | |
80 | |
81 // Creates a new window used as a container of other windows. No painting is | 82 // Creates a new window used as a container of other windows. No painting is |
82 // done to the created window. | 83 // done to the created window. |
83 virtual WmWindow* NewContainerWindow() = 0; | 84 virtual WmWindow* NewContainerWindow() = 0; |
84 | 85 |
85 virtual WmWindow* GetFocusedWindow() = 0; | 86 virtual WmWindow* GetFocusedWindow() = 0; |
86 virtual WmWindow* GetActiveWindow() = 0; | 87 virtual WmWindow* GetActiveWindow() = 0; |
87 | 88 |
88 virtual WmWindow* GetPrimaryRootWindow() = 0; | 89 virtual WmWindow* GetPrimaryRootWindow() = 0; |
89 | 90 |
90 // Returns the root window for the specified display. | 91 // Returns the root window for the specified display. |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 virtual std::unique_ptr<wm::MaximizeModeEventHandler> | 149 virtual std::unique_ptr<wm::MaximizeModeEventHandler> |
149 CreateMaximizeModeEventHandler() = 0; | 150 CreateMaximizeModeEventHandler() = 0; |
150 | 151 |
151 // Called when the overview mode is about to be started (before the windows | 152 // Called when the overview mode is about to be started (before the windows |
152 // get re-arranged). | 153 // get re-arranged). |
153 virtual void OnOverviewModeStarting() = 0; | 154 virtual void OnOverviewModeStarting() = 0; |
154 | 155 |
155 // Called after overview mode has ended. | 156 // Called after overview mode has ended. |
156 virtual void OnOverviewModeEnded() = 0; | 157 virtual void OnOverviewModeEnded() = 0; |
157 | 158 |
| 159 // Notifies |observers_| when entering or exiting pinned mode for |
| 160 // |pinned_window|. Entering or exiting can be checked by looking at |
| 161 // |pinned_window|'s window state. |
| 162 void NotifyPinnedStateChanged(WmWindow* pinned_window); |
| 163 |
158 virtual AccessibilityDelegate* GetAccessibilityDelegate() = 0; | 164 virtual AccessibilityDelegate* GetAccessibilityDelegate() = 0; |
159 | 165 |
160 virtual SessionStateDelegate* GetSessionStateDelegate() = 0; | 166 virtual SessionStateDelegate* GetSessionStateDelegate() = 0; |
161 | 167 |
162 virtual void AddActivationObserver(WmActivationObserver* observer) = 0; | 168 virtual void AddActivationObserver(WmActivationObserver* observer) = 0; |
163 virtual void RemoveActivationObserver(WmActivationObserver* observer) = 0; | 169 virtual void RemoveActivationObserver(WmActivationObserver* observer) = 0; |
164 | 170 |
165 virtual void AddDisplayObserver(WmDisplayObserver* observer) = 0; | 171 virtual void AddDisplayObserver(WmDisplayObserver* observer) = 0; |
166 virtual void RemoveDisplayObserver(WmDisplayObserver* observer) = 0; | 172 virtual void RemoveDisplayObserver(WmDisplayObserver* observer) = 0; |
167 | 173 |
168 virtual void AddShellObserver(ShellObserver* observer) = 0; | 174 void AddShellObserver(ShellObserver* observer); |
169 virtual void RemoveShellObserver(ShellObserver* observer) = 0; | 175 void RemoveShellObserver(ShellObserver* observer); |
170 | 176 |
171 virtual void AddPointerWatcher(views::PointerWatcher* watcher) = 0; | 177 virtual void AddPointerWatcher(views::PointerWatcher* watcher) = 0; |
172 virtual void RemovePointerWatcher(views::PointerWatcher* watcher) = 0; | 178 virtual void RemovePointerWatcher(views::PointerWatcher* watcher) = 0; |
173 | 179 |
174 #if defined(OS_CHROMEOS) | 180 #if defined(OS_CHROMEOS) |
175 LogoutConfirmationController* logout_confirmation_controller() { | 181 LogoutConfirmationController* logout_confirmation_controller() { |
176 return logout_confirmation_controller_.get(); | 182 return logout_confirmation_controller_.get(); |
177 } | 183 } |
178 | 184 |
179 // TODO(jamescook): Remove this when VirtualKeyboardController has been moved. | 185 // TODO(jamescook): Remove this when VirtualKeyboardController has been moved. |
180 virtual void ToggleIgnoreExternalKeyboard() = 0; | 186 virtual void ToggleIgnoreExternalKeyboard() = 0; |
181 #endif | 187 #endif |
182 | 188 |
183 protected: | 189 protected: |
184 WmShell(); | 190 WmShell(); |
185 virtual ~WmShell(); | 191 virtual ~WmShell(); |
186 | 192 |
| 193 base::ObserverList<ShellObserver>* shell_observers() { |
| 194 return &shell_observers_; |
| 195 } |
| 196 |
187 void SetKeyboardUI(std::unique_ptr<KeyboardUI> keyboard_ui); | 197 void SetKeyboardUI(std::unique_ptr<KeyboardUI> keyboard_ui); |
188 | 198 |
189 // Helpers to set (and initialize) or destroy various delegates. | 199 // Helpers to set (and initialize) or destroy various delegates. |
190 // TODO(msw|jamescook): Remove these once ShellDelegate, etc. are ported. | 200 // TODO(msw|jamescook): Remove these once ShellDelegate, etc. are ported. |
191 void SetMediaDelegate(std::unique_ptr<MediaDelegate> delegate); | 201 void SetMediaDelegate(std::unique_ptr<MediaDelegate> delegate); |
192 void SetSystemTrayDelegate(std::unique_ptr<SystemTrayDelegate> delegate); | 202 void SetSystemTrayDelegate(std::unique_ptr<SystemTrayDelegate> delegate); |
193 void DeleteSystemTrayDelegate(); | 203 void DeleteSystemTrayDelegate(); |
194 | 204 |
195 void DeleteWindowSelectorController(); | 205 void DeleteWindowSelectorController(); |
196 | 206 |
| 207 void CreateMruWindowTracker(); |
| 208 void DeleteMruWindowTracker(); |
| 209 |
197 private: | 210 private: |
198 friend class Shell; | 211 friend class Shell; |
199 | 212 |
200 static WmShell* instance_; | 213 static WmShell* instance_; |
201 | 214 |
| 215 base::ObserverList<ShellObserver> shell_observers_; |
| 216 |
202 std::unique_ptr<FocusCycler> focus_cycler_; | 217 std::unique_ptr<FocusCycler> focus_cycler_; |
203 std::unique_ptr<KeyboardUI> keyboard_ui_; | 218 std::unique_ptr<KeyboardUI> keyboard_ui_; |
204 std::unique_ptr<MediaDelegate> media_delegate_; | 219 std::unique_ptr<MediaDelegate> media_delegate_; |
| 220 std::unique_ptr<MruWindowTracker> mru_window_tracker_; |
205 std::unique_ptr<SystemTrayNotifier> system_tray_notifier_; | 221 std::unique_ptr<SystemTrayNotifier> system_tray_notifier_; |
206 std::unique_ptr<SystemTrayDelegate> system_tray_delegate_; | 222 std::unique_ptr<SystemTrayDelegate> system_tray_delegate_; |
207 std::unique_ptr<WindowSelectorController> window_selector_controller_; | 223 std::unique_ptr<WindowSelectorController> window_selector_controller_; |
208 | 224 |
209 bool simulate_modal_window_open_for_testing_ = false; | 225 bool simulate_modal_window_open_for_testing_ = false; |
210 | 226 |
211 #if defined(OS_CHROMEOS) | 227 #if defined(OS_CHROMEOS) |
212 std::unique_ptr<LogoutConfirmationController> logout_confirmation_controller_; | 228 std::unique_ptr<LogoutConfirmationController> logout_confirmation_controller_; |
213 #endif | 229 #endif |
214 }; | 230 }; |
215 | 231 |
216 } // namespace ash | 232 } // namespace ash |
217 | 233 |
218 #endif // ASH_COMMON_WM_SHELL_H_ | 234 #endif // ASH_COMMON_WM_SHELL_H_ |
OLD | NEW |