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/network/tray_network.h" | 26 #include "ash/system/network/tray_network.h" |
25 #include "ash/system/power/power_status_observer.h" | 27 #include "ash/system/power/power_status_observer.h" |
26 #include "ash/system/power/power_supply_status.h" | 28 #include "ash/system/power/power_supply_status.h" |
27 #include "ash/system/power/tray_power_date.h" | 29 #include "ash/system/power/tray_power_date.h" |
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
398 | 400 |
399 internal::WorkspaceController* Shell::TestApi::workspace_controller() { | 401 internal::WorkspaceController* Shell::TestApi::workspace_controller() { |
400 return shell_->workspace_controller_.get(); | 402 return shell_->workspace_controller_.get(); |
401 } | 403 } |
402 | 404 |
403 //////////////////////////////////////////////////////////////////////////////// | 405 //////////////////////////////////////////////////////////////////////////////// |
404 // Shell, public: | 406 // Shell, public: |
405 | 407 |
406 Shell::Shell(ShellDelegate* delegate) | 408 Shell::Shell(ShellDelegate* delegate) |
407 : root_window_(aura::Env::GetInstance()->monitor_manager()-> | 409 : root_window_(aura::Env::GetInstance()->monitor_manager()-> |
408 CreateRootWindowForPrimaryMonitor()), | 410 CreateRootWindowForPrimaryMonitor()), |
Ben Goodger (Google)
2012/03/20 17:09:02
and replace this with your helper function too (th
oshima
2012/03/20 19:26:36
Done.
| |
409 screen_(new ScreenAsh(root_window_.get())), | 411 screen_(new ScreenAsh(root_window_.get())), |
410 root_filter_(NULL), | 412 root_filter_(NULL), |
411 delegate_(delegate), | 413 delegate_(delegate), |
412 shelf_(NULL), | 414 shelf_(NULL), |
413 root_window_layout_(NULL), | 415 root_window_layout_(NULL), |
414 status_widget_(NULL) { | 416 status_widget_(NULL) { |
415 gfx::Screen::SetInstance(screen_); | 417 gfx::Screen::SetInstance(screen_); |
416 ui_controls::InstallUIControlsAura(CreateUIControlsAura(root_window_.get())); | 418 ui_controls::InstallUIControlsAura(CreateUIControlsAura(root_window_.get())); |
417 aura::Env::GetInstance()->monitor_manager()->AddObserver(this); | |
418 } | 419 } |
419 | 420 |
420 Shell::~Shell() { | 421 Shell::~Shell() { |
421 aura::Env::GetInstance()->monitor_manager()->RemoveObserver(this); | |
422 RemoveRootWindowEventFilter(partial_screenshot_filter_.get()); | 422 RemoveRootWindowEventFilter(partial_screenshot_filter_.get()); |
423 RemoveRootWindowEventFilter(input_method_filter_.get()); | 423 RemoveRootWindowEventFilter(input_method_filter_.get()); |
424 RemoveRootWindowEventFilter(window_modality_controller_.get()); | 424 RemoveRootWindowEventFilter(window_modality_controller_.get()); |
425 #if !defined(OS_MACOSX) | 425 #if !defined(OS_MACOSX) |
426 RemoveRootWindowEventFilter(accelerator_filter_.get()); | 426 RemoveRootWindowEventFilter(accelerator_filter_.get()); |
427 #endif | 427 #endif |
428 | 428 |
429 // Close background widget now so that the focus manager of the | 429 // Close background widget now so that the focus manager of the |
430 // widget gets deleted in the final message loop run. | 430 // widget gets deleted in the final message loop run. |
431 root_window_layout_->SetBackgroundWidget(NULL); | 431 root_window_layout_->SetBackgroundWidget(NULL); |
(...skipping 18 matching lines...) Expand all Loading... | |
450 } | 450 } |
451 | 451 |
452 // These need a valid Shell instance to clean up properly, so explicitly | 452 // These need a valid Shell instance to clean up properly, so explicitly |
453 // delete them before invalidating the instance. | 453 // delete them before invalidating the instance. |
454 // Alphabetical. | 454 // Alphabetical. |
455 activation_controller_.reset(); | 455 activation_controller_.reset(); |
456 drag_drop_controller_.reset(); | 456 drag_drop_controller_.reset(); |
457 resize_shadow_controller_.reset(); | 457 resize_shadow_controller_.reset(); |
458 shadow_controller_.reset(); | 458 shadow_controller_.reset(); |
459 window_cycle_controller_.reset(); | 459 window_cycle_controller_.reset(); |
460 monitor_controller_.reset(); | |
460 | 461 |
461 // Launcher widget has a InputMethodBridge that references to | 462 // Launcher widget has a InputMethodBridge that references to |
462 // input_method_filter_'s input_method_. So explicitly release launcher_ | 463 // input_method_filter_'s input_method_. So explicitly release launcher_ |
463 // before input_method_filter_. And this needs to be after we delete all | 464 // before input_method_filter_. And this needs to be after we delete all |
464 // containers in case there are still live browser windows which access | 465 // containers in case there are still live browser windows which access |
465 // LauncherModel during close. | 466 // LauncherModel during close. |
466 launcher_.reset(); | 467 launcher_.reset(); |
467 | 468 |
468 DCHECK(instance_ == this); | 469 DCHECK(instance_ == this); |
469 instance_ = NULL; | 470 instance_ = NULL; |
470 } | 471 } |
471 | 472 |
472 // static | 473 // static |
473 Shell* Shell::CreateInstance(ShellDelegate* delegate) { | 474 Shell* Shell::CreateInstance(ShellDelegate* delegate) { |
474 CHECK(!instance_); | 475 CHECK(!instance_); |
476 aura::Env::GetInstance()->SetMonitorManager( | |
477 new internal::MultiMonitorManager()); | |
475 instance_ = new Shell(delegate); | 478 instance_ = new Shell(delegate); |
476 instance_->Init(); | 479 instance_->Init(); |
477 return instance_; | 480 return instance_; |
478 } | 481 } |
479 | 482 |
480 // static | 483 // static |
481 Shell* Shell::GetInstance() { | 484 Shell* Shell::GetInstance() { |
482 DCHECK(instance_); | 485 DCHECK(instance_); |
483 return instance_; | 486 return instance_; |
484 } | 487 } |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
618 | 621 |
619 visibility_controller_.reset(new internal::VisibilityController); | 622 visibility_controller_.reset(new internal::VisibilityController); |
620 | 623 |
621 tooltip_controller_.reset(new internal::TooltipController); | 624 tooltip_controller_.reset(new internal::TooltipController); |
622 AddRootWindowEventFilter(tooltip_controller_.get()); | 625 AddRootWindowEventFilter(tooltip_controller_.get()); |
623 | 626 |
624 drag_drop_controller_.reset(new internal::DragDropController); | 627 drag_drop_controller_.reset(new internal::DragDropController); |
625 power_button_controller_.reset(new PowerButtonController); | 628 power_button_controller_.reset(new PowerButtonController); |
626 video_detector_.reset(new VideoDetector); | 629 video_detector_.reset(new VideoDetector); |
627 window_cycle_controller_.reset(new WindowCycleController); | 630 window_cycle_controller_.reset(new WindowCycleController); |
631 monitor_controller_.reset(new internal::MonitorController); | |
628 } | 632 } |
629 | 633 |
630 aura::Window* Shell::GetContainer(int container_id) { | 634 aura::Window* Shell::GetContainer(int container_id) { |
631 return const_cast<aura::Window*>( | 635 return const_cast<aura::Window*>( |
632 const_cast<const Shell*>(this)->GetContainer(container_id)); | 636 const_cast<const Shell*>(this)->GetContainer(container_id)); |
633 } | 637 } |
634 | 638 |
635 const aura::Window* Shell::GetContainer(int container_id) const { | 639 const aura::Window* Shell::GetContainer(int container_id) const { |
636 return GetRootWindow()->GetChildById(container_id); | 640 return GetRootWindow()->GetChildById(container_id); |
637 } | 641 } |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
710 | 714 |
711 void Shell::RemoveShellObserver(ShellObserver* observer) { | 715 void Shell::RemoveShellObserver(ShellObserver* observer) { |
712 observers_.RemoveObserver(observer); | 716 observers_.RemoveObserver(observer); |
713 } | 717 } |
714 | 718 |
715 int Shell::GetGridSize() const { | 719 int Shell::GetGridSize() const { |
716 return workspace_controller_->workspace_manager()->grid_size(); | 720 return workspace_controller_->workspace_manager()->grid_size(); |
717 } | 721 } |
718 | 722 |
719 //////////////////////////////////////////////////////////////////////////////// | 723 //////////////////////////////////////////////////////////////////////////////// |
720 // Shell, aura::MonitorObserver implementation: | |
721 | |
722 void Shell::OnMonitorBoundsChanged(const aura::Monitor* monitor) { | |
723 if (aura::RootWindow::use_fullscreen_host_window()) | |
724 root_window_->SetHostSize(monitor->size()); | |
725 } | |
726 | |
727 //////////////////////////////////////////////////////////////////////////////// | |
728 // Shell, private: | 724 // Shell, private: |
729 | 725 |
730 void Shell::InitLayoutManagers() { | 726 void Shell::InitLayoutManagers() { |
731 DCHECK(root_window_layout_); | 727 DCHECK(root_window_layout_); |
732 DCHECK(status_widget_); | 728 DCHECK(status_widget_); |
733 | 729 |
734 internal::ShelfLayoutManager* shelf_layout_manager = | 730 internal::ShelfLayoutManager* shelf_layout_manager = |
735 new internal::ShelfLayoutManager(launcher_->widget(), status_widget_); | 731 new internal::ShelfLayoutManager(launcher_->widget(), status_widget_); |
736 GetContainer(internal::kShellWindowId_LauncherContainer)-> | 732 GetContainer(internal::kShellWindowId_LauncherContainer)-> |
737 SetLayoutManager(shelf_layout_manager); | 733 SetLayoutManager(shelf_layout_manager); |
(...skipping 17 matching lines...) Expand all Loading... | |
755 // Create the desktop background image. | 751 // Create the desktop background image. |
756 desktop_background_controller_->SetDefaultDesktopBackgroundImage(); | 752 desktop_background_controller_->SetDefaultDesktopBackgroundImage(); |
757 } | 753 } |
758 | 754 |
759 void Shell::DisableWorkspaceGridLayout() { | 755 void Shell::DisableWorkspaceGridLayout() { |
760 if (workspace_controller_.get()) | 756 if (workspace_controller_.get()) |
761 workspace_controller_->workspace_manager()->set_grid_size(0); | 757 workspace_controller_->workspace_manager()->set_grid_size(0); |
762 } | 758 } |
763 | 759 |
764 } // namespace ash | 760 } // namespace ash |
OLD | NEW |