OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/shell.h" | 5 #include "ash/shell.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "ash/accelerators/focus_manager_factory.h" | 10 #include "ash/accelerators/focus_manager_factory.h" |
11 #include "ash/ash_switches.h" | 11 #include "ash/ash_switches.h" |
12 #include "ash/desktop_background/desktop_background_controller.h" | 12 #include "ash/desktop_background/desktop_background_controller.h" |
13 #include "ash/desktop_background/desktop_background_resources.h" | 13 #include "ash/desktop_background/desktop_background_resources.h" |
14 #include "ash/desktop_background/desktop_background_view.h" | 14 #include "ash/desktop_background/desktop_background_view.h" |
15 #include "ash/drag_drop/drag_drop_controller.h" | 15 #include "ash/drag_drop/drag_drop_controller.h" |
16 #include "ash/focus_cycler.h" | 16 #include "ash/focus_cycler.h" |
17 #include "ash/high_contrast/high_contrast_controller.h" | 17 #include "ash/high_contrast/high_contrast_controller.h" |
| 18 #include "ash/hostwm/host_window_manager.h" |
18 #include "ash/launcher/launcher.h" | 19 #include "ash/launcher/launcher.h" |
19 #include "ash/magnifier/magnification_controller.h" | 20 #include "ash/magnifier/magnification_controller.h" |
20 #include "ash/display/display_controller.h" | 21 #include "ash/display/display_controller.h" |
21 #include "ash/display/mouse_cursor_event_filter.h" | 22 #include "ash/display/mouse_cursor_event_filter.h" |
22 #include "ash/display/multi_display_manager.h" | 23 #include "ash/display/multi_display_manager.h" |
23 #include "ash/display/secondary_display_view.h" | 24 #include "ash/display/secondary_display_view.h" |
24 #include "ash/root_window_controller.h" | 25 #include "ash/root_window_controller.h" |
25 #include "ash/screen_ash.h" | 26 #include "ash/screen_ash.h" |
26 #include "ash/shell_context_menu.h" | 27 #include "ash/shell_context_menu.h" |
27 #include "ash/shell_delegate.h" | 28 #include "ash/shell_delegate.h" |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 #include "ash/accelerators/accelerator_controller.h" | 95 #include "ash/accelerators/accelerator_controller.h" |
95 #include "ash/accelerators/accelerator_filter.h" | 96 #include "ash/accelerators/accelerator_filter.h" |
96 #include "ash/accelerators/nested_dispatcher_controller.h" | 97 #include "ash/accelerators/nested_dispatcher_controller.h" |
97 #endif | 98 #endif |
98 | 99 |
99 #if defined(OS_CHROMEOS) | 100 #if defined(OS_CHROMEOS) |
100 #include "chromeos/display/output_configurator.h" | 101 #include "chromeos/display/output_configurator.h" |
101 #include "ui/aura/dispatcher_linux.h" | 102 #include "ui/aura/dispatcher_linux.h" |
102 #endif // defined(OS_CHROMEOS) | 103 #endif // defined(OS_CHROMEOS) |
103 | 104 |
| 105 #if defined(USE_X11) |
| 106 #include "ui/aura/hostwm/host_window_manager_x11.h" |
| 107 #endif |
| 108 |
104 namespace ash { | 109 namespace ash { |
105 | 110 |
106 namespace { | 111 namespace { |
107 | 112 |
108 using aura::Window; | 113 using aura::Window; |
109 using views::Widget; | 114 using views::Widget; |
110 | 115 |
111 // This dummy class is used for shell unit tests. We dont have chrome delegate | 116 // This dummy class is used for shell unit tests. We dont have chrome delegate |
112 // in these tests. | 117 // in these tests. |
113 class DummyUserWallpaperDelegate : public UserWallpaperDelegate { | 118 class DummyUserWallpaperDelegate : public UserWallpaperDelegate { |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 ui_controls::InstallUIControlsAura(internal::CreateUIControls()); | 189 ui_controls::InstallUIControlsAura(internal::CreateUIControls()); |
185 #if defined(OS_CHROMEOS) | 190 #if defined(OS_CHROMEOS) |
186 // OutputConfigurator needs to get events regarding added/removed outputs. | 191 // OutputConfigurator needs to get events regarding added/removed outputs. |
187 static_cast<aura::DispatcherLinux*>( | 192 static_cast<aura::DispatcherLinux*>( |
188 aura::Env::GetInstance()->GetDispatcher())->AddDispatcherForRootWindow( | 193 aura::Env::GetInstance()->GetDispatcher())->AddDispatcherForRootWindow( |
189 output_configurator()); | 194 output_configurator()); |
190 #endif // defined(OS_CHROMEOS) | 195 #endif // defined(OS_CHROMEOS) |
191 } | 196 } |
192 | 197 |
193 Shell::~Shell() { | 198 Shell::~Shell() { |
| 199 #if defined(USE_X11) |
| 200 x11_host_window_manager_.reset(); |
| 201 #endif |
| 202 |
| 203 // This holds a pointer to the host_window_manager_ that we own. |
| 204 host_window_manager_.reset(); |
| 205 |
194 views::FocusManagerFactory::Install(NULL); | 206 views::FocusManagerFactory::Install(NULL); |
195 | 207 |
196 // Remove the focus from any window. This will prevent overhead and side | 208 // Remove the focus from any window. This will prevent overhead and side |
197 // effects (e.g. crashes) from changing focus during shutdown. | 209 // effects (e.g. crashes) from changing focus during shutdown. |
198 // See bug crbug.com/134502. | 210 // See bug crbug.com/134502. |
199 if (active_root_window_) | 211 if (active_root_window_) |
200 active_root_window_->GetFocusManager()->SetFocusedWindow(NULL, NULL); | 212 active_root_window_->GetFocusManager()->SetFocusedWindow(NULL, NULL); |
201 | 213 |
202 aura::Env::GetInstance()->cursor_manager()->set_delegate(NULL); | 214 aura::Env::GetInstance()->cursor_manager()->set_delegate(NULL); |
203 | 215 |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 std::vector<aura::Window*> Shell::GetAllContainers(int container_id) { | 362 std::vector<aura::Window*> Shell::GetAllContainers(int container_id) { |
351 // TODO(oshima): Support multiple root windows. | 363 // TODO(oshima): Support multiple root windows. |
352 std::vector<aura::Window*> containers; | 364 std::vector<aura::Window*> containers; |
353 aura::Window* container = GetPrimaryRootWindow()->GetChildById(container_id); | 365 aura::Window* container = GetPrimaryRootWindow()->GetChildById(container_id); |
354 if (container) | 366 if (container) |
355 containers.push_back(container); | 367 containers.push_back(container); |
356 return containers; | 368 return containers; |
357 } | 369 } |
358 | 370 |
359 void Shell::Init() { | 371 void Shell::Init() { |
| 372 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 373 switches::kAuraEnableHostWindowManagement)) { |
| 374 host_window_manager_.reset(new internal::HostWindowManager); |
| 375 #if defined(USE_X11) |
| 376 x11_host_window_manager_.reset(new aura::HostWindowManagerX11( |
| 377 host_window_manager_.get())); |
| 378 #endif |
| 379 } |
| 380 |
360 // Install the custom factory first so that views::FocusManagers for Tray, | 381 // Install the custom factory first so that views::FocusManagers for Tray, |
361 // Launcher, and WallPaper could be created by the factory. | 382 // Launcher, and WallPaper could be created by the factory. |
362 views::FocusManagerFactory::Install(new AshFocusManagerFactory); | 383 views::FocusManagerFactory::Install(new AshFocusManagerFactory); |
363 | 384 |
364 env_filter_ = new aura::shared::CompoundEventFilter; | 385 env_filter_ = new aura::shared::CompoundEventFilter; |
365 // Pass ownership of the filter to the Env. | 386 // Pass ownership of the filter to the Env. |
366 aura::Env::GetInstance()->SetEventFilter(env_filter_); | 387 aura::Env::GetInstance()->SetEventFilter(env_filter_); |
367 | 388 |
368 aura::Env::GetInstance()->cursor_manager()->set_delegate(this); | 389 aura::Env::GetInstance()->cursor_manager()->set_delegate(this); |
369 | 390 |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 // widget will not paint when restoring after a browser crash. | 511 // widget will not paint when restoring after a browser crash. |
491 user_wallpaper_delegate_->InitializeWallpaper(); | 512 user_wallpaper_delegate_->InitializeWallpaper(); |
492 | 513 |
493 power_button_controller_.reset(new PowerButtonController); | 514 power_button_controller_.reset(new PowerButtonController); |
494 AddShellObserver(power_button_controller_.get()); | 515 AddShellObserver(power_button_controller_.get()); |
495 | 516 |
496 display_controller_->InitSecondaryDisplays(); | 517 display_controller_->InitSecondaryDisplays(); |
497 | 518 |
498 if (initially_hide_cursor_) | 519 if (initially_hide_cursor_) |
499 aura::Env::GetInstance()->cursor_manager()->ShowCursor(false); | 520 aura::Env::GetInstance()->cursor_manager()->ShowCursor(false); |
| 521 |
| 522 #if defined(USE_X11) |
| 523 if (x11_host_window_manager_.get()) |
| 524 x11_host_window_manager_->Init(); |
| 525 #endif |
500 } | 526 } |
501 | 527 |
502 void Shell::AddEnvEventFilter(aura::EventFilter* filter) { | 528 void Shell::AddEnvEventFilter(aura::EventFilter* filter) { |
503 env_filter_->AddFilter(filter); | 529 env_filter_->AddFilter(filter); |
504 } | 530 } |
505 | 531 |
506 void Shell::RemoveEnvEventFilter(aura::EventFilter* filter) { | 532 void Shell::RemoveEnvEventFilter(aura::EventFilter* filter) { |
507 env_filter_->RemoveFilter(filter); | 533 env_filter_->RemoveFilter(filter); |
508 } | 534 } |
509 | 535 |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
759 } | 785 } |
760 | 786 |
761 void Shell::ShowCursor(bool visible) { | 787 void Shell::ShowCursor(bool visible) { |
762 RootWindowList root_windows = GetAllRootWindows(); | 788 RootWindowList root_windows = GetAllRootWindows(); |
763 for (RootWindowList::iterator iter = root_windows.begin(); | 789 for (RootWindowList::iterator iter = root_windows.begin(); |
764 iter != root_windows.end(); ++iter) | 790 iter != root_windows.end(); ++iter) |
765 (*iter)->ShowCursor(visible); | 791 (*iter)->ShowCursor(visible); |
766 } | 792 } |
767 | 793 |
768 } // namespace ash | 794 } // namespace ash |
OLD | NEW |