Merge lp:~mir-team/qtmir/devel-mir-next-update into lp:qtmir/devel-mir-next
- devel-mir-next-update
- Merge into devel-mir-next
Proposed by
Alan Griffiths
Status: | Merged |
---|---|
Merged at revision: | 278 |
Proposed branch: | lp:~mir-team/qtmir/devel-mir-next-update |
Merge into: | lp:qtmir/devel-mir-next |
Diff against target: |
396 lines (+142/-67) 11 files modified
debian/control (+2/-2) src/modules/Unity/Application/CMakeLists.txt (+0/-1) src/modules/Unity/Application/application_manager.cpp (+2/-2) src/platforms/mirserver/CMakeLists.txt (+0/-1) src/platforms/mirserver/displaywindow.cpp (+10/-0) src/platforms/mirserver/mirserver.h (+0/-1) src/platforms/mirserver/mirserverintegration.cpp (+8/-4) src/platforms/mirserver/mirshell.cpp (+95/-2) src/platforms/mirserver/surfaceobserver.h (+2/-1) tests/mirserver/QtEventFeeder/qteventfeeder_test.cpp (+20/-52) tests/modules/common/mock_surface.h (+3/-1) |
To merge this branch: | bzr merge lp:~mir-team/qtmir/devel-mir-next-update |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Daniel van Vugt | Approve | ||
Review via email: mp+254905@code.launchpad.net |
Commit message
Update for the latest set of Mir changes
Description of the change
Update for the latest set of Mir changes
To post a comment you must log in.
- 281. By Alan Griffiths
-
Don't rely on Mir to provide NullWindowManager
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'debian/control' |
2 | --- debian/control 2015-03-25 08:21:35 +0000 |
3 | +++ debian/control 2015-04-01 13:50:18 +0000 |
4 | @@ -17,9 +17,9 @@ |
5 | libgles2-mesa-dev, |
6 | libglib2.0-dev, |
7 | liblttng-ust-dev, |
8 | - libmirclient-dev (>= 0.6.0), |
9 | + libmirclient-dev (>= 0.13.0), |
10 | libmircommon-dev, |
11 | - libmirserver-dev (>= 0.11.0), |
12 | + libmirserver-dev (>= 0.13.0), |
13 | libmtdev-dev, |
14 | libprocess-cpp-dev, |
15 | libqtdbusmock1-dev (>= 0.2), |
16 | |
17 | === modified file 'src/modules/Unity/Application/CMakeLists.txt' |
18 | --- src/modules/Unity/Application/CMakeLists.txt 2015-01-08 12:37:08 +0000 |
19 | +++ src/modules/Unity/Application/CMakeLists.txt 2015-04-01 13:50:18 +0000 |
20 | @@ -2,7 +2,6 @@ |
21 | ${GLIB_INCLUDE_DIRS} |
22 | ${GIO_INCLUDE_DIRS} |
23 | ${GIO_UNIX_INCLUDE_DIRS} |
24 | - ${MIRCOMMON_INCLUDE_DIRS} |
25 | ${MIRSERVER_INCLUDE_DIRS} |
26 | ${PROCESS_CPP_INCLUDE_DIRS} |
27 | ${UBUNTU_PLATFORM_API_INCLUDE_DIRS} |
28 | |
29 | === modified file 'src/modules/Unity/Application/application_manager.cpp' |
30 | --- src/modules/Unity/Application/application_manager.cpp 2015-03-25 08:21:35 +0000 |
31 | +++ src/modules/Unity/Application/application_manager.cpp 2015-04-01 13:50:18 +0000 |
32 | @@ -70,9 +70,9 @@ |
33 | //TODO: should use mir::graphics::Display::configuration |
34 | mir::geometry::Rectangles view_area; |
35 | mirServer->the_display()->for_each_display_sync_group( |
36 | - [&view_area](mir::graphics::DisplaySyncGroup& group) { |
37 | + [&view_area](mir::graphics::DisplaySyncGroup &group) { |
38 | group.for_each_display_buffer( |
39 | - [&view_area](const mir::graphics::DisplayBuffer & db) { |
40 | + [&view_area](const mir::graphics::DisplayBuffer &db) { |
41 | view_area.add(db.view_area()); |
42 | }); |
43 | }); |
44 | |
45 | === modified file 'src/platforms/mirserver/CMakeLists.txt' |
46 | --- src/platforms/mirserver/CMakeLists.txt 2015-03-25 08:26:35 +0000 |
47 | +++ src/platforms/mirserver/CMakeLists.txt 2015-04-01 13:50:18 +0000 |
48 | @@ -18,7 +18,6 @@ |
49 | endforeach(item ${Qt5Gui_PRIVATE_INCLUDE_DIRS}) |
50 | |
51 | include_directories( |
52 | - ${MIRCOMMON_INCLUDE_DIRS} |
53 | ${MIRSERVER_INCLUDE_DIRS} |
54 | |
55 | ${URL_DISPATCHER_INCLUDE_DIRS} |
56 | |
57 | === modified file 'src/platforms/mirserver/displaywindow.cpp' |
58 | --- src/platforms/mirserver/displaywindow.cpp 2015-03-11 14:53:34 +0000 |
59 | +++ src/platforms/mirserver/displaywindow.cpp 2015-04-01 13:50:18 +0000 |
60 | @@ -105,6 +105,16 @@ |
61 | void DisplayWindow::swapBuffers() |
62 | { |
63 | m_displayBuffer->gl_swap_buffers(); |
64 | + |
65 | + // FIXME this exposes a QtMir architecture problem now, as DisplayWindow |
66 | + // is supposed to wrap a mg::DisplayBuffer. We use Qt's multithreaded |
67 | + // renderer, where each DisplayWindow is rendered to relatively |
68 | + // independently, and post() called also individually. |
69 | + // |
70 | + // But in multimonitor case where a DisplaySyncGroup contains 2 |
71 | + // DisplayBuffers, one post() call will submit both |
72 | + // mg::DisplayBuffers for flipping, which can happen before the other |
73 | + // DisplayWindow has been rendered to, causing visual artifacts |
74 | m_displayGroup->post(); |
75 | } |
76 | |
77 | |
78 | === modified file 'src/platforms/mirserver/mirserver.h' |
79 | --- src/platforms/mirserver/mirserver.h 2015-02-02 12:05:00 +0000 |
80 | +++ src/platforms/mirserver/mirserver.h 2015-04-01 13:50:18 +0000 |
81 | @@ -51,7 +51,6 @@ |
82 | using mir::Server::the_prompt_session_manager; |
83 | using mir::Server::the_session_authorizer; |
84 | using mir::Server::the_session_listener; |
85 | - using mir::Server::the_surface_configurator; |
86 | |
87 | /* qt specific */ |
88 | // getters |
89 | |
90 | === modified file 'src/platforms/mirserver/mirserverintegration.cpp' |
91 | --- src/platforms/mirserver/mirserverintegration.cpp 2015-03-11 14:53:34 +0000 |
92 | +++ src/platforms/mirserver/mirserverintegration.cpp 2015-04-01 13:50:18 +0000 |
93 | @@ -137,10 +137,14 @@ |
94 | |
95 | mg::DisplayBuffer* first_buffer{nullptr}; |
96 | mg::DisplaySyncGroup* first_group{nullptr}; |
97 | - m_mirServer->the_display()->for_each_display_sync_group([&](mg::DisplaySyncGroup& group) { |
98 | - if (!first_group) first_group = &group; |
99 | - group.for_each_display_buffer([&](mg::DisplayBuffer& buffer) { |
100 | - if (!first_buffer) first_buffer = &buffer; |
101 | + m_mirServer->the_display()->for_each_display_sync_group([&](mg::DisplaySyncGroup &group) { |
102 | + if (!first_group) { |
103 | + first_group = &group; |
104 | + } |
105 | + group.for_each_display_buffer([&](mg::DisplayBuffer &buffer) { |
106 | + if (!first_buffer) { |
107 | + first_buffer = &buffer; |
108 | + } |
109 | }); |
110 | }); |
111 | |
112 | |
113 | === modified file 'src/platforms/mirserver/mirshell.cpp' |
114 | --- src/platforms/mirserver/mirshell.cpp 2015-03-11 14:35:23 +0000 |
115 | +++ src/platforms/mirserver/mirshell.cpp 2015-04-01 13:50:18 +0000 |
116 | @@ -21,12 +21,50 @@ |
117 | #include <mir/geometry/rectangle.h> |
118 | #include <mir/scene/session.h> |
119 | #include <mir/scene/surface_creation_parameters.h> |
120 | +#include <mir/scene/surface.h> |
121 | #include <mir/shell/display_layout.h> |
122 | -#include <mir/shell/null_window_manager.h> |
123 | +#include <mir/shell/window_manager.h> |
124 | |
125 | namespace ms = mir::scene; |
126 | using mir::shell::AbstractShell; |
127 | |
128 | +namespace |
129 | +{ |
130 | +class NullWindowManager : public mir::shell::WindowManager |
131 | +{ |
132 | +public: |
133 | + void add_session(std::shared_ptr<ms::Session> const& session) override; |
134 | + |
135 | + void remove_session(std::shared_ptr<ms::Session> const& session) override; |
136 | + |
137 | + mir::frontend::SurfaceId add_surface( |
138 | + std::shared_ptr<ms::Session> const& session, |
139 | + ms::SurfaceCreationParameters const& params, |
140 | + std::function<mir::frontend::SurfaceId(std::shared_ptr<ms::Session> const& session, ms::SurfaceCreationParameters const& params)> const& build) override; |
141 | + |
142 | + void remove_surface( |
143 | + std::shared_ptr<ms::Session> const& session, |
144 | + std::weak_ptr<ms::Surface> const& surface) override; |
145 | + |
146 | + void add_display(mir::geometry::Rectangle const& area) override; |
147 | + |
148 | + void remove_display(mir::geometry::Rectangle const& area) override; |
149 | + |
150 | + bool handle_key_event(MirKeyboardEvent const* event) override; |
151 | + |
152 | + bool handle_touch_event(MirTouchEvent const* event) override; |
153 | + |
154 | + bool handle_pointer_event(MirPointerEvent const* event) override; |
155 | + |
156 | + int set_surface_attribute( |
157 | + std::shared_ptr<ms::Session> const& session, |
158 | + std::shared_ptr<ms::Surface> const& surface, |
159 | + MirSurfaceAttrib attrib, |
160 | + int value) override; |
161 | +}; |
162 | +} |
163 | + |
164 | + |
165 | MirShell::MirShell( |
166 | const std::shared_ptr<mir::shell::InputTargeter> &inputTargeter, |
167 | const std::shared_ptr<mir::scene::SurfaceCoordinator> &surfaceCoordinator, |
168 | @@ -34,7 +72,7 @@ |
169 | const std::shared_ptr<mir::scene::PromptSessionManager> &promptSessionManager, |
170 | const std::shared_ptr<mir::shell::DisplayLayout> &displayLayout) : |
171 | AbstractShell(inputTargeter, surfaceCoordinator, sessionCoordinator, promptSessionManager, |
172 | - [](mir::shell::FocusController*) { return std::make_shared<mir::shell::NullWindowManager>(); }), |
173 | + [](mir::shell::FocusController*) { return std::make_shared<NullWindowManager>(); }), |
174 | m_displayLayout{displayLayout} |
175 | { |
176 | qCDebug(QTMIR_MIR_MESSAGES) << "MirShell::MirShell"; |
177 | @@ -75,3 +113,58 @@ |
178 | |
179 | return result; |
180 | } |
181 | + |
182 | +void NullWindowManager::add_session(std::shared_ptr<ms::Session> const& /*session*/) |
183 | +{ |
184 | +} |
185 | + |
186 | +void NullWindowManager::remove_session(std::shared_ptr<ms::Session> const& /*session*/) |
187 | +{ |
188 | +} |
189 | + |
190 | +auto NullWindowManager::add_surface( |
191 | + std::shared_ptr<ms::Session> const& session, |
192 | + ms::SurfaceCreationParameters const& params, |
193 | + std::function<mir::frontend::SurfaceId(std::shared_ptr<ms::Session> const& session, ms::SurfaceCreationParameters const& params)> const& build) |
194 | +-> mir::frontend::SurfaceId |
195 | +{ |
196 | + return build(session, params); |
197 | +} |
198 | + |
199 | +void NullWindowManager::remove_surface( |
200 | + std::shared_ptr<ms::Session> const& /*session*/, |
201 | + std::weak_ptr<ms::Surface> const& /*surface*/) |
202 | +{ |
203 | +} |
204 | + |
205 | +void NullWindowManager::add_display(mir::geometry::Rectangle const& /*area*/) |
206 | +{ |
207 | +} |
208 | + |
209 | +void NullWindowManager::remove_display(mir::geometry::Rectangle const& /*area*/) |
210 | +{ |
211 | +} |
212 | + |
213 | +bool NullWindowManager::handle_key_event(MirKeyboardEvent const* /*event*/) |
214 | +{ |
215 | + return false; |
216 | +} |
217 | + |
218 | +bool NullWindowManager::handle_touch_event(MirTouchEvent const* /*event*/) |
219 | +{ |
220 | + return false; |
221 | +} |
222 | + |
223 | +bool NullWindowManager::handle_pointer_event(MirPointerEvent const* /*event*/) |
224 | +{ |
225 | + return false; |
226 | +} |
227 | + |
228 | +int NullWindowManager::set_surface_attribute( |
229 | + std::shared_ptr<ms::Session> const& /*session*/, |
230 | + std::shared_ptr<ms::Surface> const& surface, |
231 | + MirSurfaceAttrib attrib, |
232 | + int value) |
233 | +{ |
234 | + return surface->configure(attrib, value); |
235 | +} |
236 | |
237 | === modified file 'src/platforms/mirserver/surfaceobserver.h' |
238 | --- src/platforms/mirserver/surfaceobserver.h 2015-03-11 14:35:23 +0000 |
239 | +++ src/platforms/mirserver/surfaceobserver.h 2015-04-01 13:50:18 +0000 |
240 | @@ -42,7 +42,8 @@ |
241 | void cursor_image_set_to(mir::graphics::CursorImage const&) override {} |
242 | void orientation_set_to(MirOrientation) override {} |
243 | void client_surface_close_requested() override {} |
244 | - void keymap_changed(xkb_rule_names const&) override {} |
245 | + void keymap_changed(xkb_rule_names const &) override {} |
246 | + void renamed(char const *) override {} |
247 | |
248 | Q_SIGNALS: |
249 | void framesPosted(); |
250 | |
251 | === modified file 'tests/mirserver/QtEventFeeder/qteventfeeder_test.cpp' |
252 | --- tests/mirserver/QtEventFeeder/qteventfeeder_test.cpp 2015-02-19 23:03:14 +0000 |
253 | +++ tests/mirserver/QtEventFeeder/qteventfeeder_test.cpp 2015-04-01 13:50:18 +0000 |
254 | @@ -15,8 +15,6 @@ |
255 | * |
256 | */ |
257 | |
258 | -#define MIR_INCLUDE_DEPRECATED_EVENT_HEADER |
259 | - |
260 | #include <gmock/gmock.h> |
261 | #include <gtest/gtest.h> |
262 | |
263 | @@ -26,6 +24,8 @@ |
264 | #include <QGuiApplication> |
265 | #include <QWindow> |
266 | |
267 | +#include "mir/events/event_builders.h" |
268 | + |
269 | #include "mock_qtwindowsystem.h" |
270 | |
271 | using ::testing::_; |
272 | @@ -44,6 +44,8 @@ |
273 | using ::testing::HasId; |
274 | using ::testing::StateIsMoved; |
275 | |
276 | +namespace mev = mir::events; |
277 | + |
278 | void PrintTo(const struct QWindowSystemInterface::TouchPoint& touchPoint, ::std::ostream* os) { |
279 | *os << "TouchPoint(" |
280 | << "id=" << touchPoint.id |
281 | @@ -108,19 +110,10 @@ |
282 | Contains(AllOf(HasId(0), |
283 | IsPressed()))),_)).Times(1); |
284 | |
285 | - MirEvent mirEvent; |
286 | - mirEvent.type = mir_event_type_motion; |
287 | - mirEvent.motion.pointer_count = 1; |
288 | - mirEvent.motion.pointer_coordinates[0].id = 0; |
289 | - mirEvent.motion.pointer_coordinates[0].x = 10; |
290 | - mirEvent.motion.pointer_coordinates[0].y = 10; |
291 | - mirEvent.motion.pointer_coordinates[0].touch_major = 1; |
292 | - mirEvent.motion.pointer_coordinates[0].touch_minor = 1; |
293 | - mirEvent.motion.pointer_coordinates[0].pressure = 10; |
294 | - mirEvent.motion.action = mir_motion_action_down; |
295 | - mirEvent.motion.event_time = 123 * 1000000; |
296 | - |
297 | - qtEventFeeder->dispatch(mirEvent); |
298 | + auto ev1 = mev::make_event(MirInputDeviceId(), 123*1000000, 0); |
299 | + mev::add_touch(*ev1, /* touch ID */ 0, mir_touch_action_down, mir_touch_tooltype_unknown, |
300 | + 10, 10, 10, 1, 1, 10); |
301 | + qtEventFeeder->dispatch(*ev1); |
302 | |
303 | ASSERT_TRUE(Mock::VerifyAndClearExpectations(mockWindowSystem)); |
304 | |
305 | @@ -131,18 +124,10 @@ |
306 | Contains(AllOf(HasId(1),IsPressed())) |
307 | ),_)).Times(1); |
308 | |
309 | - mirEvent.type = mir_event_type_motion; |
310 | - mirEvent.motion.pointer_count = 1; |
311 | - mirEvent.motion.pointer_coordinates[0].id = 1; |
312 | - mirEvent.motion.pointer_coordinates[0].x = 20; |
313 | - mirEvent.motion.pointer_coordinates[0].y = 20; |
314 | - mirEvent.motion.pointer_coordinates[0].touch_major = 1; |
315 | - mirEvent.motion.pointer_coordinates[0].touch_minor = 1; |
316 | - mirEvent.motion.pointer_coordinates[0].pressure = 10; |
317 | - mirEvent.motion.action = mir_motion_action_down; |
318 | - mirEvent.motion.event_time = 125 * 1000000; |
319 | - |
320 | - qtEventFeeder->dispatch(mirEvent); |
321 | + auto ev2 = mev::make_event(MirInputDeviceId(), 125*1000000, 0); |
322 | + mev::add_touch(*ev2, 1 /* touch ID */, mir_touch_action_down, mir_touch_tooltype_unknown, |
323 | + 10, 10, 10, 1, 1, 10); |
324 | + qtEventFeeder->dispatch(*ev2); |
325 | |
326 | ASSERT_TRUE(Mock::VerifyAndClearExpectations(mockWindowSystem)); |
327 | } |
328 | @@ -155,19 +140,10 @@ |
329 | Contains(AllOf(HasId(0), |
330 | IsPressed()))),_)).Times(1); |
331 | |
332 | - MirEvent mirEvent; |
333 | - mirEvent.type = mir_event_type_motion; |
334 | - mirEvent.motion.pointer_count = 1; |
335 | - mirEvent.motion.pointer_coordinates[0].id = 0; |
336 | - mirEvent.motion.pointer_coordinates[0].x = 10; |
337 | - mirEvent.motion.pointer_coordinates[0].y = 10; |
338 | - mirEvent.motion.pointer_coordinates[0].touch_major = 1; |
339 | - mirEvent.motion.pointer_coordinates[0].touch_minor = 1; |
340 | - mirEvent.motion.pointer_coordinates[0].pressure = 10; |
341 | - mirEvent.motion.action = mir_motion_action_down; |
342 | - mirEvent.motion.event_time = 123 * 1000000; |
343 | - |
344 | - qtEventFeeder->dispatch(mirEvent); |
345 | + auto ev1 = mev::make_event(MirInputDeviceId(), 123*1000000, 0); |
346 | + mev::add_touch(*ev1, /* touch ID */ 0, mir_touch_action_down, mir_touch_tooltype_unknown, |
347 | + 10, 10, 10, 1, 1, 10); |
348 | + qtEventFeeder->dispatch(*ev1); |
349 | |
350 | ASSERT_TRUE(Mock::VerifyAndClearExpectations(mockWindowSystem)); |
351 | |
352 | @@ -177,18 +153,10 @@ |
353 | Contains(AllOf(HasId(0), StateIsMoved())) |
354 | ),_)).Times(1); |
355 | |
356 | - mirEvent.type = mir_event_type_motion; |
357 | - mirEvent.motion.pointer_count = 1; |
358 | - mirEvent.motion.pointer_coordinates[0].id = 0; |
359 | - mirEvent.motion.pointer_coordinates[0].x = 20; |
360 | - mirEvent.motion.pointer_coordinates[0].y = 20; |
361 | - mirEvent.motion.pointer_coordinates[0].touch_major = 1; |
362 | - mirEvent.motion.pointer_coordinates[0].touch_minor = 1; |
363 | - mirEvent.motion.pointer_coordinates[0].pressure = 10; |
364 | - mirEvent.motion.action = mir_motion_action_down; |
365 | - mirEvent.motion.event_time = 125 * 1000000; |
366 | - |
367 | - qtEventFeeder->dispatch(mirEvent); |
368 | + auto ev2 = mev::make_event(MirInputDeviceId(), 123*1000000, 0); |
369 | + mev::add_touch(*ev2, /* touch ID */ 0, mir_touch_action_down, mir_touch_tooltype_unknown, |
370 | + 10, 10, 10, 1, 1, 10); |
371 | + qtEventFeeder->dispatch(*ev2); |
372 | |
373 | ASSERT_TRUE(Mock::VerifyAndClearExpectations(mockWindowSystem)); |
374 | } |
375 | |
376 | === modified file 'tests/modules/common/mock_surface.h' |
377 | --- tests/modules/common/mock_surface.h 2015-03-27 07:36:51 +0000 |
378 | +++ tests/modules/common/mock_surface.h 2015-04-01 13:50:18 +0000 |
379 | @@ -66,7 +66,7 @@ |
380 | MOCK_METHOD1(set_reception_mode, void(input::InputReceptionMode mode)); |
381 | MOCK_METHOD0(request_client_surface_close, void()); |
382 | MOCK_CONST_METHOD1(buffers_ready_for_compositor, int(void const*)); |
383 | - void set_keymap(xkb_rule_names const&) override {} |
384 | + void set_keymap(xkb_rule_names const &) override {} |
385 | |
386 | // from mir::input::surface |
387 | MOCK_CONST_METHOD1(input_area_contains, bool(geometry::Point const& point)); |
388 | @@ -80,6 +80,8 @@ |
389 | MOCK_CONST_METHOD0(client_input_fd, int()); |
390 | MOCK_METHOD2(configure, int(MirSurfaceAttrib attrib, int value)); |
391 | MOCK_CONST_METHOD1(query, int(MirSurfaceAttrib attrib)); |
392 | + bool modify(const Modifications &) override { return false; } |
393 | + |
394 | |
395 | // from mir::scene::SurfaceBufferAccess |
396 | MOCK_METHOD1(with_most_recent_buffer_do, void(std::function<void(graphics::Buffer&)> const& exec)); |
Looks like multiple possibly unrelated changes?
Still, it builds and all tests pass.
Someone can and might polish it more before the changes land in lp:qtmir.