blob: b84beec6359e5c70d553701b54bff620d83a2e36 [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"
Mario Sanchez Prada90d2f462019-10-28 20:36:3515#include "mojo/public/cpp/bindings/pending_remote.h"
Shawn Gallea0a2ee0a2018-11-05 18:55:0416#include "ui/aura/client/drag_drop_delegate.h"
17#include "ui/base/cursor/cursor.h"
Shawn Gallea0a2ee0a2018-11-05 18:55:0418
19namespace ash {
20class TabletModeObserver;
21}
22
23namespace aura {
Shawn Gallea0a2ee0a2018-11-05 18:55:0424class Window;
25namespace client {
26class CursorClient;
27class FocusChangeObserver;
28} // namespace client
29} // namespace aura
30
31namespace wm {
32class ActivationChangeObserver;
33}
34
35namespace display {
36class ManagedDisplayInfo;
37}
38
39namespace ui {
40class EventHandler;
41class DropTargetEvent;
42} // namespace ui
43
44namespace wm {
45class ActivationChangeObserver;
46}
47
48namespace exo {
49
50// A ChromeOS-specific helper class for accessing WindowManager related
51// features.
kylechar5361171352019-04-26 18:23:1252class WMHelperChromeOS : public WMHelper, public VSyncTimingManager::Delegate {
Shawn Gallea0a2ee0a2018-11-05 18:55:0453 public:
Jun Mukai1f426ff2019-05-16 18:19:2454 WMHelperChromeOS();
Shawn Gallea0a2ee0a2018-11-05 18:55:0455 ~WMHelperChromeOS() override;
56 static WMHelperChromeOS* GetInstance();
57 void AddTabletModeObserver(ash::TabletModeObserver* observer);
58 void RemoveTabletModeObserver(ash::TabletModeObserver* observer);
59 void AddDisplayConfigurationObserver(
60 ash::WindowTreeHostManager::Observer* observer);
61 void RemoveDisplayConfigurationObserver(
62 ash::WindowTreeHostManager::Observer* observer);
63
64 // Overridden from WMHelper
Shawn Gallea0a2ee0a2018-11-05 18:55:0465 void AddActivationObserver(wm::ActivationChangeObserver* observer) override;
66 void RemoveActivationObserver(
67 wm::ActivationChangeObserver* observer) override;
68 void AddFocusObserver(aura::client::FocusChangeObserver* observer) override;
69 void RemoveFocusObserver(
70 aura::client::FocusChangeObserver* observer) override;
71 void AddDragDropObserver(DragDropObserver* observer) override;
72 void RemoveDragDropObserver(DragDropObserver* observer) override;
73 void SetDragDropDelegate(aura::Window*) override;
74 void ResetDragDropDelegate(aura::Window*) override;
kylechar5361171352019-04-26 18:23:1275 VSyncTimingManager& GetVSyncTimingManager() override;
Shawn Gallea0a2ee0a2018-11-05 18:55:0476
77 const display::ManagedDisplayInfo& GetDisplayInfo(
78 int64_t display_id) const override;
79 const std::vector<uint8_t>& GetDisplayIdentificationData(
80 int64_t display_id) const override;
Daniel Nicoarae3befc02019-06-27 19:46:1081 bool GetActiveModeForDisplayId(
82 int64_t display_id,
83 display::ManagedDisplayMode* mode) const override;
Shawn Gallea0a2ee0a2018-11-05 18:55:0484
85 aura::Window* GetPrimaryDisplayContainer(int container_id) override;
86 aura::Window* GetActiveWindow() const override;
87 aura::Window* GetFocusedWindow() const override;
Shawn Gallea356772172018-11-06 20:32:1388 aura::Window* GetRootWindowForNewWindows() const override;
Shawn Gallea0a2ee0a2018-11-05 18:55:0489 aura::client::CursorClient* GetCursorClient() override;
90 void AddPreTargetHandler(ui::EventHandler* handler) override;
91 void PrependPreTargetHandler(ui::EventHandler* handler) override;
92 void RemovePreTargetHandler(ui::EventHandler* handler) override;
93 void AddPostTargetHandler(ui::EventHandler* handler) override;
94 void RemovePostTargetHandler(ui::EventHandler* handler) override;
Mitsuru Oshima9e05edd2019-06-17 19:35:3995 bool InTabletMode() const override;
Shawn Gallea0a2ee0a2018-11-05 18:55:0496 double GetDefaultDeviceScaleFactor() const override;
Tetsui Ohkubo120b98b32019-06-13 01:29:1897 void SetImeBlocked(aura::Window* window, bool ime_blocked) override;
98 bool IsImeBlocked(aura::Window* window) const override;
Shawn Gallea0a2ee0a2018-11-05 18:55:0499
Shawn Galleafde3d8f2018-12-04 21:17:55100 LifetimeManager* GetLifetimeManager() override;
Daniel Nicoara28545262018-12-05 22:31:50101 aura::client::CaptureClient* GetCaptureClient() override;
Shawn Galleafde3d8f2018-12-04 21:17:55102
Shawn Gallea0a2ee0a2018-11-05 18:55:04103 // Overridden from aura::client::DragDropDelegate:
104 void OnDragEntered(const ui::DropTargetEvent& event) override;
105 int OnDragUpdated(const ui::DropTargetEvent& event) override;
106 void OnDragExited() override;
Navid Zolghadr0beb8292019-07-08 18:54:04107 int OnPerformDrop(const ui::DropTargetEvent& event,
108 std::unique_ptr<ui::OSExchangeData> data) override;
Shawn Gallea0a2ee0a2018-11-05 18:55:04109
kylechar5361171352019-04-26 18:23:12110 // Overridden from VSyncTimingManager::Delegate:
111 void AddVSyncParameterObserver(
Mario Sanchez Prada90d2f462019-10-28 20:36:35112 mojo::PendingRemote<viz::mojom::VSyncParameterObserver> observer)
113 override;
kylechar5361171352019-04-26 18:23:12114
Shawn Gallea0a2ee0a2018-11-05 18:55:04115 private:
116 base::ObserverList<DragDropObserver>::Unchecked drag_drop_observers_;
Shawn Galleafde3d8f2018-12-04 21:17:55117 LifetimeManager lifetime_manager_;
kylechar5361171352019-04-26 18:23:12118 VSyncTimingManager vsync_timing_manager_;
Shawn Gallea0a2ee0a2018-11-05 18:55:04119
120 DISALLOW_COPY_AND_ASSIGN(WMHelperChromeOS);
121};
122
123} // namespace exo
124
125#endif // COMPONENTS_EXO_WM_HELPER_CHROMEOS_H_