Merge lp:~alan-griffiths/miral/WindowManagementPolicy-advise_begin-end into lp:miral

Proposed by Alan Griffiths
Status: Merged
Approved by: Gerry Boland
Approved revision: 205
Merged at revision: 205
Proposed branch: lp:~alan-griffiths/miral/WindowManagementPolicy-advise_begin-end
Merge into: lp:miral
Diff against target: 280 lines (+82/-13)
10 files modified
include/miral/canonical_window_manager.h (+3/-0)
include/miral/window_management_policy.h (+7/-0)
miral-kiosk/kiosk_window_manager.cpp (+8/-0)
miral-kiosk/kiosk_window_manager.h (+3/-0)
miral-qt/src/platforms/mirserver/windowmanagementpolicy.cpp (+8/-0)
miral-qt/src/platforms/mirserver/windowmanagementpolicy.h (+3/-0)
miral-shell/tiling_window_manager.cpp (+8/-0)
miral-shell/tiling_window_manager.h (+3/-0)
miral/basic_window_manager.cpp (+31/-13)
miral/canonical_window_manager.cpp (+8/-0)
To merge this branch: bzr merge lp:~alan-griffiths/miral/WindowManagementPolicy-advise_begin-end
Reviewer Review Type Date Requested Status
Gerry Boland (community) Approve
Review via email: mp+296817@code.launchpad.net

Commit message

Add WindowManagementPolicy::advise_begin/advise_end()

To post a comment you must log in.
205. By Alan Griffiths

WindowManagementPolicy::advise_begin/end()

Revision history for this message
Gerry Boland (gerboland) wrote :

