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
=== modified file 'include/miral/canonical_window_manager.h'
--- include/miral/canonical_window_manager.h 2016-06-08 15:16:20 +0000
+++ include/miral/canonical_window_manager.h 2016-06-08 16:27:11 +0000
@@ -60,6 +60,9 @@
60 bool handle_touch_event(MirTouchEvent const* event) override;60 bool handle_touch_event(MirTouchEvent const* event) override;
61 bool handle_pointer_event(MirPointerEvent const* event) override;61 bool handle_pointer_event(MirPointerEvent const* event) override;
6262
63 void advise_begin() override;
64 void advise_end() override;
65
63 void advise_new_window(WindowInfo& window_info) override;66 void advise_new_window(WindowInfo& window_info) override;
64 void advise_focus_lost(WindowInfo const& info) override;67 void advise_focus_lost(WindowInfo const& info) override;
65 void advise_focus_gained(WindowInfo const& info) override;68 void advise_focus_gained(WindowInfo const& info) override;
6669
=== modified file 'include/miral/window_management_policy.h'
--- include/miral/window_management_policy.h 2016-06-08 15:16:20 +0000
+++ include/miral/window_management_policy.h 2016-06-08 16:27:11 +0000
@@ -63,6 +63,13 @@
63 * \note if the policy updates a Window object directly (as opposed to using tools)63 * \note if the policy updates a Window object directly (as opposed to using tools)
64 * no notification is generated.64 * no notification is generated.
65 * @{ */65 * @{ */
66
67 /// before any related changes begin
68 virtual void advise_begin() = 0;
69
70 /// after any related changes end
71 virtual void advise_end() = 0;
72
66 virtual void advise_new_app(ApplicationInfo& application) = 0;73 virtual void advise_new_app(ApplicationInfo& application) = 0;
67 virtual void advise_delete_app(ApplicationInfo const& application) = 0;74 virtual void advise_delete_app(ApplicationInfo const& application) = 0;
68 virtual void advise_new_window(WindowInfo& window_info) = 0;75 virtual void advise_new_window(WindowInfo& window_info) = 0;
6976
=== modified file 'miral-kiosk/kiosk_window_manager.cpp'
--- miral-kiosk/kiosk_window_manager.cpp 2016-06-08 15:16:20 +0000
+++ miral-kiosk/kiosk_window_manager.cpp 2016-06-08 16:27:11 +0000
@@ -216,3 +216,11 @@
216void KioskWindowManagerPolicy::advise_move_to(miral::WindowInfo const& /*window_info*/, Point /*top_left*/)216void KioskWindowManagerPolicy::advise_move_to(miral::WindowInfo const& /*window_info*/, Point /*top_left*/)
217{217{
218}218}
219
220void KioskWindowManagerPolicy::advise_begin()
221{
222}
223
224void KioskWindowManagerPolicy::advise_end()
225{
226}
219227
=== modified file 'miral-kiosk/kiosk_window_manager.h'
--- miral-kiosk/kiosk_window_manager.h 2016-06-08 15:16:20 +0000
+++ miral-kiosk/kiosk_window_manager.h 2016-06-08 16:27:11 +0000
@@ -55,6 +55,9 @@
5555
56 void handle_raise_window(miral::WindowInfo& window_info) override;56 void handle_raise_window(miral::WindowInfo& window_info) override;
5757
58 void advise_begin() override;
59 void advise_end() override;
60
58 void advise_focus_lost(miral::WindowInfo const& info) override;61 void advise_focus_lost(miral::WindowInfo const& info) override;
5962
60 void advise_focus_gained(miral::WindowInfo const& info) override;63 void advise_focus_gained(miral::WindowInfo const& info) override;
6164
=== modified file 'miral-qt/src/platforms/mirserver/windowmanagementpolicy.cpp'
--- miral-qt/src/platforms/mirserver/windowmanagementpolicy.cpp 2016-06-08 15:16:20 +0000
+++ miral-qt/src/platforms/mirserver/windowmanagementpolicy.cpp 2016-06-08 16:27:11 +0000
@@ -129,3 +129,11 @@
129{129{
130130
131}131}
132
133void WindowManagementPolicy::advise_begin()
134{
135}
136
137void WindowManagementPolicy::advise_end()
138{
139}
132140
=== modified file 'miral-qt/src/platforms/mirserver/windowmanagementpolicy.h'
--- miral-qt/src/platforms/mirserver/windowmanagementpolicy.h 2016-06-08 15:16:20 +0000
+++ miral-qt/src/platforms/mirserver/windowmanagementpolicy.h 2016-06-08 16:27:11 +0000
@@ -50,6 +50,9 @@
50 bool handle_touch_event(const MirTouchEvent *event) override;50 bool handle_touch_event(const MirTouchEvent *event) override;
51 bool handle_pointer_event(const MirPointerEvent *event) override;51 bool handle_pointer_event(const MirPointerEvent *event) override;
5252
53 void advise_begin() override;
54 void advise_end() override;
55
53 void advise_new_app(miral::ApplicationInfo &application) override;56 void advise_new_app(miral::ApplicationInfo &application) override;
54 void advise_delete_app(const miral::ApplicationInfo &application) override;57 void advise_delete_app(const miral::ApplicationInfo &application) override;
5558
5659
=== modified file 'miral-shell/tiling_window_manager.cpp'
--- miral-shell/tiling_window_manager.cpp 2016-06-08 15:16:20 +0000
+++ miral-shell/tiling_window_manager.cpp 2016-06-08 16:27:11 +0000
@@ -577,3 +577,11 @@
577void TilingWindowManagerPolicy::advise_move_to(miral::WindowInfo const& /*window_info*/, Point /*top_left*/)577void TilingWindowManagerPolicy::advise_move_to(miral::WindowInfo const& /*window_info*/, Point /*top_left*/)
578{578{
579}579}
580
581void TilingWindowManagerPolicy::advise_begin()
582{
583}
584
585void TilingWindowManagerPolicy::advise_end()
586{
587}
580588
=== modified file 'miral-shell/tiling_window_manager.h'
--- miral-shell/tiling_window_manager.h 2016-06-08 15:16:20 +0000
+++ miral-shell/tiling_window_manager.h 2016-06-08 16:27:11 +0000
@@ -57,6 +57,9 @@
57 bool handle_pointer_event(MirPointerEvent const* event) override;57 bool handle_pointer_event(MirPointerEvent const* event) override;
58 void handle_raise_window(miral::WindowInfo& window_info) override;58 void handle_raise_window(miral::WindowInfo& window_info) override;
5959
60 void advise_begin() override;
61 void advise_end() override;
62
60 void advise_focus_lost(miral::WindowInfo const& info) override;63 void advise_focus_lost(miral::WindowInfo const& info) override;
61 void advise_focus_gained(miral::WindowInfo const& info) override;64 void advise_focus_gained(miral::WindowInfo const& info) override;
62 void advise_state_change(miral::WindowInfo const& window_info, MirSurfaceState state) override;65 void advise_state_change(miral::WindowInfo const& window_info, MirSurfaceState state) override;
6366
=== modified file 'miral/basic_window_manager.cpp'
--- miral/basic_window_manager.cpp 2016-06-08 15:16:20 +0000
+++ miral/basic_window_manager.cpp 2016-06-08 16:27:11 +0000
@@ -32,6 +32,24 @@
32namespace32namespace
33{33{
34int const title_bar_height = 10;34int const title_bar_height = 10;
35
36struct Locker
37{
38 Locker(std::mutex& mutex, std::unique_ptr<miral::WindowManagementPolicy> const& policy) :
39 lock{mutex},
40 policy{policy.get()}
41 {
42 policy->advise_begin();
43 }
44
45 ~Locker()
46 {
47 policy->advise_end();
48 }
49
50 std::lock_guard<std::mutex> const lock;
51 miral::WindowManagementPolicy* const policy;
52};
35}53}
3654
37miral::BasicWindowManager::BasicWindowManager(55miral::BasicWindowManager::BasicWindowManager(
@@ -69,14 +87,14 @@
6987
70void miral::BasicWindowManager::add_session(std::shared_ptr<scene::Session> const& session)88void miral::BasicWindowManager::add_session(std::shared_ptr<scene::Session> const& session)
71{89{
72 std::lock_guard<decltype(mutex)> lock(mutex);90 Locker lock{mutex, policy};
73 policy->advise_new_app(app_info[session] = ApplicationInfo(session));91 policy->advise_new_app(app_info[session] = ApplicationInfo(session));
74 policy->handle_app_info_updated(displays);92 policy->handle_app_info_updated(displays);
75}93}
7694
77void miral::BasicWindowManager::remove_session(std::shared_ptr<scene::Session> const& session)95void miral::BasicWindowManager::remove_session(std::shared_ptr<scene::Session> const& session)
78{96{
79 std::lock_guard<decltype(mutex)> lock(mutex);97 Locker lock{mutex, policy};
80 policy->advise_delete_app(app_info[session]);98 policy->advise_delete_app(app_info[session]);
81 app_info.erase(session);99 app_info.erase(session);
82 policy->handle_app_info_updated(displays);100 policy->handle_app_info_updated(displays);
@@ -88,7 +106,7 @@
88 std::function<frontend::SurfaceId(std::shared_ptr<scene::Session> const& session, scene::SurfaceCreationParameters const& params)> const& build)106 std::function<frontend::SurfaceId(std::shared_ptr<scene::Session> const& session, scene::SurfaceCreationParameters const& params)> const& build)
89-> frontend::SurfaceId107-> frontend::SurfaceId
90{108{
91 std::lock_guard<decltype(mutex)> lock(mutex);109 Locker lock{mutex, policy};
92 surface_builder = [build](std::shared_ptr<scene::Session> const& session, WindowSpecification const& params)110 surface_builder = [build](std::shared_ptr<scene::Session> const& session, WindowSpecification const& params)
93 {111 {
94 scene::SurfaceCreationParameters parameters;112 scene::SurfaceCreationParameters parameters;
@@ -131,7 +149,7 @@
131 std::shared_ptr<scene::Surface> const& surface,149 std::shared_ptr<scene::Surface> const& surface,
132 shell::SurfaceSpecification const& modifications)150 shell::SurfaceSpecification const& modifications)
133{151{
134 std::lock_guard<decltype(mutex)> lock(mutex);152 Locker lock{mutex, policy};
135 policy->handle_modify_window(info_for(surface), modifications);153 policy->handle_modify_window(info_for(surface), modifications);
136}154}
137155
@@ -139,7 +157,7 @@
139 std::shared_ptr<scene::Session> const& session,157 std::shared_ptr<scene::Session> const& session,
140 std::weak_ptr<scene::Surface> const& surface)158 std::weak_ptr<scene::Surface> const& surface)
141{159{
142 std::lock_guard<decltype(mutex)> lock(mutex);160 Locker lock{mutex, policy};
143 auto& info = info_for(surface);161 auto& info = info_for(surface);
144162
145 bool const is_active_window{mru_active_windows.top() == info.window()};163 bool const is_active_window{mru_active_windows.top() == info.window()};
@@ -198,7 +216,7 @@
198216
199void miral::BasicWindowManager::add_display(geometry::Rectangle const& area)217void miral::BasicWindowManager::add_display(geometry::Rectangle const& area)
200{218{
201 std::lock_guard<decltype(mutex)> lock(mutex);219 Locker lock{mutex, policy};
202 displays.add(area);220 displays.add(area);
203221
204 for (auto window : fullscreen_surfaces)222 for (auto window : fullscreen_surfaces)
@@ -219,7 +237,7 @@
219237
220void miral::BasicWindowManager::remove_display(geometry::Rectangle const& area)238void miral::BasicWindowManager::remove_display(geometry::Rectangle const& area)
221{239{
222 std::lock_guard<decltype(mutex)> lock(mutex);240 Locker lock{mutex, policy};
223 displays.remove(area);241 displays.remove(area);
224 for (auto window : fullscreen_surfaces)242 for (auto window : fullscreen_surfaces)
225 {243 {
@@ -239,21 +257,21 @@
239257
240bool miral::BasicWindowManager::handle_keyboard_event(MirKeyboardEvent const* event)258bool miral::BasicWindowManager::handle_keyboard_event(MirKeyboardEvent const* event)
241{259{
242 std::lock_guard<decltype(mutex)> lock(mutex);260 Locker lock{mutex, policy};
243 update_event_timestamp(event);261 update_event_timestamp(event);
244 return policy->handle_keyboard_event(event);262 return policy->handle_keyboard_event(event);
245}263}
246264
247bool miral::BasicWindowManager::handle_touch_event(MirTouchEvent const* event)265bool miral::BasicWindowManager::handle_touch_event(MirTouchEvent const* event)
248{266{
249 std::lock_guard<decltype(mutex)> lock(mutex);267 Locker lock{mutex, policy};
250 update_event_timestamp(event);268 update_event_timestamp(event);
251 return policy->handle_touch_event(event);269 return policy->handle_touch_event(event);
252}270}
253271
254bool miral::BasicWindowManager::handle_pointer_event(MirPointerEvent const* event)272bool miral::BasicWindowManager::handle_pointer_event(MirPointerEvent const* event)
255{273{
256 std::lock_guard<decltype(mutex)> lock(mutex);274 Locker lock{mutex, policy};
257 update_event_timestamp(event);275 update_event_timestamp(event);
258276
259 cursor = {277 cursor = {
@@ -268,7 +286,7 @@
268 std::shared_ptr<scene::Surface> const& surface,286 std::shared_ptr<scene::Surface> const& surface,
269 uint64_t timestamp)287 uint64_t timestamp)
270{288{
271 std::lock_guard<decltype(mutex)> lock(mutex);289 Locker lock{mutex, policy};
272 if (timestamp >= last_input_event_timestamp)290 if (timestamp >= last_input_event_timestamp)
273 policy->handle_raise_window(info_for(surface));291 policy->handle_raise_window(info_for(surface));
274}292}
@@ -309,7 +327,7 @@
309 return surface->configure(attrib, value);327 return surface->configure(attrib, value);
310 }328 }
311329
312 std::lock_guard<decltype(mutex)> lock(mutex);330 Locker lock{mutex, policy};
313 auto& info = info_for(surface);331 auto& info = info_for(surface);
314 policy->handle_modify_window(info, modification);332 policy->handle_modify_window(info, modification);
315333
@@ -761,7 +779,7 @@
761779
762void miral::BasicWindowManager::invoke_under_lock(std::function<void()> const& callback)780void miral::BasicWindowManager::invoke_under_lock(std::function<void()> const& callback)
763{781{
764 std::lock_guard<decltype(mutex)> lock(mutex);782 Locker lock{mutex, policy};
765 callback();783 callback();
766}784}
767785
768786
=== modified file 'miral/canonical_window_manager.cpp'
--- miral/canonical_window_manager.cpp 2016-06-08 15:16:20 +0000
+++ miral/canonical_window_manager.cpp 2016-06-08 16:27:11 +0000
@@ -409,3 +409,11 @@
409void miral::CanonicalWindowManagerPolicy::advise_move_to(miral::WindowInfo const& /*window_info*/, Point /*top_left*/)409void miral::CanonicalWindowManagerPolicy::advise_move_to(miral::WindowInfo const& /*window_info*/, Point /*top_left*/)
410{410{
411}411}
412
413void miral::CanonicalWindowManagerPolicy::advise_begin()
414{
415}
416
417void miral::CanonicalWindowManagerPolicy::advise_end()
418{
419}

Subscribers

People subscribed via source and target branches