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

Proposed by Alan Griffiths
Status: Merged
Approved by: Gerry Boland
Approved revision: 526
Merged at revision: 526
Proposed branch: lp:~alan-griffiths/miral/fix-1668562
Merge into: lp:miral
Diff against target: 276 lines (+104/-8)
14 files modified
debian/changelog (+2/-0)
debian/libmiral2.symbols (+1/-0)
include/miral/window_manager_tools.h (+3/-0)
miral-kiosk/kiosk_window_manager.cpp (+8/-0)
miral-shell/decoration_provider.cpp (+1/-1)
miral-shell/tiling_window_manager.cpp (+8/-0)
miral-shell/titlebar_window_manager.cpp (+8/-0)
miral/basic_window_manager.cpp (+57/-0)
miral/basic_window_manager.h (+1/-0)
miral/symbols.map (+1/-7)
miral/window_management_trace.cpp (+9/-0)
miral/window_management_trace.h (+1/-0)
miral/window_manager_tools.cpp (+3/-0)
miral/window_manager_tools_implementation.h (+1/-0)
To merge this branch: bzr merge lp:~alan-griffiths/miral/fix-1668562
Reviewer Review Type Date Requested Status
Gerry Boland (community) Approve
Review via email: mp+318637@code.launchpad.net

Commit message