Great, thank you.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'include/miral/canonical_window_manager.h'
2--- include/miral/canonical_window_manager.h 2016-06-08 15:16:20 +0000
3+++ include/miral/canonical_window_manager.h 2016-06-08 16:27:11 +0000
4@@ -60,6 +60,9 @@
5 bool handle_touch_event(MirTouchEvent const* event) override;
6 bool handle_pointer_event(MirPointerEvent const* event) override;
7
8+ void advise_begin() override;
9+ void advise_end() override;
10+
11 void advise_new_window(WindowInfo& window_info) override;
12 void advise_focus_lost(WindowInfo const& info) override;
13 void advise_focus_gained(WindowInfo const& info) override;
14
15=== modified file 'include/miral/window_management_policy.h'
16--- include/miral/window_management_policy.h 2016-06-08 15:16:20 +0000
17+++ include/miral/window_management_policy.h 2016-06-08 16:27:11 +0000
18@@ -63,6 +63,13 @@
19 * \note if the policy updates a Window object directly (as opposed to using tools)
20 * no notification is generated.
21 * @{ */
22+
23+ /// before any related changes begin
24+ virtual void advise_begin() = 0;
25+
26+ /// after any related changes end
27+ virtual void advise_end() = 0;
28+
29 virtual void advise_new_app(ApplicationInfo& application) = 0;
30 virtual void advise_delete_app(ApplicationInfo const& application) = 0;
31 virtual void advise_new_window(WindowInfo& window_info) = 0;
32
33=== modified file 'miral-kiosk/kiosk_window_manager.cpp'
34--- miral-kiosk/kiosk_window_manager.cpp 2016-06-08 15:16:20 +0000
35+++ miral-kiosk/kiosk_window_manager.cpp 2016-06-08 16:27:11 +0000
36@@ -216,3 +216,11 @@
37 void KioskWindowManagerPolicy::advise_move_to(miral::WindowInfo const& /*window_info*/, Point /*top_left*/)
38 {
39 }
40+
41+void KioskWindowManagerPolicy::advise_begin()
42+{
43+}
44+
45+void KioskWindowManagerPolicy::advise_end()
46+{
47+}
48
49=== modified file 'miral-kiosk/kiosk_window_manager.h'
50--- miral-kiosk/kiosk_window_manager.h 2016-06-08 15:16:20 +0000
51+++ miral-kiosk/kiosk_window_manager.h 2016-06-08 16:27:11 +0000
52@@ -55,6 +55,9 @@
53
54 void handle_raise_window(miral::WindowInfo& window_info) override;
55
56+ void advise_begin() override;
57+ void advise_end() override;
58+
59 void advise_focus_lost(miral::WindowInfo const& info) override;
60
61 void advise_focus_gained(miral::WindowInfo const& info) override;
62
63=== modified file 'miral-qt/src/platforms/mirserver/windowmanagementpolicy.cpp'
64--- miral-qt/src/platforms/mirserver/windowmanagementpolicy.cpp 2016-06-08 15:16:20 +0000
65+++ miral-qt/src/platforms/mirserver/windowmanagementpolicy.cpp 2016-06-08 16:27:11 +0000
66@@ -129,3 +129,11 @@
67 {
68
69 }
70+
71+void WindowManagementPolicy::advise_begin()
72+{
73+}
74+
75+void WindowManagementPolicy::advise_end()
76+{
77+}
78
79=== modified file 'miral-qt/src/platforms/mirserver/windowmanagementpolicy.h'
80--- miral-qt/src/platforms/mirserver/windowmanagementpolicy.h 2016-06-08 15:16:20 +0000
81+++ miral-qt/src/platforms/mirserver/windowmanagementpolicy.h 2016-06-08 16:27:11 +0000
82@@ -50,6 +50,9 @@
83 bool handle_touch_event(const MirTouchEvent *event) override;
84 bool handle_pointer_event(const MirPointerEvent *event) override;
85
86+ void advise_begin() override;
87+ void advise_end() override;
88+
89 void advise_new_app(miral::ApplicationInfo &application) override;
90 void advise_delete_app(const miral::ApplicationInfo &application) override;
91
92
93=== modified file 'miral-shell/tiling_window_manager.cpp'
94--- miral-shell/tiling_window_manager.cpp 2016-06-08 15:16:20 +0000
95+++ miral-shell/tiling_window_manager.cpp 2016-06-08 16:27:11 +0000
96@@ -577,3 +577,11 @@
97 void TilingWindowManagerPolicy::advise_move_to(miral::WindowInfo const& /*window_info*/, Point /*top_left*/)
98 {
99 }
100+
101+void TilingWindowManagerPolicy::advise_begin()
102+{
103+}
104+
105+void TilingWindowManagerPolicy::advise_end()
106+{
107+}
108
109=== modified file 'miral-shell/tiling_window_manager.h'
110--- miral-shell/tiling_window_manager.h 2016-06-08 15:16:20 +0000
111+++ miral-shell/tiling_window_manager.h 2016-06-08 16:27:11 +0000
112@@ -57,6 +57,9 @@
113 bool handle_pointer_event(MirPointerEvent const* event) override;
114 void handle_raise_window(miral::WindowInfo& window_info) override;
115
116+ void advise_begin() override;
117+ void advise_end() override;
118+
119 void advise_focus_lost(miral::WindowInfo const& info) override;
120 void advise_focus_gained(miral::WindowInfo const& info) override;
121 void advise_state_change(miral::WindowInfo const& window_info, MirSurfaceState state) override;
122
123=== modified file 'miral/basic_window_manager.cpp'
124--- miral/basic_window_manager.cpp 2016-06-08 15:16:20 +0000
125+++ miral/basic_window_manager.cpp 2016-06-08 16:27:11 +0000
126@@ -32,6 +32,24 @@
127 namespace
128 {
129 int const title_bar_height = 10;
130+
131+struct Locker
132+{
133+ Locker(std::mutex& mutex, std::unique_ptr<miral::WindowManagementPolicy> const& policy) :
134+ lock{mutex},
135+ policy{policy.get()}
136+ {
137+ policy->advise_begin();
138+ }
139+
140+ ~Locker()
141+ {
142+ policy->advise_end();
143+ }
144+
145+ std::lock_guard<std::mutex> const lock;
146+ miral::WindowManagementPolicy* const policy;
147+};
148 }
149
150 miral::BasicWindowManager::BasicWindowManager(
151@@ -69,14 +87,14 @@
152
153 void miral::BasicWindowManager::add_session(std::shared_ptr<scene::Session> const& session)
154 {
155- std::lock_guard<decltype(mutex)> lock(mutex);
156+ Locker lock{mutex, policy};
157 policy->advise_new_app(app_info[session] = ApplicationInfo(session));
158 policy->handle_app_info_updated(displays);
159 }
160
161 void miral::BasicWindowManager::remove_session(std::shared_ptr<scene::Session> const& session)
162 {
163- std::lock_guard<decltype(mutex)> lock(mutex);
164+ Locker lock{mutex, policy};
165 policy->advise_delete_app(app_info[session]);
166 app_info.erase(session);
167 policy->handle_app_info_updated(displays);
168@@ -88,7 +106,7 @@
169 std::function<frontend::SurfaceId(std::shared_ptr<scene::Session> const& session, scene::SurfaceCreationParameters const& params)> const& build)
170 -> frontend::SurfaceId
171 {
172- std::lock_guard<decltype(mutex)> lock(mutex);
173+ Locker lock{mutex, policy};
174 surface_builder = [build](std::shared_ptr<scene::Session> const& session, WindowSpecification const& params)
175 {
176 scene::SurfaceCreationParameters parameters;
177@@ -131,7 +149,7 @@
178 std::shared_ptr<scene::Surface> const& surface,
179 shell::SurfaceSpecification const& modifications)
180 {
181- std::lock_guard<decltype(mutex)> lock(mutex);
182+ Locker lock{mutex, policy};
183 policy->handle_modify_window(info_for(surface), modifications);
184 }
185
186@@ -139,7 +157,7 @@
187 std::shared_ptr<scene::Session> const& session,
188 std::weak_ptr<scene::Surface> const& surface)
189 {
190- std::lock_guard<decltype(mutex)> lock(mutex);
191+ Locker lock{mutex, policy};
192 auto& info = info_for(surface);
193
194 bool const is_active_window{mru_active_windows.top() == info.window()};
195@@ -198,7 +216,7 @@
196
197 void miral::BasicWindowManager::add_display(geometry::Rectangle const& area)
198 {
199- std::lock_guard<decltype(mutex)> lock(mutex);
200+ Locker lock{mutex, policy};
201 displays.add(area);
202
203 for (auto window : fullscreen_surfaces)
204@@ -219,7 +237,7 @@
205
206 void miral::BasicWindowManager::remove_display(geometry::Rectangle const& area)
207 {
208- std::lock_guard<decltype(mutex)> lock(mutex);
209+ Locker lock{mutex, policy};
210 displays.remove(area);
211 for (auto window : fullscreen_surfaces)
212 {
213@@ -239,21 +257,21 @@
214
215 bool miral::BasicWindowManager::handle_keyboard_event(MirKeyboardEvent const* event)
216 {
217- std::lock_guard<decltype(mutex)> lock(mutex);
218+ Locker lock{mutex, policy};
219 update_event_timestamp(event);
220 return policy->handle_keyboard_event(event);
221 }
222
223 bool miral::BasicWindowManager::handle_touch_event(MirTouchEvent const* event)
224 {
225- std::lock_guard<decltype(mutex)> lock(mutex);
226+ Locker lock{mutex, policy};
227 update_event_timestamp(event);
228 return policy->handle_touch_event(event);
229 }
230
231 bool miral::BasicWindowManager::handle_pointer_event(MirPointerEvent const* event)
232 {
233- std::lock_guard<decltype(mutex)> lock(mutex);
234+ Locker lock{mutex, policy};
235 update_event_timestamp(event);
236
237 cursor = {
238@@ -268,7 +286,7 @@
239 std::shared_ptr<scene::Surface> const& surface,
240 uint64_t timestamp)
241 {
242- std::lock_guard<decltype(mutex)> lock(mutex);
243+ Locker lock{mutex, policy};
244 if (timestamp >= last_input_event_timestamp)
245 policy->handle_raise_window(info_for(surface));
246 }
247@@ -309,7 +327,7 @@
248 return surface->configure(attrib, value);
249 }
250
251- std::lock_guard<decltype(mutex)> lock(mutex);
252+ Locker lock{mutex, policy};
253 auto& info = info_for(surface);
254 policy->handle_modify_window(info, modification);
255
256@@ -761,7 +779,7 @@
257
258 void miral::BasicWindowManager::invoke_under_lock(std::function<void()> const& callback)
259 {
260- std::lock_guard<decltype(mutex)> lock(mutex);
261+ Locker lock{mutex, policy};
262 callback();
263 }
264
265
266=== modified file 'miral/canonical_window_manager.cpp'
267--- miral/canonical_window_manager.cpp 2016-06-08 15:16:20 +0000
268+++ miral/canonical_window_manager.cpp 2016-06-08 16:27:11 +0000
269@@ -409,3 +409,11 @@
270 void miral::CanonicalWindowManagerPolicy::advise_move_to(miral::WindowInfo const& /*window_info*/, Point /*top_left*/)
271 {
272 }
273+
274+void miral::CanonicalWindowManagerPolicy::advise_begin()
275+{
276+}
277+
278+void miral::CanonicalWindowManagerPolicy::advise_end()
279+{
280+}

Subscribers

People subscribed via source and target branches