Merge lp:~gerboland/qtubuntu/enable-debug-mode into lp:qtubuntu
- enable-debug-mode
- Merge into trunk
Status: | Superseded |
---|---|
Proposed branch: | lp:~gerboland/qtubuntu/enable-debug-mode |
Merge into: | lp:qtubuntu |
Prerequisite: | lp:~albaguirre/qtubuntu/use-mir-surface-apis |
Diff against target: |
562 lines (+167/-56) 14 files modified
debian/control (+1/-0) src/ubuntumirclient/debugextension.cpp (+55/-0) src/ubuntumirclient/debugextension.h (+39/-0) src/ubuntumirclient/input.cpp (+17/-22) src/ubuntumirclient/integration.cpp (+14/-2) src/ubuntumirclient/integration.h (+4/-1) src/ubuntumirclient/logging.h (+1/-0) src/ubuntumirclient/plugin.cpp (+5/-11) src/ubuntumirclient/plugin.h (+2/-3) src/ubuntumirclient/screen.cpp (+1/-6) src/ubuntumirclient/screenobserver.cpp (+1/-1) src/ubuntumirclient/ubuntumirclient.pro (+2/-0) src/ubuntumirclient/window.cpp (+21/-9) src/ubuntumirclient/window.h (+4/-1) |
To merge this branch: | bzr merge lp:~gerboland/qtubuntu/enable-debug-mode |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Unity8 CI Bot | continuous-integration | Approve | |
Daniel d'Andrada (community) | Needs Information | ||
Michael Terry | Abstain | ||
Nick Dedekind (community) | Needs Information | ||
PS Jenkins bot | continuous-integration | Approve | |
Review via email: mp+276293@code.launchpad.net |
This proposal has been superseded by a proposal from 2016-09-22.
Commit message
Use mir-client-debug to map window coordinates to screen coordinates
If client detects testability framework was enabled, try to load the mir-client-debug library and use it to implement UbuntuWindow:
Description of the change
Use mir-client-debug to map window coordinates to screen coordinates when under testability
To work with unity8 it needs https:/
Gerry Boland (gerboland) wrote : | # |
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:283
http://
Executed test runs:
SUCCESS: http://
deb: http://
Click here to trigger a rebuild:
http://
Gerry Boland (gerboland) wrote : | # |
To test, handiest is to apply this patch: http://
mir_demo_shell --debug
and start any qt app with "-testability" flag.
Unity8 CI Bot (unity8-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:283
https:/
Executed test runs:
Click here to trigger a rebuild:
https:/
Nick Dedekind (nick-dedekind) wrote : | # |
Does this mean we can remove UbuntuWindow:
Nick Dedekind (nick-dedekind) wrote : | # |
And how about QPlatformWindow
Gerry Boland (gerboland) wrote : | # |
Yep, it lets us remove the panelHeight hack. Could also implement mapFromGlobal too, but I didn't see a use-case
Nick Dedekind (nick-dedekind) wrote : | # |
rebase please :)
Nick Dedekind (nick-dedekind) wrote : | # |
Afraid this will not work unless we get https:/
Unity8 CI Bot (unity8-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:283
https:/
Executed test runs:
FAILURE: https:/
Click here to trigger a rebuild:
https:/
Daniel d'Andrada (dandrader) wrote : | # |
> Afraid this will not work unless we get
> https:/
It will work as long as application code calls "window-
Daniel d'Andrada (dandrader) wrote : | # |
It has a bunch of conflicts with trunk. Solved them here: lp:~dandrader/qtubuntu/enable-debug-mode
Feel free to branch it, squash its history and push it here with --overwrite.
This branch, along with lp:~dandrader/qtmir/coordinateTranslator, should be all autopilot folks need for mapping local points to screen points (regardless of any translations, rotations and scalings done by unity8 to the application surface)
Unity8 CI Bot (unity8-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:287
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
Michael Terry (mterry) wrote : | # |
This conflicts with trunk now. :(
Unity8 CI Bot (unity8-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:287
https:/
Executed test runs:
FAILURE: https:/
Click here to trigger a rebuild:
https:/
Daniel d'Andrada (dandrader) wrote : | # |
Lot's of conflicts with trunk:
"""
Text conflict in src/ubuntumircl
Text conflict in src/ubuntumircl
Text conflict in src/ubuntumircl
Text conflict in src/ubuntumircl
4 conflicts encountered.
"""
- 288. By Gerry Boland
-
Merge trunk & fix conflicts
- 289. By Gerry Boland
-
Fix up some bad merge decisions, and bump copyrights
- 290. By Gerry Boland
-
Merged trunk
Gerry Boland (gerboland) wrote : | # |
I pushed to the actual right branch this time!
Michael Terry (mterry) wrote : | # |
OK, conflicts fixed.
Unity8 CI Bot (unity8-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:290
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
Click here to trigger a rebuild:
https:/
- 291. By Gerry Boland
-
Fix FTBFS, pass debug extension to Window
Unity8 CI Bot (unity8-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:291
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
Daniel d'Andrada (dandrader) wrote : | # |
"""
+ qDebug() << "NOTICE: Loading mirclient-
"""
Do we want to keep that? If so, better categorize it so that people know where does it come from when seeing it in the console
Gerry Boland (gerboland) wrote : | # |
Updated
Daniel d'Andrada (dandrader) wrote : | # |
Those changes in src/ubuntumircl
Unity8 CI Bot (unity8-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:293
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
Unity8 CI Bot (unity8-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:294
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
- 292. By Gerry Boland
-
Merge trunk
- 293. By Gerry Boland
-
Use category logging for debug extension warnings
- 294. By Gerry Boland
-
Use dedicated logging category for debug-related messages
- 295. By Gerry Boland
-
Merge trunk
Unmerged revisions
Preview Diff
1 | === modified file 'debian/control' | |||
2 | --- debian/control 2016-08-24 12:40:30 +0000 | |||
3 | +++ debian/control 2016-09-22 15:36:58 +0000 | |||
4 | @@ -11,6 +11,7 @@ | |||
5 | 11 | libglib2.0-dev, | 11 | libglib2.0-dev, |
6 | 12 | libinput-dev, | 12 | libinput-dev, |
7 | 13 | libmirclient-dev (>= 0.13.0), | 13 | libmirclient-dev (>= 0.13.0), |
8 | 14 | libmirclient-debug-extension-dev, | ||
9 | 14 | libmtdev-dev, | 15 | libmtdev-dev, |
10 | 15 | libubuntu-application-api-dev (>= 2.9.0), | 16 | libubuntu-application-api-dev (>= 2.9.0), |
11 | 16 | libudev-dev, | 17 | libudev-dev, |
12 | 17 | 18 | ||
13 | === added file 'src/ubuntumirclient/debugextension.cpp' | |||
14 | --- src/ubuntumirclient/debugextension.cpp 1970-01-01 00:00:00 +0000 | |||
15 | +++ src/ubuntumirclient/debugextension.cpp 2016-09-22 15:36:58 +0000 | |||
16 | @@ -0,0 +1,55 @@ | |||
17 | 1 | /* | ||
18 | 2 | * Copyright (C) 2016 Canonical, Ltd. | ||
19 | 3 | * | ||
20 | 4 | * This program is free software: you can redistribute it and/or modify it under | ||
21 | 5 | * the terms of the GNU Lesser General Public License version 3, as published by | ||
22 | 6 | * the Free Software Foundation. | ||
23 | 7 | * | ||
24 | 8 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
25 | 9 | * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, | ||
26 | 10 | * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
27 | 11 | * Lesser General Public License for more details. | ||
28 | 12 | * | ||
29 | 13 | * You should have received a copy of the GNU Lesser General Public License | ||
30 | 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
31 | 15 | */ | ||
32 | 16 | |||
33 | 17 | #include "debugextension.h" | ||
34 | 18 | |||
35 | 19 | #include "logging.h" | ||
36 | 20 | |||
37 | 21 | // mir client debug | ||
38 | 22 | #include <mir_toolkit/debug/surface.h> | ||
39 | 23 | |||
40 | 24 | Q_LOGGING_CATEGORY(ubuntumirclientDebug, "ubuntumirclient.debug") | ||
41 | 25 | |||
42 | 26 | UbuntuDebugExtension::UbuntuDebugExtension() | ||
43 | 27 | : m_mirclientDebug(QStringLiteral("mirclient-debug-extension"), 1) | ||
44 | 28 | , m_mapper(nullptr) | ||
45 | 29 | { | ||
46 | 30 | qCDebug(ubuntumirclientDebug) << "NOTICE: Loading mirclient-debug-extension"; | ||
47 | 31 | m_mapper = (MapperPrototype) m_mirclientDebug.resolve("mir_debug_surface_coords_to_screen"); | ||
48 | 32 | |||
49 | 33 | if (!m_mirclientDebug.isLoaded()) { | ||
50 | 34 | qCWarning(ubuntumirclientDebug) << "ERROR: mirclient-debug-extension failed to load:" | ||
51 | 35 | << m_mirclientDebug.errorString(); | ||
52 | 36 | } else if (!m_mapper) { | ||
53 | 37 | qCWarning(ubuntumirclientDebug) << "ERROR: unable to find required symbols in mirclient-debug-extension:" | ||
54 | 38 | << m_mirclientDebug.errorString(); | ||
55 | 39 | } | ||
56 | 40 | } | ||
57 | 41 | |||
58 | 42 | QPoint UbuntuDebugExtension::mapSurfacePointToScreen(MirSurface *surface, const QPoint &point) | ||
59 | 43 | { | ||
60 | 44 | if (!m_mapper) { | ||
61 | 45 | return point; | ||
62 | 46 | } | ||
63 | 47 | |||
64 | 48 | QPoint mappedPoint; | ||
65 | 49 | bool status = m_mapper(surface, point.x(), point.y(), &mappedPoint.rx(), &mappedPoint.ry()); | ||
66 | 50 | if (status) { | ||
67 | 51 | return mappedPoint; | ||
68 | 52 | } else { | ||
69 | 53 | return point; | ||
70 | 54 | } | ||
71 | 55 | } | ||
72 | 0 | 56 | ||
73 | === added file 'src/ubuntumirclient/debugextension.h' | |||
74 | --- src/ubuntumirclient/debugextension.h 1970-01-01 00:00:00 +0000 | |||
75 | +++ src/ubuntumirclient/debugextension.h 2016-09-22 15:36:58 +0000 | |||
76 | @@ -0,0 +1,39 @@ | |||
77 | 1 | /* | ||
78 | 2 | * Copyright (C) 2016 Canonical, Ltd. | ||
79 | 3 | * | ||
80 | 4 | * This program is free software: you can redistribute it and/or modify it under | ||
81 | 5 | * the terms of the GNU Lesser General Public License version 3, as published by | ||
82 | 6 | * the Free Software Foundation. | ||
83 | 7 | * | ||
84 | 8 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
85 | 9 | * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, | ||
86 | 10 | * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
87 | 11 | * Lesser General Public License for more details. | ||
88 | 12 | * | ||
89 | 13 | * You should have received a copy of the GNU Lesser General Public License | ||
90 | 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
91 | 15 | */ | ||
92 | 16 | |||
93 | 17 | #ifndef UBUNTU_DEBUG_EXTENSION_H | ||
94 | 18 | #define UBUNTU_DEBUG_EXTENSION_H | ||
95 | 19 | |||
96 | 20 | #include <QPoint> | ||
97 | 21 | #include <QLibrary> | ||
98 | 22 | struct MirSurface; | ||
99 | 23 | |||
100 | 24 | typedef bool (*MapperPrototype)(MirSurface* surface, int x, int y, int* screenX, int* screenY); | ||
101 | 25 | |||
102 | 26 | |||
103 | 27 | class UbuntuDebugExtension | ||
104 | 28 | { | ||
105 | 29 | public: | ||
106 | 30 | UbuntuDebugExtension(); | ||
107 | 31 | |||
108 | 32 | QPoint mapSurfacePointToScreen(MirSurface *, const QPoint &point); | ||
109 | 33 | |||
110 | 34 | private: | ||
111 | 35 | QLibrary m_mirclientDebug; | ||
112 | 36 | MapperPrototype m_mapper; | ||
113 | 37 | }; | ||
114 | 38 | |||
115 | 39 | #endif // UBUNTU_DEBUG_EXTENSION_H | ||
116 | 0 | 40 | ||
117 | === modified file 'src/ubuntumirclient/input.cpp' | |||
118 | --- src/ubuntumirclient/input.cpp 2016-08-24 12:40:30 +0000 | |||
119 | +++ src/ubuntumirclient/input.cpp 2016-09-22 15:36:58 +0000 | |||
120 | @@ -209,26 +209,31 @@ | |||
121 | 209 | switch (t) | 209 | switch (t) |
122 | 210 | { | 210 | { |
123 | 211 | case mir_event_type_key: | 211 | case mir_event_type_key: |
125 | 212 | return "mir_event_type_key"; | 212 | return "key"; |
126 | 213 | case mir_event_type_motion: | 213 | case mir_event_type_motion: |
128 | 214 | return "mir_event_type_motion"; | 214 | return "motion"; |
129 | 215 | case mir_event_type_surface: | 215 | case mir_event_type_surface: |
131 | 216 | return "mir_event_type_surface"; | 216 | return "surface"; |
132 | 217 | case mir_event_type_resize: | 217 | case mir_event_type_resize: |
134 | 218 | return "mir_event_type_resize"; | 218 | return "resize"; |
135 | 219 | case mir_event_type_prompt_session_state_change: | 219 | case mir_event_type_prompt_session_state_change: |
137 | 220 | return "mir_event_type_prompt_session_state_change"; | 220 | return "prompt_session_state_change"; |
138 | 221 | case mir_event_type_orientation: | 221 | case mir_event_type_orientation: |
140 | 222 | return "mir_event_type_orientation"; | 222 | return "orientation"; |
141 | 223 | case mir_event_type_close_surface: | 223 | case mir_event_type_close_surface: |
143 | 224 | return "mir_event_type_close_surface"; | 224 | return "close_surface"; |
144 | 225 | case mir_event_type_input: | 225 | case mir_event_type_input: |
146 | 226 | return "mir_event_type_input"; | 226 | return "input"; |
147 | 227 | case mir_event_type_keymap: | ||
148 | 228 | return "keymap"; | ||
149 | 229 | case mir_event_type_input_configuration: | ||
150 | 230 | return "input_configuration"; | ||
151 | 227 | case mir_event_type_surface_output: | 231 | case mir_event_type_surface_output: |
155 | 228 | return "mir_event_type_surface_output"; | 232 | return "surface_output"; |
156 | 229 | default: | 233 | case mir_event_type_input_device_state: |
157 | 230 | return "invalid"; | 234 | return "input_device_state"; |
158 | 231 | } | 235 | } |
159 | 236 | Q_UNREACHABLE(); | ||
160 | 232 | } | 237 | } |
161 | 233 | 238 | ||
162 | 234 | void UbuntuInput::customEvent(QEvent* event) | 239 | void UbuntuInput::customEvent(QEvent* event) |
163 | @@ -334,8 +339,6 @@ | |||
164 | 334 | case mir_input_event_type_pointer: | 339 | case mir_input_event_type_pointer: |
165 | 335 | dispatchPointerEvent(window, ev); | 340 | dispatchPointerEvent(window, ev); |
166 | 336 | break; | 341 | break; |
167 | 337 | default: | ||
168 | 338 | break; | ||
169 | 339 | } | 342 | } |
170 | 340 | } | 343 | } |
171 | 341 | 344 | ||
172 | @@ -377,7 +380,6 @@ | |||
173 | 377 | touchPoint.state = Qt::TouchPointReleased; | 380 | touchPoint.state = Qt::TouchPointReleased; |
174 | 378 | break; | 381 | break; |
175 | 379 | case mir_touch_action_change: | 382 | case mir_touch_action_change: |
176 | 380 | default: | ||
177 | 381 | touchPoint.state = Qt::TouchPointMoved; | 383 | touchPoint.state = Qt::TouchPointMoved; |
178 | 382 | } | 384 | } |
179 | 383 | 385 | ||
180 | @@ -537,8 +539,6 @@ | |||
181 | 537 | case mir_pointer_action_leave: | 539 | case mir_pointer_action_leave: |
182 | 538 | QWindowSystemInterface::handleLeaveEvent(window); | 540 | QWindowSystemInterface::handleLeaveEvent(window); |
183 | 539 | break; | 541 | break; |
184 | 540 | default: | ||
185 | 541 | qCDebug(ubuntumirclient, "Unrecognized pointer event"); | ||
186 | 542 | } | 542 | } |
187 | 543 | } | 543 | } |
188 | 544 | 544 | ||
189 | @@ -547,19 +547,14 @@ | |||
190 | 547 | switch (orientation) { | 547 | switch (orientation) { |
191 | 548 | case mir_orientation_normal: | 548 | case mir_orientation_normal: |
192 | 549 | return "Normal"; | 549 | return "Normal"; |
193 | 550 | break; | ||
194 | 551 | case mir_orientation_left: | 550 | case mir_orientation_left: |
195 | 552 | return "Left"; | 551 | return "Left"; |
196 | 553 | break; | ||
197 | 554 | case mir_orientation_inverted: | 552 | case mir_orientation_inverted: |
198 | 555 | return "Inverted"; | 553 | return "Inverted"; |
199 | 556 | break; | ||
200 | 557 | case mir_orientation_right: | 554 | case mir_orientation_right: |
201 | 558 | return "Right"; | 555 | return "Right"; |
202 | 559 | break; | ||
203 | 560 | default: | ||
204 | 561 | return "INVALID!"; | ||
205 | 562 | } | 556 | } |
206 | 557 | Q_UNREACHABLE(); | ||
207 | 563 | } | 558 | } |
208 | 564 | 559 | ||
209 | 565 | void UbuntuInput::dispatchOrientationEvent(QWindow *window, const MirOrientationEvent *event) | 560 | void UbuntuInput::dispatchOrientationEvent(QWindow *window, const MirOrientationEvent *event) |
210 | 566 | 561 | ||
211 | === modified file 'src/ubuntumirclient/integration.cpp' | |||
212 | --- src/ubuntumirclient/integration.cpp 2016-08-24 12:40:30 +0000 | |||
213 | +++ src/ubuntumirclient/integration.cpp 2016-09-22 15:36:58 +0000 | |||
214 | @@ -18,6 +18,7 @@ | |||
215 | 18 | #include "integration.h" | 18 | #include "integration.h" |
216 | 19 | #include "backingstore.h" | 19 | #include "backingstore.h" |
217 | 20 | #include "clipboard.h" | 20 | #include "clipboard.h" |
218 | 21 | #include "debugextension.h" | ||
219 | 21 | #include "glcontext.h" | 22 | #include "glcontext.h" |
220 | 22 | #include "input.h" | 23 | #include "input.h" |
221 | 23 | #include "logging.h" | 24 | #include "logging.h" |
222 | @@ -69,7 +70,7 @@ | |||
223 | 69 | QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationSuspended); | 70 | QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationSuspended); |
224 | 70 | } | 71 | } |
225 | 71 | 72 | ||
227 | 72 | UbuntuClientIntegration::UbuntuClientIntegration() | 73 | UbuntuClientIntegration::UbuntuClientIntegration(int argc, char **argv) |
228 | 73 | : QPlatformIntegration() | 74 | : QPlatformIntegration() |
229 | 74 | , mNativeInterface(new UbuntuNativeInterface(this)) | 75 | , mNativeInterface(new UbuntuNativeInterface(this)) |
230 | 75 | , mFontDb(new QGenericUnixFontDatabase) | 76 | , mFontDb(new QGenericUnixFontDatabase) |
231 | @@ -104,6 +105,17 @@ | |||
232 | 104 | mEglNativeDisplay = mir_connection_get_egl_native_display(mMirConnection); | 105 | mEglNativeDisplay = mir_connection_get_egl_native_display(mMirConnection); |
233 | 105 | ASSERT((mEglDisplay = eglGetDisplay(mEglNativeDisplay)) != EGL_NO_DISPLAY); | 106 | ASSERT((mEglDisplay = eglGetDisplay(mEglNativeDisplay)) != EGL_NO_DISPLAY); |
234 | 106 | ASSERT(eglInitialize(mEglDisplay, nullptr, nullptr) == EGL_TRUE); | 107 | ASSERT(eglInitialize(mEglDisplay, nullptr, nullptr) == EGL_TRUE); |
235 | 108 | |||
236 | 109 | // Has debug mode been requsted, either with "-testability" switch or QT_LOAD_TESTABILITY env var | ||
237 | 110 | bool testability = qEnvironmentVariableIsSet("QT_LOAD_TESTABILITY"); | ||
238 | 111 | for (int i=1; !testability && i<argc; i++) { | ||
239 | 112 | if (strcmp(argv[i], "-testability") == 0) { | ||
240 | 113 | testability = true; | ||
241 | 114 | } | ||
242 | 115 | } | ||
243 | 116 | if (testability) { | ||
244 | 117 | mDebugExtension.reset(new UbuntuDebugExtension); | ||
245 | 118 | } | ||
246 | 107 | } | 119 | } |
247 | 108 | 120 | ||
248 | 109 | void UbuntuClientIntegration::initialize() | 121 | void UbuntuClientIntegration::initialize() |
249 | @@ -210,7 +222,7 @@ | |||
250 | 210 | 222 | ||
251 | 211 | QPlatformWindow* UbuntuClientIntegration::createPlatformWindow(QWindow* window) const | 223 | QPlatformWindow* UbuntuClientIntegration::createPlatformWindow(QWindow* window) const |
252 | 212 | { | 224 | { |
254 | 213 | return new UbuntuWindow(window, mInput, mNativeInterface, mEglDisplay, mMirConnection); | 225 | return new UbuntuWindow(window, mInput, mNativeInterface, mEglDisplay, mMirConnection, mDebugExtension.data()); |
255 | 214 | } | 226 | } |
256 | 215 | 227 | ||
257 | 216 | bool UbuntuClientIntegration::hasCapability(QPlatformIntegration::Capability cap) const | 228 | bool UbuntuClientIntegration::hasCapability(QPlatformIntegration::Capability cap) const |
258 | 217 | 229 | ||
259 | === modified file 'src/ubuntumirclient/integration.h' | |||
260 | --- src/ubuntumirclient/integration.h 2016-08-24 12:40:30 +0000 | |||
261 | +++ src/ubuntumirclient/integration.h 2016-09-22 15:36:58 +0000 | |||
262 | @@ -29,6 +29,7 @@ | |||
263 | 29 | 29 | ||
264 | 30 | #include <EGL/egl.h> | 30 | #include <EGL/egl.h> |
265 | 31 | 31 | ||
266 | 32 | class UbuntuDebugExtension; | ||
267 | 32 | class UbuntuInput; | 33 | class UbuntuInput; |
268 | 33 | class UbuntuNativeInterface; | 34 | class UbuntuNativeInterface; |
269 | 34 | class UbuntuScreen; | 35 | class UbuntuScreen; |
270 | @@ -39,7 +40,7 @@ | |||
271 | 39 | Q_OBJECT | 40 | Q_OBJECT |
272 | 40 | 41 | ||
273 | 41 | public: | 42 | public: |
275 | 42 | UbuntuClientIntegration(); | 43 | UbuntuClientIntegration(int argc, char **argv); |
276 | 43 | virtual ~UbuntuClientIntegration(); | 44 | virtual ~UbuntuClientIntegration(); |
277 | 44 | 45 | ||
278 | 45 | // QPlatformIntegration methods. | 46 | // QPlatformIntegration methods. |
279 | @@ -64,6 +65,7 @@ | |||
280 | 64 | EGLDisplay eglDisplay() const { return mEglDisplay; } | 65 | EGLDisplay eglDisplay() const { return mEglDisplay; } |
281 | 65 | EGLNativeDisplayType eglNativeDisplay() const { return mEglNativeDisplay; } | 66 | EGLNativeDisplayType eglNativeDisplay() const { return mEglNativeDisplay; } |
282 | 66 | UbuntuScreenObserver *screenObserver() const { return mScreenObserver.data(); } | 67 | UbuntuScreenObserver *screenObserver() const { return mScreenObserver.data(); } |
283 | 68 | UbuntuDebugExtension *debugExtension() const { return mDebugExtension.data(); } | ||
284 | 67 | 69 | ||
285 | 68 | private Q_SLOTS: | 70 | private Q_SLOTS: |
286 | 69 | void destroyScreen(UbuntuScreen *screen); | 71 | void destroyScreen(UbuntuScreen *screen); |
287 | @@ -81,6 +83,7 @@ | |||
288 | 81 | 83 | ||
289 | 82 | UbuntuInput* mInput; | 84 | UbuntuInput* mInput; |
290 | 83 | QPlatformInputContext* mInputContext; | 85 | QPlatformInputContext* mInputContext; |
291 | 86 | QScopedPointer<UbuntuDebugExtension> mDebugExtension; | ||
292 | 84 | QScopedPointer<UbuntuScreenObserver> mScreenObserver; | 87 | QScopedPointer<UbuntuScreenObserver> mScreenObserver; |
293 | 85 | qreal mScaleFactor; | 88 | qreal mScaleFactor; |
294 | 86 | 89 | ||
295 | 87 | 90 | ||
296 | === modified file 'src/ubuntumirclient/logging.h' | |||
297 | --- src/ubuntumirclient/logging.h 2016-06-22 17:16:33 +0000 | |||
298 | +++ src/ubuntumirclient/logging.h 2016-09-22 15:36:58 +0000 | |||
299 | @@ -26,5 +26,6 @@ | |||
300 | 26 | Q_DECLARE_LOGGING_CATEGORY(ubuntumirclientInput) | 26 | Q_DECLARE_LOGGING_CATEGORY(ubuntumirclientInput) |
301 | 27 | Q_DECLARE_LOGGING_CATEGORY(ubuntumirclientGraphics) | 27 | Q_DECLARE_LOGGING_CATEGORY(ubuntumirclientGraphics) |
302 | 28 | Q_DECLARE_LOGGING_CATEGORY(ubuntumirclientCursor) | 28 | Q_DECLARE_LOGGING_CATEGORY(ubuntumirclientCursor) |
303 | 29 | Q_DECLARE_LOGGING_CATEGORY(ubuntumirclientDebug) | ||
304 | 29 | 30 | ||
305 | 30 | #endif // QUBUNTULOGGING_H | 31 | #endif // QUBUNTULOGGING_H |
306 | 31 | 32 | ||
307 | === modified file 'src/ubuntumirclient/plugin.cpp' | |||
308 | --- src/ubuntumirclient/plugin.cpp 2015-12-04 16:19:33 +0000 | |||
309 | +++ src/ubuntumirclient/plugin.cpp 2016-09-22 15:36:58 +0000 | |||
310 | @@ -1,5 +1,5 @@ | |||
311 | 1 | /* | 1 | /* |
313 | 2 | * Copyright (C) 2014 Canonical, Ltd. | 2 | * Copyright (C) 2014-2016 Canonical, Ltd. |
314 | 3 | * | 3 | * |
315 | 4 | * This program is free software: you can redistribute it and/or modify it under | 4 | * This program is free software: you can redistribute it and/or modify it under |
316 | 5 | * the terms of the GNU Lesser General Public License version 3, as published by | 5 | * the terms of the GNU Lesser General Public License version 3, as published by |
317 | @@ -20,15 +20,9 @@ | |||
318 | 20 | 20 | ||
319 | 21 | Q_LOGGING_CATEGORY(ubuntumirclient, "ubuntumirclient", QtWarningMsg) | 21 | Q_LOGGING_CATEGORY(ubuntumirclient, "ubuntumirclient", QtWarningMsg) |
320 | 22 | 22 | ||
330 | 23 | QStringList UbuntuMirClientIntegrationPlugin::keys() const | 23 | QPlatformIntegration *UbuntuMirClientIntegrationPlugin::create(const QString &system, |
331 | 24 | { | 24 | const QStringList &/*paramList*/, |
332 | 25 | QStringList list; | 25 | int &argc, char **argv) |
324 | 26 | list << QStringLiteral("ubuntumirclient"); | ||
325 | 27 | return list; | ||
326 | 28 | } | ||
327 | 29 | |||
328 | 30 | QPlatformIntegration* UbuntuMirClientIntegrationPlugin::create(const QString &system, | ||
329 | 31 | const QStringList &) | ||
333 | 32 | { | 26 | { |
334 | 33 | if (system.toLower() == QLatin1String("ubuntumirclient")) { | 27 | if (system.toLower() == QLatin1String("ubuntumirclient")) { |
335 | 34 | #ifdef PLATFORM_API_TOUCH | 28 | #ifdef PLATFORM_API_TOUCH |
336 | @@ -36,7 +30,7 @@ | |||
337 | 36 | #else | 30 | #else |
338 | 37 | setenv("UBUNTU_PLATFORM_API_BACKEND", "desktop_mirclient", 1); | 31 | setenv("UBUNTU_PLATFORM_API_BACKEND", "desktop_mirclient", 1); |
339 | 38 | #endif | 32 | #endif |
341 | 39 | return new UbuntuClientIntegration; | 33 | return new UbuntuClientIntegration(argc, argv); |
342 | 40 | } else { | 34 | } else { |
343 | 41 | return 0; | 35 | return 0; |
344 | 42 | } | 36 | } |
345 | 43 | 37 | ||
346 | === modified file 'src/ubuntumirclient/plugin.h' | |||
347 | --- src/ubuntumirclient/plugin.h 2014-06-18 23:10:00 +0000 | |||
348 | +++ src/ubuntumirclient/plugin.h 2016-09-22 15:36:58 +0000 | |||
349 | @@ -1,5 +1,5 @@ | |||
350 | 1 | /* | 1 | /* |
352 | 2 | * Copyright (C) 2014 Canonical, Ltd. | 2 | * Copyright (C) 2014-2016 Canonical, Ltd. |
353 | 3 | * | 3 | * |
354 | 4 | * This program is free software: you can redistribute it and/or modify it under | 4 | * This program is free software: you can redistribute it and/or modify it under |
355 | 5 | * the terms of the GNU Lesser General Public License version 3, as published by | 5 | * the terms of the GNU Lesser General Public License version 3, as published by |
356 | @@ -25,8 +25,7 @@ | |||
357 | 25 | Q_PLUGIN_METADATA(IID QPlatformIntegrationFactoryInterface_iid FILE "ubuntumirclient.json") | 25 | Q_PLUGIN_METADATA(IID QPlatformIntegrationFactoryInterface_iid FILE "ubuntumirclient.json") |
358 | 26 | 26 | ||
359 | 27 | public: | 27 | public: |
362 | 28 | QStringList keys() const; | 28 | QPlatformIntegration *create(const QString &system, const QStringList ¶mList, int &argc, char **argv) override; |
361 | 29 | QPlatformIntegration* create(const QString&, const QStringList&); | ||
363 | 30 | }; | 29 | }; |
364 | 31 | 30 | ||
365 | 32 | #endif // UBUNTU_CLIENT_PLUGIN_H | 31 | #endif // UBUNTU_CLIENT_PLUGIN_H |
366 | 33 | 32 | ||
367 | === modified file 'src/ubuntumirclient/screen.cpp' | |||
368 | --- src/ubuntumirclient/screen.cpp 2016-04-28 14:09:54 +0000 | |||
369 | +++ src/ubuntumirclient/screen.cpp 2016-09-22 15:36:58 +0000 | |||
370 | @@ -46,9 +46,8 @@ | |||
371 | 46 | return "inverted portrait"; | 46 | return "inverted portrait"; |
372 | 47 | case Qt::InvertedLandscapeOrientation: | 47 | case Qt::InvertedLandscapeOrientation: |
373 | 48 | return "inverted landscape"; | 48 | return "inverted landscape"; |
374 | 49 | default: | ||
375 | 50 | return "INVALID!"; | ||
376 | 51 | } | 49 | } |
377 | 50 | Q_UNREACHABLE(); | ||
378 | 52 | } | 51 | } |
379 | 53 | 52 | ||
380 | 54 | const QEvent::Type OrientationChangeEvent::mType = | 53 | const QEvent::Type OrientationChangeEvent::mType = |
381 | @@ -97,10 +96,6 @@ | |||
382 | 97 | Qt::InvertedLandscapeOrientation : Qt::InvertedPortraitOrientation; | 96 | Qt::InvertedLandscapeOrientation : Qt::InvertedPortraitOrientation; |
383 | 98 | break; | 97 | break; |
384 | 99 | } | 98 | } |
385 | 100 | default: { | ||
386 | 101 | qCDebug(ubuntumirclient, "UbuntuScreen::customEvent - Unknown orientation."); | ||
387 | 102 | return; | ||
388 | 103 | } | ||
389 | 104 | } | 99 | } |
390 | 105 | 100 | ||
391 | 106 | // Raise the event signal so that client apps know the orientation changed | 101 | // Raise the event signal so that client apps know the orientation changed |
392 | 107 | 102 | ||
393 | === modified file 'src/ubuntumirclient/screenobserver.cpp' | |||
394 | --- src/ubuntumirclient/screenobserver.cpp 2016-04-28 14:09:54 +0000 | |||
395 | +++ src/ubuntumirclient/screenobserver.cpp 2016-09-22 15:36:58 +0000 | |||
396 | @@ -47,7 +47,7 @@ | |||
397 | 47 | case mir_form_factor_tv: return "tv"; | 47 | case mir_form_factor_tv: return "tv"; |
398 | 48 | case mir_form_factor_projector: return "projector"; | 48 | case mir_form_factor_projector: return "projector"; |
399 | 49 | } | 49 | } |
401 | 50 | return ""; | 50 | Q_UNREACHABLE(); |
402 | 51 | } | 51 | } |
403 | 52 | } // anonymous namespace | 52 | } // anonymous namespace |
404 | 53 | 53 | ||
405 | 54 | 54 | ||
406 | === modified file 'src/ubuntumirclient/ubuntumirclient.pro' | |||
407 | --- src/ubuntumirclient/ubuntumirclient.pro 2016-08-24 12:40:30 +0000 | |||
408 | +++ src/ubuntumirclient/ubuntumirclient.pro 2016-09-22 15:36:58 +0000 | |||
409 | @@ -18,6 +18,7 @@ | |||
410 | 18 | backingstore.cpp \ | 18 | backingstore.cpp \ |
411 | 19 | clipboard.cpp \ | 19 | clipboard.cpp \ |
412 | 20 | cursor.cpp \ | 20 | cursor.cpp \ |
413 | 21 | debugextension.cpp \ | ||
414 | 21 | glcontext.cpp \ | 22 | glcontext.cpp \ |
415 | 22 | input.cpp \ | 23 | input.cpp \ |
416 | 23 | integration.cpp \ | 24 | integration.cpp \ |
417 | @@ -34,6 +35,7 @@ | |||
418 | 34 | backingstore.h \ | 35 | backingstore.h \ |
419 | 35 | clipboard.h \ | 36 | clipboard.h \ |
420 | 36 | cursor.h \ | 37 | cursor.h \ |
421 | 38 | debugextension.h \ | ||
422 | 37 | glcontext.h \ | 39 | glcontext.h \ |
423 | 38 | input.h \ | 40 | input.h \ |
424 | 39 | integration.h \ | 41 | integration.h \ |
425 | 40 | 42 | ||
426 | === modified file 'src/ubuntumirclient/window.cpp' | |||
427 | --- src/ubuntumirclient/window.cpp 2016-08-31 01:51:15 +0000 | |||
428 | +++ src/ubuntumirclient/window.cpp 2016-09-22 15:36:58 +0000 | |||
429 | @@ -16,8 +16,11 @@ | |||
430 | 16 | 16 | ||
431 | 17 | // Local | 17 | // Local |
432 | 18 | #include "window.h" | 18 | #include "window.h" |
433 | 19 | //#include "clipboard.h" | ||
434 | 20 | #include "debugextension.h" | ||
435 | 19 | #include "nativeinterface.h" | 21 | #include "nativeinterface.h" |
436 | 20 | #include "input.h" | 22 | #include "input.h" |
437 | 23 | #include "integration.h" | ||
438 | 21 | #include "screen.h" | 24 | #include "screen.h" |
439 | 22 | #include "logging.h" | 25 | #include "logging.h" |
440 | 23 | 26 | ||
441 | @@ -81,9 +84,8 @@ | |||
442 | 81 | return "Minimized"; | 84 | return "Minimized"; |
443 | 82 | case Qt::WindowActive: | 85 | case Qt::WindowActive: |
444 | 83 | return "Active"; | 86 | return "Active"; |
445 | 84 | default: | ||
446 | 85 | return "!?"; | ||
447 | 86 | } | 87 | } |
448 | 88 | Q_UNREACHABLE(); | ||
449 | 87 | } | 89 | } |
450 | 88 | 90 | ||
451 | 89 | const char *mirSurfaceStateToStr(MirSurfaceState surfaceState) | 91 | const char *mirSurfaceStateToStr(MirSurfaceState surfaceState) |
452 | @@ -97,8 +99,9 @@ | |||
453 | 97 | case mir_surface_state_fullscreen: return "fullscreen"; | 99 | case mir_surface_state_fullscreen: return "fullscreen"; |
454 | 98 | case mir_surface_state_horizmaximized: return "horizmaximized"; | 100 | case mir_surface_state_horizmaximized: return "horizmaximized"; |
455 | 99 | case mir_surface_state_hidden: return "hidden"; | 101 | case mir_surface_state_hidden: return "hidden"; |
457 | 100 | default: return "!?"; | 102 | case mir_surface_states: Q_UNREACHABLE(); |
458 | 101 | } | 103 | } |
459 | 104 | Q_UNREACHABLE(); | ||
460 | 102 | } | 105 | } |
461 | 103 | 106 | ||
462 | 104 | const char *mirPixelFormatToStr(MirPixelFormat pixelFormat) | 107 | const char *mirPixelFormatToStr(MirPixelFormat pixelFormat) |
463 | @@ -114,15 +117,16 @@ | |||
464 | 114 | case mir_pixel_format_rgb_565: return "RGB565"; | 117 | case mir_pixel_format_rgb_565: return "RGB565"; |
465 | 115 | case mir_pixel_format_rgba_5551: return "RGBA5551"; | 118 | case mir_pixel_format_rgba_5551: return "RGBA5551"; |
466 | 116 | case mir_pixel_format_rgba_4444: return "RGBA4444"; | 119 | case mir_pixel_format_rgba_4444: return "RGBA4444"; |
469 | 117 | case mir_pixel_formats: | 120 | case mir_pixel_formats: Q_UNREACHABLE(); |
468 | 118 | default: return "???"; | ||
470 | 119 | } | 121 | } |
471 | 122 | Q_UNREACHABLE(); | ||
472 | 120 | } | 123 | } |
473 | 121 | 124 | ||
474 | 122 | MirSurfaceState qtWindowStateToMirSurfaceState(Qt::WindowState state) | 125 | MirSurfaceState qtWindowStateToMirSurfaceState(Qt::WindowState state) |
475 | 123 | { | 126 | { |
476 | 124 | switch (state) { | 127 | switch (state) { |
477 | 125 | case Qt::WindowNoState: | 128 | case Qt::WindowNoState: |
478 | 129 | case Qt::WindowActive: | ||
479 | 126 | return mir_surface_state_restored; | 130 | return mir_surface_state_restored; |
480 | 127 | case Qt::WindowFullScreen: | 131 | case Qt::WindowFullScreen: |
481 | 128 | return mir_surface_state_fullscreen; | 132 | return mir_surface_state_fullscreen; |
482 | @@ -130,10 +134,8 @@ | |||
483 | 130 | return mir_surface_state_maximized; | 134 | return mir_surface_state_maximized; |
484 | 131 | case Qt::WindowMinimized: | 135 | case Qt::WindowMinimized: |
485 | 132 | return mir_surface_state_minimized; | 136 | return mir_surface_state_minimized; |
486 | 133 | default: | ||
487 | 134 | qCWarning(ubuntumirclient, "Unexpected Qt::WindowState: %d", state); | ||
488 | 135 | return mir_surface_state_restored; | ||
489 | 136 | } | 137 | } |
490 | 138 | return mir_surface_state_unknown; // should never be reached | ||
491 | 137 | } | 139 | } |
492 | 138 | 140 | ||
493 | 139 | WId makeId() | 141 | WId makeId() |
494 | @@ -588,13 +590,14 @@ | |||
495 | 588 | } | 590 | } |
496 | 589 | 591 | ||
497 | 590 | UbuntuWindow::UbuntuWindow(QWindow *w, UbuntuInput *input, UbuntuNativeInterface *native, | 592 | UbuntuWindow::UbuntuWindow(QWindow *w, UbuntuInput *input, UbuntuNativeInterface *native, |
499 | 591 | EGLDisplay eglDisplay, MirConnection *mirConnection) | 593 | EGLDisplay eglDisplay, MirConnection *mirConnection, UbuntuDebugExtension *debugExt) |
500 | 592 | : QObject(nullptr) | 594 | : QObject(nullptr) |
501 | 593 | , QPlatformWindow(w) | 595 | , QPlatformWindow(w) |
502 | 594 | , mId(makeId()) | 596 | , mId(makeId()) |
503 | 595 | , mWindowState(w->windowState()) | 597 | , mWindowState(w->windowState()) |
504 | 596 | , mWindowFlags(w->flags()) | 598 | , mWindowFlags(w->flags()) |
505 | 597 | , mWindowVisible(false) | 599 | , mWindowVisible(false) |
506 | 600 | , mDebugExtention(debugExt) | ||
507 | 598 | , mNativeInterface(native) | 601 | , mNativeInterface(native) |
508 | 599 | , mSurface(new UbuntuSurface{this, eglDisplay, input, mirConnection}) | 602 | , mSurface(new UbuntuSurface{this, eglDisplay, input, mirConnection}) |
509 | 600 | , mScale(1.0) | 603 | , mScale(1.0) |
510 | @@ -786,6 +789,15 @@ | |||
511 | 786 | return mSurface->format(); | 789 | return mSurface->format(); |
512 | 787 | } | 790 | } |
513 | 788 | 791 | ||
514 | 792 | QPoint UbuntuWindow::mapToGlobal(const QPoint &pos) const | ||
515 | 793 | { | ||
516 | 794 | if (mDebugExtention) { | ||
517 | 795 | return mDebugExtention->mapSurfacePointToScreen(mSurface->mirSurface(), pos); | ||
518 | 796 | } else { | ||
519 | 797 | return pos; | ||
520 | 798 | } | ||
521 | 799 | } | ||
522 | 800 | |||
523 | 789 | void* UbuntuWindow::eglSurface() const | 801 | void* UbuntuWindow::eglSurface() const |
524 | 790 | { | 802 | { |
525 | 791 | return mSurface->eglSurface(); | 803 | return mSurface->eglSurface(); |
526 | 792 | 804 | ||
527 | === modified file 'src/ubuntumirclient/window.h' | |||
528 | --- src/ubuntumirclient/window.h 2016-08-24 12:40:30 +0000 | |||
529 | +++ src/ubuntumirclient/window.h 2016-09-22 15:36:58 +0000 | |||
530 | @@ -27,6 +27,7 @@ | |||
531 | 27 | 27 | ||
532 | 28 | #include <EGL/egl.h> | 28 | #include <EGL/egl.h> |
533 | 29 | 29 | ||
534 | 30 | class UbuntuDebugExtension; | ||
535 | 30 | class UbuntuNativeInterface; | 31 | class UbuntuNativeInterface; |
536 | 31 | class UbuntuInput; | 32 | class UbuntuInput; |
537 | 32 | class UbuntuScreen; | 33 | class UbuntuScreen; |
538 | @@ -39,7 +40,7 @@ | |||
539 | 39 | Q_OBJECT | 40 | Q_OBJECT |
540 | 40 | public: | 41 | public: |
541 | 41 | UbuntuWindow(QWindow *w, UbuntuInput *input, UbuntuNativeInterface* native, EGLDisplay eglDisplay, | 42 | UbuntuWindow(QWindow *w, UbuntuInput *input, UbuntuNativeInterface* native, EGLDisplay eglDisplay, |
543 | 42 | MirConnection *mirConnection); | 43 | MirConnection *mirConnection, UbuntuDebugExtension *debugExt); |
544 | 43 | virtual ~UbuntuWindow(); | 44 | virtual ~UbuntuWindow(); |
545 | 44 | 45 | ||
546 | 45 | // QPlatformWindow methods. | 46 | // QPlatformWindow methods. |
547 | @@ -52,6 +53,7 @@ | |||
548 | 52 | void propagateSizeHints() override; | 53 | void propagateSizeHints() override; |
549 | 53 | bool isExposed() const override; | 54 | bool isExposed() const override; |
550 | 54 | 55 | ||
551 | 56 | QPoint mapToGlobal(const QPoint &pos) const override; | ||
552 | 55 | QSurfaceFormat format() const override; | 57 | QSurfaceFormat format() const override; |
553 | 56 | 58 | ||
554 | 57 | // Additional Window properties exposed by NativeInterface | 59 | // Additional Window properties exposed by NativeInterface |
555 | @@ -79,6 +81,7 @@ | |||
556 | 79 | Qt::WindowFlags mWindowFlags; | 81 | Qt::WindowFlags mWindowFlags; |
557 | 80 | bool mWindowVisible; | 82 | bool mWindowVisible; |
558 | 81 | bool mWindowExposed; | 83 | bool mWindowExposed; |
559 | 84 | UbuntuDebugExtension *mDebugExtention; | ||
560 | 82 | UbuntuNativeInterface *mNativeInterface; | 85 | UbuntuNativeInterface *mNativeInterface; |
561 | 83 | std::unique_ptr<UbuntuSurface> mSurface; | 86 | std::unique_ptr<UbuntuSurface> mSurface; |
562 | 84 | float mScale; | 87 | float mScale; |
Note: this requires work on unity8's side before it is functional. But it works with mir-demo-server.
Also note, mir only supports this mir-client-debug extension if the mir server is started with the --debug argument.
This will be a problem for application autopilot testing, as it will require unity8 to be restarted with the --debug flag now.