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

Side by Side Diff: ash/mus/bridge/wm_shell_mus.cc

Issue 2539363005: Converts ash to use aura-mus (Closed)
Patch Set: merge Created 4 years 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
OLDNEW
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 #include "ash/mus/bridge/wm_shell_mus.h" 5 #include "ash/mus/bridge/wm_shell_mus.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "ash/common/accelerators/accelerator_controller.h" 9 #include "ash/common/accelerators/accelerator_controller.h"
10 #include "ash/common/key_event_watcher.h" 10 #include "ash/common/key_event_watcher.h"
(...skipping 15 matching lines...) Expand all
26 #include "ash/mus/bridge/wm_window_mus.h" 26 #include "ash/mus/bridge/wm_window_mus.h"
27 #include "ash/mus/bridge/workspace_event_handler_mus.h" 27 #include "ash/mus/bridge/workspace_event_handler_mus.h"
28 #include "ash/mus/drag_window_resizer.h" 28 #include "ash/mus/drag_window_resizer.h"
29 #include "ash/mus/keyboard_ui_mus.h" 29 #include "ash/mus/keyboard_ui_mus.h"
30 #include "ash/mus/root_window_controller.h" 30 #include "ash/mus/root_window_controller.h"
31 #include "ash/mus/window_manager.h" 31 #include "ash/mus/window_manager.h"
32 #include "ash/public/cpp/shell_window_ids.h" 32 #include "ash/public/cpp/shell_window_ids.h"
33 #include "ash/shared/immersive_fullscreen_controller.h" 33 #include "ash/shared/immersive_fullscreen_controller.h"
34 #include "base/memory/ptr_util.h" 34 #include "base/memory/ptr_util.h"
35 #include "components/user_manager/user_info_impl.h" 35 #include "components/user_manager/user_info_impl.h"
36 #include "services/ui/common/util.h" 36 #include "ui/aura/mus/window_tree_client.h"
37 #include "services/ui/public/cpp/window.h" 37 #include "ui/aura/window.h"
38 #include "services/ui/public/cpp/window_tree_client.h"
39 #include "ui/display/manager/managed_display_info.h" 38 #include "ui/display/manager/managed_display_info.h"
40 #include "ui/display/screen.h" 39 #include "ui/display/screen.h"
41 #include "ui/views/mus/pointer_watcher_event_router.h" 40 #include "ui/views/mus/pointer_watcher_event_router2.h"
41 #include "ui/wm/core/capture_controller.h"
42 #include "ui/wm/core/focus_controller.h"
42 43
43 namespace ash { 44 namespace ash {
44 namespace mus { 45 namespace mus {
45 46
46 namespace { 47 namespace {
47 48
48 // TODO(jamescook): After ShellDelegate is ported to ash/common use 49 // TODO(jamescook): After ShellDelegate is ported to ash/common use
49 // ShellDelegate::CreateSessionStateDelegate() to construct the mus version 50 // ShellDelegate::CreateSessionStateDelegate() to construct the mus version
50 // of SessionStateDelegate. 51 // of SessionStateDelegate.
51 class SessionStateDelegateStub : public SessionStateDelegate { 52 class SessionStateDelegateStub : public SessionStateDelegate {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 std::unique_ptr<user_manager::UserInfo> user_info_; 105 std::unique_ptr<user_manager::UserInfo> user_info_;
105 106
106 DISALLOW_COPY_AND_ASSIGN(SessionStateDelegateStub); 107 DISALLOW_COPY_AND_ASSIGN(SessionStateDelegateStub);
107 }; 108 };
108 109
109 } // namespace 110 } // namespace
110 111
111 WmShellMus::WmShellMus( 112 WmShellMus::WmShellMus(
112 std::unique_ptr<ShellDelegate> shell_delegate, 113 std::unique_ptr<ShellDelegate> shell_delegate,
113 WindowManager* window_manager, 114 WindowManager* window_manager,
114 views::PointerWatcherEventRouter* pointer_watcher_event_router) 115 views::PointerWatcherEventRouter2* pointer_watcher_event_router)
115 : WmShell(std::move(shell_delegate)), 116 : WmShell(std::move(shell_delegate)),
116 window_manager_(window_manager), 117 window_manager_(window_manager),
117 pointer_watcher_event_router_(pointer_watcher_event_router), 118 pointer_watcher_event_router_(pointer_watcher_event_router),
118 session_state_delegate_(new SessionStateDelegateStub) { 119 session_state_delegate_(new SessionStateDelegateStub) {
119 window_tree_client()->AddObserver(this);
120 WmShell::Set(this); 120 WmShell::Set(this);
121 121
122 uint16_t accelerator_namespace_id = 0u; 122 uint16_t accelerator_namespace_id = 0u;
123 const bool add_result = 123 const bool add_result =
124 window_manager->GetNextAcceleratorNamespaceId(&accelerator_namespace_id); 124 window_manager->GetNextAcceleratorNamespaceId(&accelerator_namespace_id);
125 // WmShellMus is created early on, so that this should always succeed. 125 // WmShellMus is created early on, so that this should always succeed.
126 DCHECK(add_result); 126 DCHECK(add_result);
127 accelerator_controller_delegate_.reset( 127 accelerator_controller_delegate_.reset(
128 new AcceleratorControllerDelegateMus(window_manager_)); 128 new AcceleratorControllerDelegateMus(window_manager_));
129 accelerator_controller_registrar_.reset(new AcceleratorControllerRegistrar( 129 accelerator_controller_registrar_.reset(new AcceleratorControllerRegistrar(
(...skipping 20 matching lines...) Expand all
150 150
151 // Destroy maximize mode controller early on since it has some observers which 151 // Destroy maximize mode controller early on since it has some observers which
152 // need to be removed. 152 // need to be removed.
153 DeleteMaximizeModeController(); 153 DeleteMaximizeModeController();
154 DeleteToastManager(); 154 DeleteToastManager();
155 DeleteSystemTrayDelegate(); 155 DeleteSystemTrayDelegate();
156 // Has to happen before ~MruWindowTracker. 156 // Has to happen before ~MruWindowTracker.
157 DeleteWindowCycleController(); 157 DeleteWindowCycleController();
158 DeleteWindowSelectorController(); 158 DeleteWindowSelectorController();
159 DeleteMruWindowTracker(); 159 DeleteMruWindowTracker();
160 if (window_tree_client())
161 window_tree_client()->RemoveObserver(this);
162 WmShell::Set(nullptr); 160 WmShell::Set(nullptr);
163 } 161 }
164 162
165 // static 163 // static
166 WmShellMus* WmShellMus::Get() { 164 WmShellMus* WmShellMus::Get() {
167 return static_cast<WmShellMus*>(WmShell::Get()); 165 return static_cast<WmShellMus*>(WmShell::Get());
168 } 166 }
169 167
170 void WmShellMus::AddRootWindowController( 168 void WmShellMus::AddRootWindowController(
171 WmRootWindowControllerMus* controller) { 169 WmRootWindowControllerMus* controller) {
172 root_window_controllers_.push_back(controller); 170 root_window_controllers_.push_back(controller);
173 // The first root window will be the initial root for new windows. 171 // The first root window will be the initial root for new windows.
174 if (!GetRootWindowForNewWindows()) 172 if (!GetRootWindowForNewWindows())
175 set_root_window_for_new_windows(controller->GetWindow()); 173 set_root_window_for_new_windows(controller->GetWindow());
176 } 174 }
177 175
178 void WmShellMus::RemoveRootWindowController( 176 void WmShellMus::RemoveRootWindowController(
179 WmRootWindowControllerMus* controller) { 177 WmRootWindowControllerMus* controller) {
180 auto iter = std::find(root_window_controllers_.begin(), 178 auto iter = std::find(root_window_controllers_.begin(),
181 root_window_controllers_.end(), controller); 179 root_window_controllers_.end(), controller);
182 DCHECK(iter != root_window_controllers_.end()); 180 DCHECK(iter != root_window_controllers_.end());
183 root_window_controllers_.erase(iter); 181 root_window_controllers_.erase(iter);
184 } 182 }
185 183
186 // static 184 // static
187 WmWindowMus* WmShellMus::GetToplevelAncestor(ui::Window* window) { 185 WmWindowMus* WmShellMus::GetToplevelAncestor(aura::Window* window) {
188 while (window) { 186 while (window) {
189 if (IsActivationParent(window->parent())) 187 if (IsActivationParent(window->parent()))
190 return WmWindowMus::Get(window); 188 return WmWindowMus::Get(window);
191 window = window->parent(); 189 window = window->parent();
192 } 190 }
193 return nullptr; 191 return nullptr;
194 } 192 }
195 193
196 WmRootWindowControllerMus* WmShellMus::GetRootWindowControllerWithDisplayId( 194 WmRootWindowControllerMus* WmShellMus::GetRootWindowControllerWithDisplayId(
197 int64_t id) { 195 int64_t id) {
198 for (WmRootWindowControllerMus* root_window_controller : 196 for (WmRootWindowControllerMus* root_window_controller :
199 root_window_controllers_) { 197 root_window_controllers_) {
200 if (root_window_controller->GetDisplay().id() == id) 198 if (root_window_controller->GetDisplay().id() == id)
201 return root_window_controller; 199 return root_window_controller;
202 } 200 }
203 NOTREACHED(); 201 NOTREACHED();
204 return nullptr; 202 return nullptr;
205 } 203 }
206 204
205 aura::WindowTreeClient* WmShellMus::window_tree_client() {
206 return window_manager_->window_tree_client();
207 }
208
207 bool WmShellMus::IsRunningInMash() const { 209 bool WmShellMus::IsRunningInMash() const {
208 return true; 210 return true;
209 } 211 }
210 212
211 WmWindow* WmShellMus::NewWindow(ui::wm::WindowType window_type, 213 WmWindow* WmShellMus::NewWindow(ui::wm::WindowType window_type,
212 ui::LayerType layer_type) { 214 ui::LayerType layer_type) {
213 WmWindowMus* window = WmWindowMus::Get(window_tree_client()->NewWindow()); 215 aura::Window* window = new aura::Window(nullptr);
214 window->set_wm_window_type(window_type); 216 window->SetType(window_type);
215 // TODO(sky): support layer_type. 217 window->Init(layer_type);
216 NOTIMPLEMENTED(); 218 return WmWindowMus::Get(window);
217 return window;
218 } 219 }
219 220
220 WmWindow* WmShellMus::GetFocusedWindow() { 221 WmWindow* WmShellMus::GetFocusedWindow() {
221 return WmWindowMus::Get(window_tree_client()->GetFocusedWindow()); 222 // TODO: remove as both WmShells use same implementation.
223 return WmWindowMus::Get(static_cast<aura::client::FocusClient*>(
224 window_manager_->focus_controller())
225 ->GetFocusedWindow());
222 } 226 }
223 227
224 WmWindow* WmShellMus::GetActiveWindow() { 228 WmWindow* WmShellMus::GetActiveWindow() {
225 return GetToplevelAncestor(window_tree_client()->GetFocusedWindow()); 229 // TODO: remove as both WmShells use same implementation.
230 return WmWindowMus::Get(static_cast<aura::client::ActivationClient*>(
231 window_manager_->focus_controller())
232 ->GetActiveWindow());
226 } 233 }
227 234
228 WmWindow* WmShellMus::GetCaptureWindow() { 235 WmWindow* WmShellMus::GetCaptureWindow() {
229 return WmWindowMus::Get(window_tree_client()->GetCaptureWindow()); 236 // TODO: remove as both WmShells use same implementation.
237 return WmWindowMus::Get(::wm::CaptureController::Get()->GetCaptureWindow());
230 } 238 }
231 239
232 WmWindow* WmShellMus::GetPrimaryRootWindow() { 240 WmWindow* WmShellMus::GetPrimaryRootWindow() {
233 return root_window_controllers_[0]->GetWindow(); 241 return root_window_controllers_[0]->GetWindow();
234 } 242 }
235 243
236 WmWindow* WmShellMus::GetRootWindowForDisplayId(int64_t display_id) { 244 WmWindow* WmShellMus::GetRootWindowForDisplayId(int64_t display_id) {
237 return GetRootWindowControllerWithDisplayId(display_id)->GetWindow(); 245 return GetRootWindowControllerWithDisplayId(display_id)->GetWindow();
238 } 246 }
239 247
(...skipping 29 matching lines...) Expand all
269 return false; 277 return false;
270 } 278 }
271 279
272 bool WmShellMus::IsForceMaximizeOnFirstRun() { 280 bool WmShellMus::IsForceMaximizeOnFirstRun() {
273 NOTIMPLEMENTED(); 281 NOTIMPLEMENTED();
274 return false; 282 return false;
275 } 283 }
276 284
277 void WmShellMus::SetDisplayWorkAreaInsets(WmWindow* window, 285 void WmShellMus::SetDisplayWorkAreaInsets(WmWindow* window,
278 const gfx::Insets& insets) { 286 const gfx::Insets& insets) {
279 RootWindowController* root_window_controller = 287 WmRootWindowControllerMus* root_window_controller_mus =
280 GetRootWindowControllerWithDisplayId( 288 static_cast<WmWindowMus*>(window)->GetRootWindowControllerMus();
281 WmWindowMus::GetMusWindow(window)->display_id()) 289 if (!root_window_controller_mus)
James Cook 2016/12/05 19:21:44 Q: How could this be null when root_window_control
sky 2016/12/05 21:39:19 You are right. Fixed.
282 ->root_window_controller(); 290 return;
283 root_window_controller->SetWorkAreaInests(insets); 291 root_window_controller_mus->root_window_controller()->SetWorkAreaInests(
292 insets);
284 } 293 }
285 294
286 bool WmShellMus::IsPinned() { 295 bool WmShellMus::IsPinned() {
287 NOTIMPLEMENTED(); 296 NOTIMPLEMENTED();
288 return false; 297 return false;
289 } 298 }
290 299
291 void WmShellMus::SetPinnedWindow(WmWindow* window) { 300 void WmShellMus::SetPinnedWindow(WmWindow* window) {
292 NOTIMPLEMENTED(); 301 NOTIMPLEMENTED();
293 } 302 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 std::unique_ptr<ScopedDisableInternalMouseAndKeyboard> 363 std::unique_ptr<ScopedDisableInternalMouseAndKeyboard>
355 WmShellMus::CreateScopedDisableInternalMouseAndKeyboard() { 364 WmShellMus::CreateScopedDisableInternalMouseAndKeyboard() {
356 // TODO: needs implementation for mus, http://crbug.com/624967. 365 // TODO: needs implementation for mus, http://crbug.com/624967.
357 NOTIMPLEMENTED(); 366 NOTIMPLEMENTED();
358 return nullptr; 367 return nullptr;
359 } 368 }
360 369
361 std::unique_ptr<WorkspaceEventHandler> WmShellMus::CreateWorkspaceEventHandler( 370 std::unique_ptr<WorkspaceEventHandler> WmShellMus::CreateWorkspaceEventHandler(
362 WmWindow* workspace_window) { 371 WmWindow* workspace_window) {
363 return base::MakeUnique<WorkspaceEventHandlerMus>( 372 return base::MakeUnique<WorkspaceEventHandlerMus>(
364 WmWindowMus::GetMusWindow(workspace_window)); 373 WmWindowMus::GetAuraWindow(workspace_window));
365 } 374 }
366 375
367 std::unique_ptr<ImmersiveFullscreenController> 376 std::unique_ptr<ImmersiveFullscreenController>
368 WmShellMus::CreateImmersiveFullscreenController() { 377 WmShellMus::CreateImmersiveFullscreenController() {
369 return base::MakeUnique<ImmersiveFullscreenController>(); 378 return base::MakeUnique<ImmersiveFullscreenController>();
370 } 379 }
371 380
372 std::unique_ptr<KeyEventWatcher> WmShellMus::CreateKeyEventWatcher() { 381 std::unique_ptr<KeyEventWatcher> WmShellMus::CreateKeyEventWatcher() {
373 // TODO: needs implementation for mus, http://crbug.com/649600. 382 // TODO: needs implementation for mus, http://crbug.com/649600.
374 NOTIMPLEMENTED(); 383 NOTIMPLEMENTED();
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 #if defined(OS_CHROMEOS) 439 #if defined(OS_CHROMEOS)
431 void WmShellMus::ToggleIgnoreExternalKeyboard() { 440 void WmShellMus::ToggleIgnoreExternalKeyboard() {
432 NOTIMPLEMENTED(); 441 NOTIMPLEMENTED();
433 } 442 }
434 443
435 void WmShellMus::SetLaserPointerEnabled(bool enabled) { 444 void WmShellMus::SetLaserPointerEnabled(bool enabled) {
436 NOTIMPLEMENTED(); 445 NOTIMPLEMENTED();
437 } 446 }
438 #endif // defined(OS_CHROMEOS) 447 #endif // defined(OS_CHROMEOS)
439 448
440 ui::WindowTreeClient* WmShellMus::window_tree_client() {
441 return window_manager_->window_tree_client();
442 }
443
444 // static 449 // static
445 bool WmShellMus::IsActivationParent(ui::Window* window) { 450 bool WmShellMus::IsActivationParent(aura::Window* window) {
446 return window && IsActivatableShellWindowId( 451 return window && IsActivatableShellWindowId(
447 WmWindowMus::Get(window)->GetShellWindowId()); 452 WmWindowMus::Get(window)->GetShellWindowId());
448 } 453 }
449 454
450 // TODO: support OnAttemptToReactivateWindow, http://crbug.com/615114. 455 // TODO: support OnAttemptToReactivateWindow, http://crbug.com/615114.
451 void WmShellMus::OnWindowTreeFocusChanged(ui::Window* gained_focus, 456 // TODO: Nuke and let client code use ActivationChangeObserver directly.
452 ui::Window* lost_focus) { 457 void WmShellMus::OnWindowActivated(ActivationReason reason,
453 WmWindow* gained_active = GetToplevelAncestor(gained_focus); 458 aura::Window* gained_active,
454 if (gained_active) 459 aura::Window* lost_active) {
455 set_root_window_for_new_windows(gained_active->GetRootWindow()); 460 WmWindow* gained_active_wm = WmWindowMus::Get(gained_active);
456 461 if (gained_active_wm)
457 WmWindow* lost_active = GetToplevelAncestor(lost_focus); 462 set_root_window_for_new_windows(gained_active_wm->GetRootWindow());
458 if (gained_active == lost_active) 463 WmWindow* lost_active_wm = WmWindowMus::Get(lost_active);
459 return;
460
461 for (auto& observer : activation_observers_) 464 for (auto& observer : activation_observers_)
462 observer.OnWindowActivated(gained_active, lost_active); 465 observer.OnWindowActivated(gained_active_wm, lost_active_wm);
463 }
464
465 void WmShellMus::OnDidDestroyClient(ui::WindowTreeClient* client) {
466 DCHECK_EQ(window_tree_client(), client);
467 client->RemoveObserver(this);
468 } 466 }
469 467
470 } // namespace mus 468 } // namespace mus
471 } // namespace ash 469 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698