blob: 8ce2a9949eff7d8c5a9c8ae0d05c4683f8566fe4 [file] [log] [blame]
Shawn Gallea0a2ee0a2018-11-05 18:55:041// Copyright 2018 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef COMPONENTS_EXO_WM_HELPER_CHROMEOS_H_
6#define COMPONENTS_EXO_WM_HELPER_CHROMEOS_H_
7
8#include <vector>
9
10#include "ash/display/window_tree_host_manager.h"
11#include "base/macros.h"
12#include "base/observer_list.h"
kylechar5361171352019-04-26 18:23:1213#include "components/exo/vsync_timing_manager.h"
Shawn Gallea0a2ee0a2018-11-05 18:55:0414#include "components/exo/wm_helper.h"
15#include "ui/aura/client/drag_drop_delegate.h"
16#include "ui/base/cursor/cursor.h"
Shawn Gallea0a2ee0a2018-11-05 18:55:0417
18namespace ash {
19class TabletModeObserver;
20}
21
22namespace aura {
Shawn Gallea0a2ee0a2018-11-05 18:55:0423class Window;
24namespace client {
25class CursorClient;
26class FocusChangeObserver;
27} // namespace client
28} // namespace aura
29
30namespace wm {
31class ActivationChangeObserver;
32}
33
34namespace display {
35class ManagedDisplayInfo;
36}
37
38namespace ui {
39class EventHandler;
40class DropTargetEvent;
41} // namespace ui
42
43namespace wm {
44class ActivationChangeObserver;
45}
46
47namespace exo {
48
49// A ChromeOS-specific helper class for accessing WindowManager related
50// features.
kylechar5361171352019-04-26 18:23:1251class WMHelperChromeOS : public WMHelper, public VSyncTimingManager::Delegate {
Shawn Gallea0a2ee0a2018-11-05 18:55:0452 public:
Jun Mukai1f426ff2019-05-16 18:19:2453 WMHelperChromeOS();
Shawn Gallea0a2ee0a2018-11-05 18:55:0454 ~WMHelperChromeOS() override;
55 static WMHelperChromeOS* GetInstance();
56 void AddTabletModeObserver(ash::TabletModeObserver* observer);
57 void RemoveTabletModeObserver(ash::TabletModeObserver* observer);
58 void AddDisplayConfigurationObserver(
59 ash::WindowTreeHostManager::Observer* observer);
60 void RemoveDisplayConfigurationObserver(
61 ash::WindowTreeHostManager::Observer* observer);
62
63 // Overridden from WMHelper
Shawn Gallea0a2ee0a2018-11-05 18:55:0464 void AddActivationObserver(wm::ActivationChangeObserver* observer) override;
65 void RemoveActivationObserver(
66 wm::ActivationChangeObserver* observer) override;
67 void AddFocusObserver(aura::client::FocusChangeObserver* observer) override;
68 void RemoveFocusObserver(
69 aura::client::FocusChangeObserver* observer) override;
70 void AddDragDropObserver(DragDropObserver* observer) override;
71 void RemoveDragDropObserver(DragDropObserver* observer) override;
72 void SetDragDropDelegate(aura::Window*) override;
73 void ResetDragDropDelegate(aura::Window*) override;
kylechar5361171352019-04-26 18:23:1274 VSyncTimingManager& GetVSyncTimingManager() override;
Shawn Gallea0a2ee0a2018-11-05 18:55:0475
76 const display::ManagedDisplayInfo& GetDisplayInfo(
77 int64_t display_id) const override;
78 const std::vector<uint8_t>& GetDisplayIdentificationData(
79 int64_t display_id) const override;
Daniel Nicoarae3befc02019-06-27 19:46:1080 bool GetActiveModeForDisplayId(
81 int64_t display_id,
82 display::ManagedDisplayMode* mode) const override;
Shawn Gallea0a2ee0a2018-11-05 18:55:0483
84 aura::Window* GetPrimaryDisplayContainer(int container_id) override;
85 aura::Window* GetActiveWindow() const override;
86 aura::Window* GetFocusedWindow() const override;
Shawn Gallea356772172018-11-06 20:32:1387 aura::Window* GetRootWindowForNewWindows() const override;
Shawn Gallea0a2ee0a2018-11-05 18:55:0488 aura::client::CursorClient* GetCursorClient() override;
89 void AddPreTargetHandler(ui::EventHandler* handler) override;
90 void PrependPreTargetHandler(ui::EventHandler* handler) override;
91 void RemovePreTargetHandler(ui::EventHandler* handler) override;
92 void AddPostTargetHandler(ui::EventHandler* handler) override;
93 void RemovePostTargetHandler(ui::EventHandler* handler) override;
Mitsuru Oshima9e05edd2019-06-17 19:35:3994 bool InTabletMode() const override;
Shawn Gallea0a2ee0a2018-11-05 18:55:0495 double GetDefaultDeviceScaleFactor() const override;
Tetsui Ohkubo120b98b32019-06-13 01:29:1896 void SetImeBlocked(aura::Window* window, bool ime_blocked) override;
97 bool IsImeBlocked(aura::Window* window) const override;
Shawn Gallea0a2ee0a2018-11-05 18:55:0498
Shawn Galleafde3d8f2018-12-04 21:17:5599 LifetimeManager* GetLifetimeManager() override;
Daniel Nicoara28545262018-12-05 22:31:50100 aura::client::CaptureClient* GetCaptureClient() override;
Shawn Galleafde3d8f2018-12-04 21:17:55101
Shawn Gallea0a2ee0a2018-11-05 18:55:04102 // Overridden from aura::client::DragDropDelegate:
103 void OnDragEntered(const ui::DropTargetEvent& event) override;
104 int OnDragUpdated(const ui::DropTargetEvent& event) override;
105 void OnDragExited() override;
106 int OnPerformDrop(const ui::DropTargetEvent& event) override;
107
kylechar5361171352019-04-26 18:23:12108 // Overridden from VSyncTimingManager::Delegate:
109 void AddVSyncParameterObserver(
110 viz::mojom::VSyncParameterObserverPtr observer) override;
111
Shawn Gallea0a2ee0a2018-11-05 18:55:04112 private:
113 base::ObserverList<DragDropObserver>::Unchecked drag_drop_observers_;
Shawn Galleafde3d8f2018-12-04 21:17:55114 LifetimeManager lifetime_manager_;
kylechar5361171352019-04-26 18:23:12115 VSyncTimingManager vsync_timing_manager_;
Shawn Gallea0a2ee0a2018-11-05 18:55:04116
117 DISALLOW_COPY_AND_ASSIGN(WMHelperChromeOS);
118};
119
120} // namespace exo
121
122#endif // COMPONENTS_EXO_WM_HELPER_CHROMEOS_H_