Merge lp:~alan-griffiths/miral/fix-1651422 into lp:miral

Proposed by Alan Griffiths on 2016-12-20
Status: Merged
Approved by: Daniel d'Andrada on 2016-12-20
Approved revision: 475
Merged at revision: 475
Proposed branch: lp:~alan-griffiths/miral/fix-1651422
Merge into: lp:miral
Diff against target: 67 lines (+11/-9)
2 files modified
miral/basic_window_manager.cpp (+10/-9)
miral/basic_window_manager.h (+1/-0)
To merge this branch: bzr merge lp:~alan-griffiths/miral/fix-1651422
Reviewer Review Type Date Requested Status
Daniel d'Andrada (community) 2016-12-20 Approve on 2016-12-20
Review via email: mp+313609@code.launchpad.net

Commit Message

[libmiral] Fix force_close() which was incorrectly locking the BasicWindowManager mutex a second time

To post a comment you must log in.
Daniel d'Andrada (dandrader) wrote :

Looks good and fixed the issue. Thanks.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'miral/basic_window_manager.cpp'
2--- miral/basic_window_manager.cpp 2016-12-19 17:37:35 +0000
3+++ miral/basic_window_manager.cpp 2016-12-20 12:48:11 +0000
4@@ -157,19 +157,20 @@
5 std::weak_ptr<scene::Surface> const& surface)
6 {
7 Locker lock{mutex, policy};
8- auto& info = info_for(surface);
9+ remove_window(session, info_for(surface));
10+}
11
12+void miral::BasicWindowManager::remove_window(Application const& application, miral::WindowInfo const& info)
13+{
14 policy->advise_delete_window(info);
15
16 bool const is_active_window{mru_active_windows.top() == info.window()};
17
18- auto& session_info = info_for(session);
19-
20- session_info.remove_window(info.window());
21+ info_for(application).remove_window(info.window());
22 mru_active_windows.erase(info.window());
23 fullscreen_surfaces.erase(info.window());
24
25- session->destroy_surface(surface);
26+ application->destroy_surface(info.window());
27
28 // NB erase() invalidates info, but we want to keep access to "parent".
29 auto const parent = info.parent();
30@@ -181,14 +182,14 @@
31 if (parent && select_active_window(parent))
32 return;
33
34- if (can_activate_window_for_session(session))
35+ if (can_activate_window_for_session(application))
36 return;
37
38 // Try to activate to recently active window of any application
39 {
40- Window new_focus;
41+ miral::Window new_focus;
42
43- mru_active_windows.enumerate([&](Window& window)
44+ mru_active_windows.enumerate([&](miral::Window& window)
45 {
46 // select_active_window() calls set_focus_to() which updates mru_active_windows and changes window
47 auto const w = window;
48@@ -399,7 +400,7 @@
49 auto application = window.application();
50
51 if (application && window)
52- remove_surface(application, window);
53+ remove_window(application, info_for(window));
54 }
55
56 auto miral::BasicWindowManager::active_window() const -> Window
57
58=== modified file 'miral/basic_window_manager.h'
59--- miral/basic_window_manager.h 2016-11-10 10:29:02 +0000
60+++ miral/basic_window_manager.h 2016-12-20 12:48:11 +0000
61@@ -174,6 +174,7 @@
62 void place_and_size(WindowInfo& root, Point const& new_pos, Size const& new_size);
63 void set_state(miral::WindowInfo& window_info, MirSurfaceState value);
64 auto fullscreen_rect_for(WindowInfo const& window_info) const -> Rectangle;
65+ void remove_window(Application const& application, miral::WindowInfo const& info);
66 };
67 }
68

Subscribers

People subscribed via source and target branches