[libmiral] add WindowManagerTools::focus_prev_within_application(). (LP: #1668562)

To post a comment you must log in.
lp:~alan-griffiths/miral/fix-1668562 updated
526. By Alan Griffiths

merge :parent

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

lgtm!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/changelog'
2--- debian/changelog 2017-02-27 11:29:12 +0000
3+++ debian/changelog 2017-03-02 14:37:05 +0000
4@@ -13,6 +13,8 @@
5 functions for handle classes
6 . [libmirclientcpp] Add RAII wrapper for MirDisplayConfig.
7 - Bugs fixed:
8+ . [libmiral] need miral::WindowManagerTools::focus_prev_within_application
9+ (LP: #1668562)
10 . [miral-shell] Workaround for crash on exit (LP: #1667645)
11
12 -- Alan Griffiths <alan.griffiths@canonical.com> Thu, 02 Feb 2017 17:26:54 +0000
13
14=== modified file 'debian/libmiral2.symbols'
15--- debian/libmiral2.symbols 2017-02-28 09:56:30 +0000
16+++ debian/libmiral2.symbols 2017-03-02 14:37:05 +0000
17@@ -374,6 +374,7 @@
18 (c++)"miral::operator<(miral::Window const&, miral::Window const&)@MIRAL_1.0" 1.3.0
19 (c++)"miral::WindowManagerTools::create_workspace()@MIRAL_1.3" 1.3.0
20 (c++)"miral::WindowManagerTools::add_tree_to_workspace(miral::Window const&, std::shared_ptr<miral::Workspace> const&)@MIRAL_1.3" 1.3.0
21+ (c++)"miral::WindowManagerTools::focus_prev_within_application()@MIRAL_1.3" 1.3.0
22 (c++)"miral::WindowManagerTools::remove_tree_from_workspace(miral::Window const&, std::shared_ptr<miral::Workspace> const&)@MIRAL_1.3" 1.3.0
23 (c++)"miral::WindowManagerTools::move_workspace_content_to_workspace(std::shared_ptr<miral::Workspace> const&, std::shared_ptr<miral::Workspace> const&)@MIRAL_1.3" 1.3.0
24 (c++)"miral::WorkspacePolicy::advise_adding_to_workspace(std::shared_ptr<miral::Workspace> const&, std::vector<miral::Window, std::allocator<miral::Window> > const&)@MIRAL_1.3" 1.3.0
25
26=== modified file 'include/miral/window_manager_tools.h'
27--- include/miral/window_manager_tools.h 2017-02-28 09:56:30 +0000
28+++ include/miral/window_manager_tools.h 2017-03-02 14:37:05 +0000
29@@ -154,6 +154,9 @@
30 /// make the next surface active within the active application
31 void focus_next_within_application();
32
33+ /// make the prev surface active within the active application
34+ void focus_prev_within_application();
35+
36 /// Find the topmost window at the cursor
37 auto window_at(mir::geometry::Point cursor) const -> Window;
38
39
40=== modified file 'miral-kiosk/kiosk_window_manager.cpp'
41--- miral-kiosk/kiosk_window_manager.cpp 2017-01-26 11:30:51 +0000
42+++ miral-kiosk/kiosk_window_manager.cpp 2017-03-02 14:37:05 +0000
43@@ -58,6 +58,14 @@
44
45 return true;
46 }
47+ else if (action == mir_keyboard_action_down &&
48+ modifiers == (mir_input_event_modifier_alt | mir_input_event_modifier_shift) &&
49+ scan_code == KEY_GRAVE)
50+ {
51+ tools.focus_prev_within_application();
52+
53+ return true;
54+ }
55 else if (action == mir_keyboard_action_down && scan_code == KEY_F4)
56 {
57 switch (modifiers & modifier_mask)
58
59=== modified file 'miral-shell/decoration_provider.cpp'
60--- miral-shell/decoration_provider.cpp 2017-02-24 13:00:28 +0000
61+++ miral-shell/decoration_provider.cpp 2017-03-02 14:37:05 +0000
62@@ -161,7 +161,7 @@
63 "Keyboard shortcuts:",
64 "",
65 " o Switch apps: Alt-Tab, tap or click on the corresponding window",
66- " o Switch window: Alt-`, tap or click on the corresponding window",
67+ " o Next (previous) app window: Alt-` (Alt-Shift-`)",
68 "",
69 " o Move window: Alt-leftmousebutton drag (three finger drag)",
70 " o Resize window: Alt-middle_button drag (three finger pinch)",
71
72=== modified file 'miral-shell/tiling_window_manager.cpp'
73--- miral-shell/tiling_window_manager.cpp 2017-01-26 11:30:51 +0000
74+++ miral-shell/tiling_window_manager.cpp 2017-03-02 14:37:05 +0000
75@@ -333,6 +333,14 @@
76
77 return true;
78 }
79+ else if (action == mir_keyboard_action_down &&
80+ modifiers == (mir_input_event_modifier_alt | mir_input_event_modifier_shift) &&
81+ scan_code == KEY_GRAVE)
82+ {
83+ tools.focus_prev_within_application();
84+
85+ return true;
86+ }
87
88 return false;
89 }
90
91=== modified file 'miral-shell/titlebar_window_manager.cpp'
92--- miral-shell/titlebar_window_manager.cpp 2017-02-21 11:54:06 +0000
93+++ miral-shell/titlebar_window_manager.cpp 2017-03-02 14:37:05 +0000
94@@ -449,6 +449,14 @@
95 return true;
96 }
97 else if (action == mir_keyboard_action_down &&
98+ modifiers == (mir_input_event_modifier_alt | mir_input_event_modifier_shift) &&
99+ scan_code == KEY_GRAVE)
100+ {
101+ tools.focus_prev_within_application();
102+
103+ return true;
104+ }
105+ else if (action == mir_keyboard_action_down &&
106 modifiers == (mir_input_event_modifier_ctrl|mir_input_event_modifier_meta))
107 {
108 if (auto active_window = tools.active_window())
109
110=== modified file 'miral/basic_window_manager.cpp'
111--- miral/basic_window_manager.cpp 2017-02-28 09:56:30 +0000
112+++ miral/basic_window_manager.cpp 2017-03-02 14:37:05 +0000
113@@ -606,6 +606,63 @@
114 }
115 }
116
117+void miral::BasicWindowManager::focus_prev_within_application()
118+{
119+ if (auto const prev = active_window())
120+ {
121+ auto const workspaces_containing_window = workspaces_containing(prev);
122+ auto const& siblings = info_for(prev.application()).windows();
123+ auto current = find(rbegin(siblings), rend(siblings), prev);
124+
125+ if (current != rend(siblings))
126+ {
127+ while (++current != rend(siblings))
128+ {
129+ for (auto const& workspace : workspaces_containing(*current))
130+ {
131+ for (auto const& ww : workspaces_containing_window)
132+ {
133+ if (ww == workspace)
134+ {
135+ if (prev != select_active_window(*current))
136+ return;
137+ }
138+ }
139+ }
140+ }
141+ }
142+
143+ for (current = rbegin(siblings); *current != prev; ++current)
144+ {
145+ for (auto const& workspace : workspaces_containing(*current))
146+ {
147+ for (auto const& ww : workspaces_containing_window)
148+ {
149+ if (ww == workspace)
150+ {
151+ if (prev != select_active_window(*current))
152+ return;
153+ }
154+ }
155+ }
156+ }
157+
158+ current = find(rbegin(siblings), rend(siblings), prev);
159+ if (current != rend(siblings))
160+ {
161+ while (++current != rend(siblings) && prev == select_active_window(*current))
162+ ;
163+ }
164+
165+ if (current == rend(siblings))
166+ {
167+ current = rbegin(siblings);
168+ while (prev != *current && prev == select_active_window(*current))
169+ ++current;
170+ }
171+ }
172+}
173+
174 auto miral::BasicWindowManager::window_at(geometry::Point cursor) const
175 -> Window
176 {
177
178=== modified file 'miral/basic_window_manager.h'
179--- miral/basic_window_manager.h 2017-03-01 12:51:41 +0000
180+++ miral/basic_window_manager.h 2017-03-02 14:37:05 +0000
181@@ -146,6 +146,7 @@
182 void focus_next_application() override;
183
184 void focus_next_within_application() override;
185+ void focus_prev_within_application() override;
186
187 auto window_at(mir::geometry::Point cursor) const -> Window override;
188
189
190=== modified file 'miral/symbols.map'
191--- miral/symbols.map 2017-02-28 09:56:30 +0000
192+++ miral/symbols.map 2017-03-02 14:37:05 +0000
193@@ -373,6 +373,7 @@
194 extern "C++" {
195 miral::WindowManagerTools::add_tree_to_workspace*;
196 miral::WindowManagerTools::create_workspace*;
197+ miral::WindowManagerTools::focus_prev_within_application*;
198 miral::WindowManagerTools::for_each_window_in_workspace*;
199 miral::WindowManagerTools::for_each_workspace_containing*;
200 miral::WindowManagerTools::remove_tree_from_workspace*;
201@@ -382,17 +383,10 @@
202 miral::WorkspacePolicy::advise_adding_to_workspace*;
203 miral::WorkspacePolicy::advise_removing_from_workspace*;
204 miral::WorkspacePolicy::operator*;
205- miral::toolkit::Window::Window*;
206 non-virtual?thunk?to?miral::WorkspacePolicy::?WorkspacePolicy*;
207 non-virtual?thunk?to?miral::WorkspacePolicy::advise_adding_to_workspace*;
208 non-virtual?thunk?to?miral::WorkspacePolicy::advise_removing_from_workspace*;
209 typeinfo?for?miral::WorkspacePolicy;
210- typeinfo?for?miral::toolkit::Window;
211- typeinfo?for?miral::toolkit::WindowId;
212- typeinfo?for?miral::toolkit::WindowSpec;
213 vtable?for?miral::WorkspacePolicy;
214- vtable?for?miral::toolkit::Window;
215- vtable?for?miral::toolkit::WindowId;
216- vtable?for?miral::toolkit::WindowSpec;
217 };
218 } MIRAL_1.2;
219
220=== modified file 'miral/window_management_trace.cpp'
221--- miral/window_management_trace.cpp 2017-02-28 09:56:30 +0000
222+++ miral/window_management_trace.cpp 2017-03-02 14:37:05 +0000
223@@ -505,6 +505,15 @@
224 }
225 MIRAL_TRACE_EXCEPTION
226
227+void miral::WindowManagementTrace::focus_prev_within_application()
228+try {
229+ log_input();
230+ mir::log_info("%s", __func__);
231+ trace_count++;
232+ wrapped.focus_prev_within_application();
233+}
234+MIRAL_TRACE_EXCEPTION
235+
236 void miral::WindowManagementTrace::raise_tree(miral::Window const& root)
237 try {
238 log_input();
239
240=== modified file 'miral/window_management_trace.h'
241--- miral/window_management_trace.h 2017-02-28 09:56:30 +0000
242+++ miral/window_management_trace.h 2017-03-02 14:37:05 +0000
243@@ -66,6 +66,7 @@
244 virtual void focus_next_application() override;
245
246 virtual void focus_next_within_application() override;
247+ virtual void focus_prev_within_application() override;
248
249 virtual void raise_tree(Window const& root) override;
250
251
252=== modified file 'miral/window_manager_tools.cpp'
253--- miral/window_manager_tools.cpp 2017-02-28 09:56:30 +0000
254+++ miral/window_manager_tools.cpp 2017-03-02 14:37:05 +0000
255@@ -71,6 +71,9 @@
256 void miral::WindowManagerTools::focus_next_within_application()
257 { tools->focus_next_within_application(); }
258
259+void miral::WindowManagerTools::focus_prev_within_application()
260+{ tools->focus_prev_within_application(); }
261+
262 auto miral::WindowManagerTools::window_at(mir::geometry::Point cursor) const -> Window
263 { return tools->window_at(cursor); }
264
265
266=== modified file 'miral/window_manager_tools_implementation.h'
267--- miral/window_manager_tools_implementation.h 2017-02-28 09:56:30 +0000
268+++ miral/window_manager_tools_implementation.h 2017-03-02 14:37:05 +0000
269@@ -62,6 +62,7 @@
270 virtual void drag_window(Window const& window, mir::geometry::Displacement& movement) = 0;
271 virtual void focus_next_application() = 0;
272 virtual void focus_next_within_application() = 0;
273+ virtual void focus_prev_within_application() = 0;
274 virtual auto window_at(mir::geometry::Point cursor) const -> Window = 0;
275 virtual auto active_display() -> mir::geometry::Rectangle const = 0;
276 virtual void raise_tree(Window const& root) = 0;

Subscribers

People subscribed via source and target branches