| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ash/aura/wm_root_window_controller_aura.h" |
| |
| #include "ash/aura/wm_shelf_aura.h" |
| #include "ash/aura/wm_shell_aura.h" |
| #include "ash/aura/wm_window_aura.h" |
| #include "ash/common/shelf/shelf_widget.h" |
| #include "ash/display/window_tree_host_manager.h" |
| #include "ash/root_window_controller.h" |
| #include "ash/shell.h" |
| #include "ui/aura/window.h" |
| #include "ui/aura/window_event_dispatcher.h" |
| #include "ui/aura/window_property.h" |
| #include "ui/aura/window_tree_host.h" |
| #include "ui/events/event_targeter.h" |
| #include "ui/events/event_utils.h" |
| |
| DECLARE_WINDOW_PROPERTY_TYPE(ash::WmRootWindowControllerAura*); |
| |
| namespace ash { |
| |
| // TODO(sky): it likely makes more sense to hang this off RootWindowSettings. |
| DEFINE_OWNED_WINDOW_PROPERTY_KEY(ash::WmRootWindowControllerAura, |
| kWmRootWindowControllerKey, |
| nullptr); |
| |
| WmRootWindowControllerAura::WmRootWindowControllerAura( |
| RootWindowController* root_window_controller) |
| : WmRootWindowController( |
| WmWindowAura::Get(root_window_controller->GetRootWindow())), |
| root_window_controller_(root_window_controller) { |
| root_window_controller_->GetRootWindow()->SetProperty( |
| kWmRootWindowControllerKey, this); |
| } |
| |
| WmRootWindowControllerAura::~WmRootWindowControllerAura() {} |
| |
| // static |
| const WmRootWindowControllerAura* WmRootWindowControllerAura::Get( |
| const aura::Window* window) { |
| if (!window) |
| return nullptr; |
| |
| RootWindowController* root_window_controller = |
| GetRootWindowController(window); |
| if (!root_window_controller) |
| return nullptr; |
| |
| WmRootWindowControllerAura* wm_root_window_controller = |
| root_window_controller->GetRootWindow()->GetProperty( |
| kWmRootWindowControllerKey); |
| if (wm_root_window_controller) |
| return wm_root_window_controller; |
| |
| // WmRootWindowControllerAura is owned by the RootWindowController's window. |
| return new WmRootWindowControllerAura(root_window_controller); |
| } |
| |
| bool WmRootWindowControllerAura::HasShelf() { |
| return root_window_controller_->wm_shelf_aura()->shelf_widget() != nullptr; |
| } |
| |
| WmShell* WmRootWindowControllerAura::GetShell() { |
| return WmShell::Get(); |
| } |
| |
| WmShelf* WmRootWindowControllerAura::GetShelf() { |
| return root_window_controller_->wm_shelf_aura(); |
| } |
| |
| WmWindow* WmRootWindowControllerAura::GetWindow() { |
| return WmWindowAura::Get(root_window_controller_->GetRootWindow()); |
| } |
| |
| void WmRootWindowControllerAura::ConfigureWidgetInitParamsForContainer( |
| views::Widget* widget, |
| int shell_container_id, |
| views::Widget::InitParams* init_params) { |
| init_params->parent = Shell::GetContainer( |
| root_window_controller_->GetRootWindow(), shell_container_id); |
| } |
| |
| WmWindow* WmRootWindowControllerAura::FindEventTarget( |
| const gfx::Point& location_in_screen) { |
| gfx::Point location_in_root = |
| GetWindow()->ConvertPointFromScreen(location_in_screen); |
| aura::Window* root = root_window_controller_->GetRootWindow(); |
| ui::MouseEvent test_event(ui::ET_MOUSE_MOVED, location_in_root, |
| location_in_root, ui::EventTimeForNow(), |
| ui::EF_NONE, ui::EF_NONE); |
| ui::EventTarget* event_handler = static_cast<ui::EventTarget*>(root) |
| ->GetEventTargeter() |
| ->FindTargetForEvent(root, &test_event); |
| return WmWindowAura::Get(static_cast<aura::Window*>(event_handler)); |
| } |
| |
| gfx::Point WmRootWindowControllerAura::GetLastMouseLocationInRoot() { |
| return root_window_controller_->GetHost() |
| ->dispatcher() |
| ->GetLastMouseLocationInRoot(); |
| } |
| |
| void WmRootWindowControllerAura::OnInitialWallpaperAnimationStarted() { |
| root_window_controller_->OnInitialWallpaperAnimationStarted(); |
| WmRootWindowController::OnInitialWallpaperAnimationStarted(); |
| } |
| |
| void WmRootWindowControllerAura::OnWallpaperAnimationFinished( |
| views::Widget* widget) { |
| root_window_controller_->OnWallpaperAnimationFinished(widget); |
| WmRootWindowController::OnWallpaperAnimationFinished(widget); |
| } |
| |
| bool WmRootWindowControllerAura::ShouldDestroyWindowInCloseChildWindows( |
| WmWindow* window) { |
| return WmWindowAura::GetAuraWindow(window)->owned_by_parent(); |
| } |
| |
| } // namespace ash |