| 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 | 8 |
| 9 #include "ash/app_list/app_list.h" | 9 #include "ash/app_list/app_list.h" |
| 10 #include "ash/ash_switches.h" | 10 #include "ash/ash_switches.h" |
| 11 #include "ash/desktop_background/desktop_background_controller.h" | 11 #include "ash/desktop_background/desktop_background_controller.h" |
| 12 #include "ash/desktop_background/desktop_background_resources.h" | 12 #include "ash/desktop_background/desktop_background_resources.h" |
| 13 #include "ash/desktop_background/desktop_background_view.h" | 13 #include "ash/desktop_background/desktop_background_view.h" |
| 14 #include "ash/drag_drop/drag_drop_controller.h" | 14 #include "ash/drag_drop/drag_drop_controller.h" |
| 15 #include "ash/focus_cycler.h" | 15 #include "ash/focus_cycler.h" |
| 16 #include "ash/ime/input_method_event_filter.h" | 16 #include "ash/ime/input_method_event_filter.h" |
| 17 #include "ash/launcher/launcher.h" | 17 #include "ash/launcher/launcher.h" |
| 18 #include "ash/monitor/multi_monitor_manager.h" |
| 19 #include "ash/monitor/monitor_controller.h" |
| 18 #include "ash/screen_ash.h" | 20 #include "ash/screen_ash.h" |
| 19 #include "ash/shell_delegate.h" | 21 #include "ash/shell_delegate.h" |
| 20 #include "ash/shell_factory.h" | 22 #include "ash/shell_factory.h" |
| 21 #include "ash/shell_window_ids.h" | 23 #include "ash/shell_window_ids.h" |
| 22 #include "ash/system/audio/tray_volume.h" | 24 #include "ash/system/audio/tray_volume.h" |
| 23 #include "ash/system/brightness/tray_brightness.h" | 25 #include "ash/system/brightness/tray_brightness.h" |
| 24 #include "ash/system/ime/tray_ime.h" | 26 #include "ash/system/ime/tray_ime.h" |
| 25 #include "ash/system/network/tray_network.h" | 27 #include "ash/system/network/tray_network.h" |
| 26 #include "ash/system/power/power_status_observer.h" | 28 #include "ash/system/power/power_status_observer.h" |
| 27 #include "ash/system/power/power_supply_status.h" | 29 #include "ash/system/power/power_supply_status.h" |
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 402 } | 404 } |
| 403 | 405 |
| 404 internal::WorkspaceController* Shell::TestApi::workspace_controller() { | 406 internal::WorkspaceController* Shell::TestApi::workspace_controller() { |
| 405 return shell_->workspace_controller_.get(); | 407 return shell_->workspace_controller_.get(); |
| 406 } | 408 } |
| 407 | 409 |
| 408 //////////////////////////////////////////////////////////////////////////////// | 410 //////////////////////////////////////////////////////////////////////////////// |
| 409 // Shell, public: | 411 // Shell, public: |
| 410 | 412 |
| 411 Shell::Shell(ShellDelegate* delegate) | 413 Shell::Shell(ShellDelegate* delegate) |
| 412 : root_window_(aura::Env::GetInstance()->monitor_manager()-> | 414 : root_window_(aura::MonitorManager::CreateRootWindowForPrimaryMonitor()), |
| 413 CreateRootWindowForPrimaryMonitor()), | |
| 414 screen_(new ScreenAsh(root_window_.get())), | 415 screen_(new ScreenAsh(root_window_.get())), |
| 415 root_filter_(NULL), | 416 root_filter_(NULL), |
| 416 delegate_(delegate), | 417 delegate_(delegate), |
| 417 shelf_(NULL), | 418 shelf_(NULL), |
| 418 root_window_layout_(NULL), | 419 root_window_layout_(NULL), |
| 419 status_widget_(NULL) { | 420 status_widget_(NULL) { |
| 420 gfx::Screen::SetInstance(screen_); | 421 gfx::Screen::SetInstance(screen_); |
| 421 ui_controls::InstallUIControlsAura(CreateUIControlsAura(root_window_.get())); | 422 ui_controls::InstallUIControlsAura(CreateUIControlsAura(root_window_.get())); |
| 422 aura::Env::GetInstance()->monitor_manager()->AddObserver(this); | |
| 423 } | 423 } |
| 424 | 424 |
| 425 Shell::~Shell() { | 425 Shell::~Shell() { |
| 426 aura::Env::GetInstance()->monitor_manager()->RemoveObserver(this); | |
| 427 RemoveRootWindowEventFilter(partial_screenshot_filter_.get()); | 426 RemoveRootWindowEventFilter(partial_screenshot_filter_.get()); |
| 428 RemoveRootWindowEventFilter(input_method_filter_.get()); | 427 RemoveRootWindowEventFilter(input_method_filter_.get()); |
| 429 RemoveRootWindowEventFilter(window_modality_controller_.get()); | 428 RemoveRootWindowEventFilter(window_modality_controller_.get()); |
| 430 #if !defined(OS_MACOSX) | 429 #if !defined(OS_MACOSX) |
| 431 RemoveRootWindowEventFilter(accelerator_filter_.get()); | 430 RemoveRootWindowEventFilter(accelerator_filter_.get()); |
| 432 #endif | 431 #endif |
| 433 | 432 |
| 434 // Close background widget now so that the focus manager of the | 433 // Close background widget now so that the focus manager of the |
| 435 // widget gets deleted in the final message loop run. | 434 // widget gets deleted in the final message loop run. |
| 436 root_window_layout_->SetBackgroundWidget(NULL); | 435 root_window_layout_->SetBackgroundWidget(NULL); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 455 } | 454 } |
| 456 | 455 |
| 457 // These need a valid Shell instance to clean up properly, so explicitly | 456 // These need a valid Shell instance to clean up properly, so explicitly |
| 458 // delete them before invalidating the instance. | 457 // delete them before invalidating the instance. |
| 459 // Alphabetical. | 458 // Alphabetical. |
| 460 activation_controller_.reset(); | 459 activation_controller_.reset(); |
| 461 drag_drop_controller_.reset(); | 460 drag_drop_controller_.reset(); |
| 462 resize_shadow_controller_.reset(); | 461 resize_shadow_controller_.reset(); |
| 463 shadow_controller_.reset(); | 462 shadow_controller_.reset(); |
| 464 window_cycle_controller_.reset(); | 463 window_cycle_controller_.reset(); |
| 464 monitor_controller_.reset(); |
| 465 | 465 |
| 466 // Launcher widget has a InputMethodBridge that references to | 466 // Launcher widget has a InputMethodBridge that references to |
| 467 // input_method_filter_'s input_method_. So explicitly release launcher_ | 467 // input_method_filter_'s input_method_. So explicitly release launcher_ |
| 468 // before input_method_filter_. And this needs to be after we delete all | 468 // before input_method_filter_. And this needs to be after we delete all |
| 469 // containers in case there are still live browser windows which access | 469 // containers in case there are still live browser windows which access |
| 470 // LauncherModel during close. | 470 // LauncherModel during close. |
| 471 launcher_.reset(); | 471 launcher_.reset(); |
| 472 | 472 |
| 473 DCHECK(instance_ == this); | 473 DCHECK(instance_ == this); |
| 474 instance_ = NULL; | 474 instance_ = NULL; |
| 475 } | 475 } |
| 476 | 476 |
| 477 // static | 477 // static |
| 478 Shell* Shell::CreateInstance(ShellDelegate* delegate) { | 478 Shell* Shell::CreateInstance(ShellDelegate* delegate) { |
| 479 CHECK(!instance_); | 479 CHECK(!instance_); |
| 480 aura::Env::GetInstance()->SetMonitorManager( |
| 481 new internal::MultiMonitorManager()); |
| 480 instance_ = new Shell(delegate); | 482 instance_ = new Shell(delegate); |
| 481 instance_->Init(); | 483 instance_->Init(); |
| 482 return instance_; | 484 return instance_; |
| 483 } | 485 } |
| 484 | 486 |
| 485 // static | 487 // static |
| 486 Shell* Shell::GetInstance() { | 488 Shell* Shell::GetInstance() { |
| 487 DCHECK(instance_); | 489 DCHECK(instance_); |
| 488 return instance_; | 490 return instance_; |
| 489 } | 491 } |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 627 | 629 |
| 628 visibility_controller_.reset(new internal::VisibilityController); | 630 visibility_controller_.reset(new internal::VisibilityController); |
| 629 | 631 |
| 630 tooltip_controller_.reset(new internal::TooltipController); | 632 tooltip_controller_.reset(new internal::TooltipController); |
| 631 AddRootWindowEventFilter(tooltip_controller_.get()); | 633 AddRootWindowEventFilter(tooltip_controller_.get()); |
| 632 | 634 |
| 633 drag_drop_controller_.reset(new internal::DragDropController); | 635 drag_drop_controller_.reset(new internal::DragDropController); |
| 634 power_button_controller_.reset(new PowerButtonController); | 636 power_button_controller_.reset(new PowerButtonController); |
| 635 video_detector_.reset(new VideoDetector); | 637 video_detector_.reset(new VideoDetector); |
| 636 window_cycle_controller_.reset(new WindowCycleController); | 638 window_cycle_controller_.reset(new WindowCycleController); |
| 639 monitor_controller_.reset(new internal::MonitorController); |
| 637 } | 640 } |
| 638 | 641 |
| 639 aura::Window* Shell::GetContainer(int container_id) { | 642 aura::Window* Shell::GetContainer(int container_id) { |
| 640 return const_cast<aura::Window*>( | 643 return const_cast<aura::Window*>( |
| 641 const_cast<const Shell*>(this)->GetContainer(container_id)); | 644 const_cast<const Shell*>(this)->GetContainer(container_id)); |
| 642 } | 645 } |
| 643 | 646 |
| 644 const aura::Window* Shell::GetContainer(int container_id) const { | 647 const aura::Window* Shell::GetContainer(int container_id) const { |
| 645 return GetRootWindow()->GetChildById(container_id); | 648 return GetRootWindow()->GetChildById(container_id); |
| 646 } | 649 } |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 719 | 722 |
| 720 void Shell::RemoveShellObserver(ShellObserver* observer) { | 723 void Shell::RemoveShellObserver(ShellObserver* observer) { |
| 721 observers_.RemoveObserver(observer); | 724 observers_.RemoveObserver(observer); |
| 722 } | 725 } |
| 723 | 726 |
| 724 int Shell::GetGridSize() const { | 727 int Shell::GetGridSize() const { |
| 725 return workspace_controller_->workspace_manager()->grid_size(); | 728 return workspace_controller_->workspace_manager()->grid_size(); |
| 726 } | 729 } |
| 727 | 730 |
| 728 //////////////////////////////////////////////////////////////////////////////// | 731 //////////////////////////////////////////////////////////////////////////////// |
| 729 // Shell, aura::MonitorObserver implementation: | |
| 730 | |
| 731 void Shell::OnMonitorBoundsChanged(const aura::Monitor* monitor) { | |
| 732 if (aura::RootWindow::use_fullscreen_host_window()) | |
| 733 root_window_->SetHostSize(monitor->size()); | |
| 734 } | |
| 735 | |
| 736 //////////////////////////////////////////////////////////////////////////////// | |
| 737 // Shell, private: | 732 // Shell, private: |
| 738 | 733 |
| 739 void Shell::InitLayoutManagers() { | 734 void Shell::InitLayoutManagers() { |
| 740 DCHECK(root_window_layout_); | 735 DCHECK(root_window_layout_); |
| 741 DCHECK(status_widget_); | 736 DCHECK(status_widget_); |
| 742 | 737 |
| 743 internal::ShelfLayoutManager* shelf_layout_manager = | 738 internal::ShelfLayoutManager* shelf_layout_manager = |
| 744 new internal::ShelfLayoutManager(launcher_->widget(), status_widget_); | 739 new internal::ShelfLayoutManager(launcher_->widget(), status_widget_); |
| 745 GetContainer(internal::kShellWindowId_LauncherContainer)-> | 740 GetContainer(internal::kShellWindowId_LauncherContainer)-> |
| 746 SetLayoutManager(shelf_layout_manager); | 741 SetLayoutManager(shelf_layout_manager); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 764 // Create the desktop background image. | 759 // Create the desktop background image. |
| 765 desktop_background_controller_->SetDefaultDesktopBackgroundImage(); | 760 desktop_background_controller_->SetDefaultDesktopBackgroundImage(); |
| 766 } | 761 } |
| 767 | 762 |
| 768 void Shell::DisableWorkspaceGridLayout() { | 763 void Shell::DisableWorkspaceGridLayout() { |
| 769 if (workspace_controller_.get()) | 764 if (workspace_controller_.get()) |
| 770 workspace_controller_->workspace_manager()->set_grid_size(0); | 765 workspace_controller_->workspace_manager()->set_grid_size(0); |
| 771 } | 766 } |
| 772 | 767 |
| 773 } // namespace ash | 768 } // namespace ash |
| OLD | NEW |