blob: b3ae59f08f4adf3e3aebb938047cbfaddda2bf58 [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"
13#include "components/exo/wm_helper.h"
14#include "ui/aura/client/drag_drop_delegate.h"
15#include "ui/base/cursor/cursor.h"
16#include "ui/compositor/compositor_vsync_manager.h"
17
18namespace ash {
19class TabletModeObserver;
20}
21
22namespace aura {
23class env;
24class 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.
52class WMHelperChromeOS : public WMHelper {
53 public:
54 explicit WMHelperChromeOS(aura::Env* env);
55 ~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
65 aura::Env* env() override;
66 void AddActivationObserver(wm::ActivationChangeObserver* observer) override;
67 void RemoveActivationObserver(
68 wm::ActivationChangeObserver* observer) override;
69 void AddFocusObserver(aura::client::FocusChangeObserver* observer) override;
70 void RemoveFocusObserver(
71 aura::client::FocusChangeObserver* observer) override;
72 void AddDragDropObserver(DragDropObserver* observer) override;
73 void RemoveDragDropObserver(DragDropObserver* observer) override;
74 void SetDragDropDelegate(aura::Window*) override;
75 void ResetDragDropDelegate(aura::Window*) override;
76 void AddVSyncObserver(
77 ui::CompositorVSyncManager::Observer* observer) override;
78 void RemoveVSyncObserver(
79 ui::CompositorVSyncManager::Observer* observer) override;
80
81 const display::ManagedDisplayInfo& GetDisplayInfo(
82 int64_t display_id) const override;
83 const std::vector<uint8_t>& GetDisplayIdentificationData(
84 int64_t display_id) const override;
85
86 aura::Window* GetPrimaryDisplayContainer(int container_id) override;
87 aura::Window* GetActiveWindow() const override;
88 aura::Window* GetFocusedWindow() const override;
Shawn Gallea356772172018-11-06 20:32:1389 aura::Window* GetRootWindowForNewWindows() const override;
Shawn Gallea0a2ee0a2018-11-05 18:55:0490 aura::client::CursorClient* GetCursorClient() override;
91 void AddPreTargetHandler(ui::EventHandler* handler) override;
92 void PrependPreTargetHandler(ui::EventHandler* handler) override;
93 void RemovePreTargetHandler(ui::EventHandler* handler) override;
94 void AddPostTargetHandler(ui::EventHandler* handler) override;
95 void RemovePostTargetHandler(ui::EventHandler* handler) override;
96 bool IsTabletModeWindowManagerEnabled() const override;
97 double GetDefaultDeviceScaleFactor() const override;
98
99 // Overridden from aura::client::DragDropDelegate:
100 void OnDragEntered(const ui::DropTargetEvent& event) override;
101 int OnDragUpdated(const ui::DropTargetEvent& event) override;
102 void OnDragExited() override;
103 int OnPerformDrop(const ui::DropTargetEvent& event) override;
104
105 private:
106 base::ObserverList<DragDropObserver>::Unchecked drag_drop_observers_;
107 scoped_refptr<ui::CompositorVSyncManager> vsync_manager_;
108 aura::Env* const env_;
109
110 DISALLOW_COPY_AND_ASSIGN(WMHelperChromeOS);
111};
112
113} // namespace exo
114
115#endif // COMPONENTS_EXO_WM_HELPER_CHROMEOS_H_