| 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/accelerator_controller.h" | 10 #include "ash/accelerators/accelerator_controller.h" |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 return internal::GetRootWindowController(GetPrimaryRootWindow()); | 195 return internal::GetRootWindowController(GetPrimaryRootWindow()); |
| 196 } | 196 } |
| 197 | 197 |
| 198 // static | 198 // static |
| 199 Shell::RootWindowControllerList Shell::GetAllRootWindowControllers() { | 199 Shell::RootWindowControllerList Shell::GetAllRootWindowControllers() { |
| 200 return Shell::GetInstance()->display_controller()-> | 200 return Shell::GetInstance()->display_controller()-> |
| 201 GetAllRootWindowControllers(); | 201 GetAllRootWindowControllers(); |
| 202 } | 202 } |
| 203 | 203 |
| 204 // static | 204 // static |
| 205 aura::RootWindow* Shell::GetPrimaryRootWindow() { | 205 aura::Window* Shell::GetPrimaryRootWindow() { |
| 206 return GetInstance()->display_controller()->GetPrimaryRootWindow(); | 206 return GetInstance()->display_controller()->GetPrimaryRootWindow(); |
| 207 } | 207 } |
| 208 | 208 |
| 209 // static | 209 // static |
| 210 aura::RootWindow* Shell::GetTargetRootWindow() { | 210 aura::Window* Shell::GetTargetRootWindow() { |
| 211 Shell* shell = GetInstance(); | 211 Shell* shell = GetInstance(); |
| 212 if (shell->scoped_target_root_window_) | 212 if (shell->scoped_target_root_window_) |
| 213 return shell->scoped_target_root_window_; | 213 return shell->scoped_target_root_window_; |
| 214 return shell->target_root_window_; | 214 return shell->target_root_window_; |
| 215 } | 215 } |
| 216 | 216 |
| 217 // static | 217 // static |
| 218 gfx::Screen* Shell::GetScreen() { | 218 gfx::Screen* Shell::GetScreen() { |
| 219 return gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); | 219 return gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); |
| 220 } | 220 } |
| 221 | 221 |
| 222 // static | 222 // static |
| 223 Shell::RootWindowList Shell::GetAllRootWindows() { | 223 Shell::RootWindowList Shell::GetAllRootWindows() { |
| 224 return Shell::GetInstance()->display_controller()-> | 224 return Shell::GetInstance()->display_controller()-> |
| 225 GetAllRootWindows(); | 225 GetAllRootWindows(); |
| 226 } | 226 } |
| 227 | 227 |
| 228 // static | 228 // static |
| 229 aura::Window* Shell::GetContainer(aura::RootWindow* root_window, | 229 aura::Window* Shell::GetContainer(aura::Window* root_window, |
| 230 int container_id) { | 230 int container_id) { |
| 231 return root_window->GetChildById(container_id); | 231 return root_window->GetChildById(container_id); |
| 232 } | 232 } |
| 233 | 233 |
| 234 // static | 234 // static |
| 235 const aura::Window* Shell::GetContainer(const aura::RootWindow* root_window, | 235 const aura::Window* Shell::GetContainer(const aura::Window* root_window, |
| 236 int container_id) { | 236 int container_id) { |
| 237 return root_window->GetChildById(container_id); | 237 return root_window->GetChildById(container_id); |
| 238 } | 238 } |
| 239 | 239 |
| 240 // static | 240 // static |
| 241 std::vector<aura::Window*> Shell::GetContainersFromAllRootWindows( | 241 std::vector<aura::Window*> Shell::GetContainersFromAllRootWindows( |
| 242 int container_id, | 242 int container_id, |
| 243 aura::RootWindow* priority_root) { | 243 aura::Window* priority_root) { |
| 244 std::vector<aura::Window*> containers; | 244 std::vector<aura::Window*> containers; |
| 245 RootWindowList root_windows = GetAllRootWindows(); | 245 RootWindowList root_windows = GetAllRootWindows(); |
| 246 for (RootWindowList::const_iterator it = root_windows.begin(); | 246 for (RootWindowList::const_iterator it = root_windows.begin(); |
| 247 it != root_windows.end(); ++it) { | 247 it != root_windows.end(); ++it) { |
| 248 aura::Window* container = (*it)->GetChildById(container_id); | 248 aura::Window* container = (*it)->GetChildById(container_id); |
| 249 if (container) { | 249 if (container) { |
| 250 if (priority_root && priority_root->Contains(container)) | 250 if (priority_root && priority_root->Contains(container)) |
| 251 containers.insert(containers.begin(), container); | 251 containers.insert(containers.begin(), container); |
| 252 else | 252 else |
| 253 containers.push_back(container); | 253 containers.push_back(container); |
| 254 } | 254 } |
| 255 } | 255 } |
| 256 return containers; | 256 return containers; |
| 257 } | 257 } |
| 258 | 258 |
| 259 void Shell::ShowContextMenu(const gfx::Point& location_in_screen, | 259 void Shell::ShowContextMenu(const gfx::Point& location_in_screen, |
| 260 ui::MenuSourceType source_type) { | 260 ui::MenuSourceType source_type) { |
| 261 // No context menus if there is no session with an active user. | 261 // No context menus if there is no session with an active user. |
| 262 if (!session_state_delegate_->NumberOfLoggedInUsers()) | 262 if (!session_state_delegate_->NumberOfLoggedInUsers()) |
| 263 return; | 263 return; |
| 264 // No context menus when screen is locked. | 264 // No context menus when screen is locked. |
| 265 if (session_state_delegate_->IsScreenLocked()) | 265 if (session_state_delegate_->IsScreenLocked()) |
| 266 return; | 266 return; |
| 267 | 267 |
| 268 aura::RootWindow* root = | 268 aura::Window* root = |
| 269 wm::GetRootWindowMatching(gfx::Rect(location_in_screen, gfx::Size())); | 269 wm::GetRootWindowMatching(gfx::Rect(location_in_screen, gfx::Size())); |
| 270 internal::GetRootWindowController(root)-> | 270 internal::GetRootWindowController(root)-> |
| 271 ShowContextMenu(location_in_screen, source_type); | 271 ShowContextMenu(location_in_screen, source_type); |
| 272 } | 272 } |
| 273 | 273 |
| 274 void Shell::ToggleAppList(aura::Window* window) { | 274 void Shell::ToggleAppList(aura::Window* window) { |
| 275 // If the context window is not given, show it on the target root window. | 275 // If the context window is not given, show it on the target root window. |
| 276 if (!window) | 276 if (!window) |
| 277 window = GetTargetRootWindow(); | 277 window = GetTargetRootWindow(); |
| 278 if (!app_list_controller_) | 278 if (!app_list_controller_) |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 | 395 |
| 396 void Shell::UpdateShelfVisibility() { | 396 void Shell::UpdateShelfVisibility() { |
| 397 RootWindowControllerList controllers = GetAllRootWindowControllers(); | 397 RootWindowControllerList controllers = GetAllRootWindowControllers(); |
| 398 for (RootWindowControllerList::iterator iter = controllers.begin(); | 398 for (RootWindowControllerList::iterator iter = controllers.begin(); |
| 399 iter != controllers.end(); ++iter) | 399 iter != controllers.end(); ++iter) |
| 400 if ((*iter)->shelf()) | 400 if ((*iter)->shelf()) |
| 401 (*iter)->UpdateShelfVisibility(); | 401 (*iter)->UpdateShelfVisibility(); |
| 402 } | 402 } |
| 403 | 403 |
| 404 void Shell::SetShelfAutoHideBehavior(ShelfAutoHideBehavior behavior, | 404 void Shell::SetShelfAutoHideBehavior(ShelfAutoHideBehavior behavior, |
| 405 aura::RootWindow* root_window) { | 405 aura::Window* root_window) { |
| 406 ash::internal::ShelfLayoutManager::ForLauncher(root_window)-> | 406 ash::internal::ShelfLayoutManager::ForLauncher(root_window)-> |
| 407 SetAutoHideBehavior(behavior); | 407 SetAutoHideBehavior(behavior); |
| 408 } | 408 } |
| 409 | 409 |
| 410 ShelfAutoHideBehavior Shell::GetShelfAutoHideBehavior( | 410 ShelfAutoHideBehavior Shell::GetShelfAutoHideBehavior( |
| 411 aura::RootWindow* root_window) const { | 411 aura::Window* root_window) const { |
| 412 return ash::internal::ShelfLayoutManager::ForLauncher(root_window)-> | 412 return ash::internal::ShelfLayoutManager::ForLauncher(root_window)-> |
| 413 auto_hide_behavior(); | 413 auto_hide_behavior(); |
| 414 } | 414 } |
| 415 | 415 |
| 416 void Shell::SetShelfAlignment(ShelfAlignment alignment, | 416 void Shell::SetShelfAlignment(ShelfAlignment alignment, |
| 417 aura::RootWindow* root_window) { | 417 aura::Window* root_window) { |
| 418 if (ash::internal::ShelfLayoutManager::ForLauncher(root_window)-> | 418 if (ash::internal::ShelfLayoutManager::ForLauncher(root_window)-> |
| 419 SetAlignment(alignment)) { | 419 SetAlignment(alignment)) { |
| 420 FOR_EACH_OBSERVER( | 420 FOR_EACH_OBSERVER( |
| 421 ShellObserver, observers_, OnShelfAlignmentChanged(root_window)); | 421 ShellObserver, observers_, OnShelfAlignmentChanged(root_window)); |
| 422 } | 422 } |
| 423 } | 423 } |
| 424 | 424 |
| 425 ShelfAlignment Shell::GetShelfAlignment(aura::RootWindow* root_window) { | 425 ShelfAlignment Shell::GetShelfAlignment(aura::Window* root_window) { |
| 426 return internal::GetRootWindowController(root_window)-> | 426 return internal::GetRootWindowController(root_window)-> |
| 427 GetShelfLayoutManager()->GetAlignment(); | 427 GetShelfLayoutManager()->GetAlignment(); |
| 428 } | 428 } |
| 429 | 429 |
| 430 void Shell::SetDimming(bool should_dim) { | 430 void Shell::SetDimming(bool should_dim) { |
| 431 RootWindowControllerList controllers = GetAllRootWindowControllers(); | 431 RootWindowControllerList controllers = GetAllRootWindowControllers(); |
| 432 for (RootWindowControllerList::iterator iter = controllers.begin(); | 432 for (RootWindowControllerList::iterator iter = controllers.begin(); |
| 433 iter != controllers.end(); ++iter) | 433 iter != controllers.end(); ++iter) |
| 434 (*iter)->screen_dimmer()->SetDimming(should_dim); | 434 (*iter)->screen_dimmer()->SetDimming(should_dim); |
| 435 } | 435 } |
| 436 | 436 |
| 437 void Shell::NotifyFullscreenStateChange(bool is_fullscreen, | 437 void Shell::NotifyFullscreenStateChange(bool is_fullscreen, |
| 438 aura::RootWindow* root_window) { | 438 aura::Window* root_window) { |
| 439 FOR_EACH_OBSERVER(ShellObserver, observers_, OnFullscreenStateChanged( | 439 FOR_EACH_OBSERVER(ShellObserver, observers_, OnFullscreenStateChanged( |
| 440 is_fullscreen, root_window)); | 440 is_fullscreen, root_window)); |
| 441 } | 441 } |
| 442 | 442 |
| 443 void Shell::CreateModalBackground(aura::Window* window) { | 443 void Shell::CreateModalBackground(aura::Window* window) { |
| 444 if (!modality_filter_) { | 444 if (!modality_filter_) { |
| 445 modality_filter_.reset(new internal::SystemModalContainerEventFilter(this)); | 445 modality_filter_.reset(new internal::SystemModalContainerEventFilter(this)); |
| 446 AddPreTargetHandler(modality_filter_.get()); | 446 AddPreTargetHandler(modality_filter_.get()); |
| 447 } | 447 } |
| 448 RootWindowControllerList controllers = GetAllRootWindowControllers(); | 448 RootWindowControllerList controllers = GetAllRootWindowControllers(); |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 738 focus_client_.reset(focus_controller); | 738 focus_client_.reset(focus_controller); |
| 739 activation_client_ = focus_controller; | 739 activation_client_ = focus_controller; |
| 740 activation_client_->AddObserver(this); | 740 activation_client_->AddObserver(this); |
| 741 focus_cycler_.reset(new internal::FocusCycler()); | 741 focus_cycler_.reset(new internal::FocusCycler()); |
| 742 | 742 |
| 743 screen_position_controller_.reset(new internal::ScreenPositionController); | 743 screen_position_controller_.reset(new internal::ScreenPositionController); |
| 744 root_window_host_factory_.reset(delegate_->CreateRootWindowHostFactory()); | 744 root_window_host_factory_.reset(delegate_->CreateRootWindowHostFactory()); |
| 745 | 745 |
| 746 display_controller_->Start(); | 746 display_controller_->Start(); |
| 747 display_controller_->InitPrimaryDisplay(); | 747 display_controller_->InitPrimaryDisplay(); |
| 748 aura::RootWindow* root_window = display_controller_->GetPrimaryRootWindow(); | 748 aura::Window* root_window = display_controller_->GetPrimaryRootWindow(); |
| 749 target_root_window_ = root_window; | 749 target_root_window_ = root_window; |
| 750 | 750 |
| 751 resolution_notification_controller_.reset( | 751 resolution_notification_controller_.reset( |
| 752 new internal::ResolutionNotificationController); | 752 new internal::ResolutionNotificationController); |
| 753 | 753 |
| 754 cursor_manager_.SetDisplay(DisplayController::GetPrimaryDisplay()); | 754 cursor_manager_.SetDisplay(DisplayController::GetPrimaryDisplay()); |
| 755 | 755 |
| 756 nested_dispatcher_controller_.reset(new NestedDispatcherController); | 756 nested_dispatcher_controller_.reset(new NestedDispatcherController); |
| 757 accelerator_controller_.reset(new AcceleratorController); | 757 accelerator_controller_.reset(new AcceleratorController); |
| 758 | 758 |
| 759 // The order in which event filters are added is significant. | 759 // The order in which event filters are added is significant. |
| 760 event_rewriter_filter_.reset(new internal::EventRewriterEventFilter); | 760 event_rewriter_filter_.reset(new internal::EventRewriterEventFilter); |
| 761 AddPreTargetHandler(event_rewriter_filter_.get()); | 761 AddPreTargetHandler(event_rewriter_filter_.get()); |
| 762 | 762 |
| 763 // UserActivityDetector passes events to observers, so let them get | 763 // UserActivityDetector passes events to observers, so let them get |
| 764 // rewritten first. | 764 // rewritten first. |
| 765 user_activity_detector_.reset(new UserActivityDetector); | 765 user_activity_detector_.reset(new UserActivityDetector); |
| 766 AddPreTargetHandler(user_activity_detector_.get()); | 766 AddPreTargetHandler(user_activity_detector_.get()); |
| 767 | 767 |
| 768 overlay_filter_.reset(new internal::OverlayEventFilter); | 768 overlay_filter_.reset(new internal::OverlayEventFilter); |
| 769 AddPreTargetHandler(overlay_filter_.get()); | 769 AddPreTargetHandler(overlay_filter_.get()); |
| 770 AddShellObserver(overlay_filter_.get()); | 770 AddShellObserver(overlay_filter_.get()); |
| 771 | 771 |
| 772 input_method_filter_.reset(new views::corewm::InputMethodEventFilter( | 772 input_method_filter_.reset(new views::corewm::InputMethodEventFilter( |
| 773 root_window->GetAcceleratedWidget())); | 773 root_window->GetDispatcher()->GetAcceleratedWidget())); |
| 774 AddPreTargetHandler(input_method_filter_.get()); | 774 AddPreTargetHandler(input_method_filter_.get()); |
| 775 | 775 |
| 776 accelerator_filter_.reset(new internal::AcceleratorFilter); | 776 accelerator_filter_.reset(new internal::AcceleratorFilter); |
| 777 AddPreTargetHandler(accelerator_filter_.get()); | 777 AddPreTargetHandler(accelerator_filter_.get()); |
| 778 | 778 |
| 779 event_transformation_handler_.reset(new internal::EventTransformationHandler); | 779 event_transformation_handler_.reset(new internal::EventTransformationHandler); |
| 780 AddPreTargetHandler(event_transformation_handler_.get()); | 780 AddPreTargetHandler(event_transformation_handler_.get()); |
| 781 | 781 |
| 782 system_gesture_filter_.reset(new internal::SystemGestureEventFilter); | 782 system_gesture_filter_.reset(new internal::SystemGestureEventFilter); |
| 783 AddPreTargetHandler(system_gesture_filter_.get()); | 783 AddPreTargetHandler(system_gesture_filter_.get()); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 853 | 853 |
| 854 locale_notification_controller_.reset( | 854 locale_notification_controller_.reset( |
| 855 new internal::LocaleNotificationController); | 855 new internal::LocaleNotificationController); |
| 856 | 856 |
| 857 // Initialize system_tray_delegate_ after StatusAreaWidget is created. | 857 // Initialize system_tray_delegate_ after StatusAreaWidget is created. |
| 858 system_tray_delegate_->Initialize(); | 858 system_tray_delegate_->Initialize(); |
| 859 | 859 |
| 860 // TODO(oshima): Initialize all RootWindowControllers once, and | 860 // TODO(oshima): Initialize all RootWindowControllers once, and |
| 861 // initialize controller/delegates above when initializing the | 861 // initialize controller/delegates above when initializing the |
| 862 // primary root window controller. | 862 // primary root window controller. |
| 863 internal::RootWindowController::CreateForPrimaryDisplay(root_window); | 863 internal::RootWindowController::CreateForPrimaryDisplay( |
| 864 root_window->GetDispatcher()); |
| 864 | 865 |
| 865 display_controller_->InitSecondaryDisplays(); | 866 display_controller_->InitSecondaryDisplays(); |
| 866 | 867 |
| 867 // It needs to be created after RootWindowController has been created | 868 // It needs to be created after RootWindowController has been created |
| 868 // (which calls OnWindowResized has been called, otherwise the | 869 // (which calls OnWindowResized has been called, otherwise the |
| 869 // widget will not paint when restoring after a browser crash. Also it needs | 870 // widget will not paint when restoring after a browser crash. Also it needs |
| 870 // to be created after InitSecondaryDisplays() to initialize the wallpapers in | 871 // to be created after InitSecondaryDisplays() to initialize the wallpapers in |
| 871 // the correct size. | 872 // the correct size. |
| 872 user_wallpaper_delegate_->InitializeWallpaper(); | 873 user_wallpaper_delegate_->InitializeWallpaper(); |
| 873 | 874 |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 976 //////////////////////////////////////////////////////////////////////////////// | 977 //////////////////////////////////////////////////////////////////////////////// |
| 977 // Shell, aura::client::ActivationChangeObserver implementation: | 978 // Shell, aura::client::ActivationChangeObserver implementation: |
| 978 | 979 |
| 979 void Shell::OnWindowActivated(aura::Window* gained_active, | 980 void Shell::OnWindowActivated(aura::Window* gained_active, |
| 980 aura::Window* lost_active) { | 981 aura::Window* lost_active) { |
| 981 if (gained_active) | 982 if (gained_active) |
| 982 target_root_window_ = gained_active->GetRootWindow(); | 983 target_root_window_ = gained_active->GetRootWindow(); |
| 983 } | 984 } |
| 984 | 985 |
| 985 } // namespace ash | 986 } // namespace ash |
| OLD | NEW |