forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
simple_wm.h
146 lines (126 loc) · 5.57 KB
/
simple_wm.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// 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.
#ifndef MASH_SIMPLE_WM_SIMPLE_WM_H_
#define MASH_SIMPLE_WM_SIMPLE_WM_H_
#include <memory>
#include <utility>
#include "base/memory/ptr_util.h"
#include "base/threading/thread_task_runner_handle.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "services/service_manager/public/cpp/connector.h"
#include "services/service_manager/public/cpp/service.h"
#include "services/service_manager/public/cpp/service_context.h"
#include "ui/aura/env.h"
#include "ui/aura/mus/property_converter.h"
#include "ui/aura/mus/property_utils.h"
#include "ui/aura/mus/window_manager_delegate.h"
#include "ui/aura/mus/window_tree_client.h"
#include "ui/aura/mus/window_tree_client_delegate.h"
#include "ui/aura/mus/window_tree_host_mus.h"
#include "ui/aura/window.h"
#include "ui/display/display.h"
#include "ui/wm/core/base_focus_rules.h"
#include "ui/wm/core/capture_controller.h"
#include "ui/wm/core/wm_state.h"
namespace display {
class ScreenBase;
}
namespace views {
class AuraInit;
}
namespace wm {
class FocusController;
}
namespace simple_wm {
class SimpleWM : public service_manager::Service,
public aura::WindowTreeClientDelegate,
public aura::WindowManagerDelegate,
public wm::BaseFocusRules {
public:
SimpleWM();
~SimpleWM() override;
private:
class DisplayLayoutManager;
class FrameView;
class WindowListModel;
class WindowListModelObserver;
class WindowListView;
class WorkspaceLayoutManager;
// service_manager::Service:
void OnStart() override;
// aura::WindowTreeClientDelegate:
void OnEmbed(
std::unique_ptr<aura::WindowTreeHostMus> window_tree_host) override;
void OnLostConnection(aura::WindowTreeClient* client) override;
void OnEmbedRootDestroyed(aura::WindowTreeHostMus* window_tree_host) override;
void OnPointerEventObserved(const ui::PointerEvent& event,
aura::Window* target) override;
aura::PropertyConverter* GetPropertyConverter() override;
// aura::WindowManagerDelegate:
void SetWindowManagerClient(aura::WindowManagerClient* client) override;
void OnWmConnected() override;
void OnWmAcceleratedWidgetAvailableForDisplay(
int64_t display_id,
gfx::AcceleratedWidget widget) override {}
void OnWmSetBounds(aura::Window* window, const gfx::Rect& bounds) override;
bool OnWmSetProperty(
aura::Window* window,
const std::string& name,
std::unique_ptr<std::vector<uint8_t>>* new_data) override;
void OnWmSetModalType(aura::Window* window, ui::ModalType type) override;
void OnWmSetCanFocus(aura::Window* window, bool can_focus) override;
aura::Window* OnWmCreateTopLevelWindow(
ui::mojom::WindowType window_type,
std::map<std::string, std::vector<uint8_t>>* properties) override;
void OnWmClientJankinessChanged(const std::set<aura::Window*>& client_windows,
bool janky) override;
void OnWmBuildDragImage(const gfx::Point& screen_location,
const SkBitmap& drag_image,
const gfx::Vector2d& drag_image_offset,
ui::mojom::PointerKind source) override;
void OnWmMoveDragImage(const gfx::Point& screen_location) override;
void OnWmDestroyDragImage() override;
void OnWmWillCreateDisplay(const display::Display& display) override;
void OnWmNewDisplay(std::unique_ptr<aura::WindowTreeHostMus> window_tree_host,
const display::Display& display) override;
void OnWmDisplayRemoved(aura::WindowTreeHostMus* window_tree_host) override;
void OnWmDisplayModified(const display::Display& display) override;
void OnWmPerformMoveLoop(aura::Window* window,
ui::mojom::MoveLoopSource source,
const gfx::Point& cursor_location,
const base::Callback<void(bool)>& on_done) override;
void OnWmCancelMoveLoop(aura::Window* window) override;
void OnCursorTouchVisibleChanged(bool enabled) override;
void OnWmSetClientArea(
aura::Window* window,
const gfx::Insets& insets,
const std::vector<gfx::Rect>& additional_client_areas) override;
bool IsWindowActive(aura::Window* window) override;
void OnWmDeactivateWindow(aura::Window* window) override;
void OnWmPerformAction(aura::Window* window,
const std::string& action) override;
// wm::BaseFocusRules:
bool SupportsChildActivation(aura::Window* window) const override;
bool IsWindowConsideredVisibleForActivation(
aura::Window* window) const override;
FrameView* GetFrameViewForClientWindow(aura::Window* client_window);
void OnWindowListViewItemActivated(aura::Window* index);
std::unique_ptr<views::AuraInit> aura_init_;
wm::WMState wm_state_;
std::unique_ptr<display::ScreenBase> screen_;
aura::PropertyConverter property_converter_;
std::unique_ptr<wm::FocusController> focus_controller_;
std::unique_ptr<aura::WindowTreeHostMus> window_tree_host_;
aura::Window* display_root_ = nullptr;
aura::Window* window_root_ = nullptr;
aura::WindowManagerClient* window_manager_client_ = nullptr;
std::unique_ptr<aura::WindowTreeClient> window_tree_client_;
std::map<aura::Window*, FrameView*> client_window_to_frame_view_;
std::unique_ptr<WindowListModel> window_list_model_;
std::unique_ptr<WorkspaceLayoutManager> workspace_layout_manager_;
bool started_ = false;
DISALLOW_COPY_AND_ASSIGN(SimpleWM);
};
} // namespace simple_wm
#endif // MASH_SIMPLE_WM_SIMPLE_WM_H_