Merge lp:~mir-team/qtmir/devel-mir-next-update into lp:qtmir/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
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

Revision history for this message
Daniel van Vugt (vanvugt) wrote :

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.

review: Approve

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));

Subscribers

People subscribed via source and target branches

to all changes: