Merge lp:~dandrader/qtubuntu/exposeMirSurface into lp:qtubuntu

Proposed by Daniel d'Andrada
Status: Superseded
Proposed branch: lp:~dandrader/qtubuntu/exposeMirSurface
Merge into: lp:qtubuntu
Diff against target: 179 lines (+69/-13)
5 files modified
debian/changelog (+6/-0)
src/ubuntumirclient/integration.cpp (+40/-6)
src/ubuntumirclient/integration.h (+4/-2)
src/ubuntumirclient/nativeinterface.cpp (+18/-4)
src/ubuntumirclient/nativeinterface.h (+1/-1)
To merge this branch: bzr merge lp:~dandrader/qtubuntu/exposeMirSurface
Reviewer Review Type Date Requested Status
Unity8 CI Bot continuous-integration Needs Fixing
Ubuntu Phablet Team Pending
Review via email: mp+296981@code.launchpad.net

Commit message

Expose MirSurface to client apps through the native interface

Description of the change

Needed by ubuntu-keyboard to fill out the input shape/region of its surface.

To post a comment you must log in.
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote :

FAILED: Continuous integration, rev:323
https://unity8-jenkins.ubuntu.com/job/lp-qtubuntu-ci/72/
Executed test runs:
    FAILURE: https://unity8-jenkins.ubuntu.com/job/build/1935/console
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-0-fetch/1961
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/1896
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/1896
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-1-sourcepkg/release=yakkety/1896
    FAILURE: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=amd64,release=vivid+overlay/1887/console
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=amd64,release=xenial+overlay/1887
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=amd64,release=xenial+overlay/1887/artifact/output/*zip*/output.zip
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=amd64,release=yakkety/1887
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=amd64,release=yakkety/1887/artifact/output/*zip*/output.zip
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=vivid+overlay/1887
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=vivid+overlay/1887/artifact/output/*zip*/output.zip
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=xenial+overlay/1887
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=xenial+overlay/1887/artifact/output/*zip*/output.zip
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=yakkety/1887
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=yakkety/1887/artifact/output/*zip*/output.zip
    FAILURE: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=i386,release=vivid+overlay/1887/console
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=i386,release=xenial+overlay/1887
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=i386,release=xenial+overlay/1887/artifact/output/*zip*/output.zip
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=i386,release=yakkety/1887
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=i386,release=yakkety/1887/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-qtubuntu-ci/72/rebuild

review: Needs Fixing (continuous-integration)
322. By Daniel d'Andrada

Generate better mir session names

323. By Nick Dedekind

Support for cross building

324. By Gerry Boland

Convert UbuntuOpenGLContext to use QEGLPlatformContext, and allow clients to customize chosen GLConfig (LP: #1507817, #1549455)

325. By Gerry Boland

Integration: no need for the non-const versions of createWindow and createGLContext

326. By CI Train Bot Account

Releasing 0.62+16.10.20160614-0ubuntu1

327. By MichaƂ Sawicz

Revert r324 "EGL convenience" (LP: #1594198)

328. By CI Train Bot Account

Releasing 0.62+16.10.20160620-0ubuntu1

329. By Daniel d'Andrada

Expose MirSurface to client apps through the native interface

Unmerged revisions

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 2016-05-27 13:05:27 +0000
3+++ debian/changelog 2016-06-09 18:58:55 +0000
4@@ -1,3 +1,9 @@
5+qtubuntu (0.63) UNRELEASED; urgency=medium
6+
7+ * Expose MirSurface to client apps through the native interface
8+
9+ -- Daniel d'Andrada <daniel.dandrada@canonical.com> Thu, 09 Jun 2016 15:48:12 -0300
10+
11 qtubuntu (0.62+16.10.20160527.1-0ubuntu1) yakkety; urgency=medium
12
13 [ Albert Astals Cid ]
14
15=== modified file 'src/ubuntumirclient/integration.cpp'
16--- src/ubuntumirclient/integration.cpp 2016-04-28 14:44:18 +0000
17+++ src/ubuntumirclient/integration.cpp 2016-06-09 18:58:55 +0000
18@@ -28,6 +28,7 @@
19 #include "window.h"
20
21 // Qt
22+#include <QFileInfo>
23 #include <QGuiApplication>
24 #include <private/qguiapplication_p.h>
25 #include <qpa/qplatformnativeinterface.h>
26@@ -77,8 +78,12 @@
27 , mClipboard(new UbuntuClipboard)
28 , mScaleFactor(1.0)
29 {
30- setupOptions();
31- setupDescription();
32+ {
33+ QStringList args = QCoreApplication::arguments();
34+ setupOptions(args);
35+ QByteArray sessionName = generateSessionName(args);
36+ setupDescription(sessionName);
37+ }
38
39 // Create new application instance
40 mInstance = u_application_instance_new_from_description_with_options(mDesc, mOptions);
41@@ -161,9 +166,8 @@
42 return mServices;
43 }
44
45-void UbuntuClientIntegration::setupOptions()
46+void UbuntuClientIntegration::setupOptions(QStringList &args)
47 {
48- QStringList args = QCoreApplication::arguments();
49 int argc = args.size() + 1;
50 char **argv = new char*[argc];
51 for (int i = 0; i < argc - 1; i++)
52@@ -177,10 +181,11 @@
53 delete [] argv;
54 }
55
56-void UbuntuClientIntegration::setupDescription()
57+void UbuntuClientIntegration::setupDescription(QByteArray &sessionName)
58 {
59 mDesc = u_application_description_new();
60- UApplicationId* id = u_application_id_new_from_stringn("QtUbuntu", 8);
61+
62+ UApplicationId* id = u_application_id_new_from_stringn(sessionName.data(), sessionName.count());
63 u_application_description_set_application_id(mDesc, id);
64
65 UApplicationLifecycleDelegate* delegate = u_application_lifecycle_delegate_new();
66@@ -190,6 +195,35 @@
67 u_application_description_set_application_lifecycle_delegate(mDesc, delegate);
68 }
69
70+QByteArray UbuntuClientIntegration::generateSessionName(QStringList &args)
71+{
72+ // Try to come up with some meaningful session name to uniquely identify this session,
73+ // helping with shell debugging
74+
75+ if (args.count() == 0) {
76+ return QByteArray("QtUbuntu");
77+ } if (args[0].contains("qmlscene")) {
78+ return generateSessionNameFromQmlFile(args);
79+ } else {
80+ // use the executable name
81+ QFileInfo fileInfo(args[0]);
82+ return fileInfo.fileName().toLocal8Bit();
83+ }
84+}
85+
86+QByteArray UbuntuClientIntegration::generateSessionNameFromQmlFile(QStringList &args)
87+{
88+ Q_FOREACH (QString arg, args) {
89+ if (arg.endsWith(".qml")) {
90+ QFileInfo fileInfo(arg);
91+ return fileInfo.fileName().toLocal8Bit();
92+ }
93+ }
94+
95+ // give up
96+ return "qmlscene";
97+}
98+
99 QPlatformWindow* UbuntuClientIntegration::createPlatformWindow(QWindow* window) const
100 {
101 return const_cast<UbuntuClientIntegration*>(this)->createPlatformWindow(window);
102
103=== modified file 'src/ubuntumirclient/integration.h'
104--- src/ubuntumirclient/integration.h 2016-04-28 14:09:54 +0000
105+++ src/ubuntumirclient/integration.h 2016-06-09 18:58:55 +0000
106@@ -76,8 +76,10 @@
107 void destroyScreen(UbuntuScreen *screen);
108
109 private:
110- void setupOptions();
111- void setupDescription();
112+ void setupOptions(QStringList &args);
113+ void setupDescription(QByteArray &sessionName);
114+ static QByteArray generateSessionName(QStringList &args);
115+ static QByteArray generateSessionNameFromQmlFile(QStringList &args);
116
117 UbuntuNativeInterface* mNativeInterface;
118 QPlatformFontDatabase* mFontDb;
119
120=== modified file 'src/ubuntumirclient/nativeinterface.cpp'
121--- src/ubuntumirclient/nativeinterface.cpp 2016-04-28 14:09:54 +0000
122+++ src/ubuntumirclient/nativeinterface.cpp 2016-06-09 18:58:55 +0000
123@@ -36,6 +36,7 @@
124 insert("nativeorientation", UbuntuNativeInterface::NativeOrientation);
125 insert("display", UbuntuNativeInterface::Display);
126 insert("mirconnection", UbuntuNativeInterface::MirConnection);
127+ insert("mirsurface", UbuntuNativeInterface::MirSurface);
128 insert("scale", UbuntuNativeInterface::Scale);
129 insert("formfactor", UbuntuNativeInterface::FormFactor);
130 }
131@@ -98,9 +99,11 @@
132 if (!ubuntuResourceMap()->contains(kLowerCaseResource))
133 return NULL;
134 const ResourceType kResourceType = ubuntuResourceMap()->value(kLowerCaseResource);
135- if (kResourceType == UbuntuNativeInterface::EglDisplay) {
136+
137+ switch (kResourceType) {
138+ case EglDisplay:
139 return mIntegration->eglDisplay();
140- } else if (kResourceType == UbuntuNativeInterface::NativeOrientation) {
141+ case NativeOrientation:
142 // Return the device's native screen orientation.
143 if (window) {
144 UbuntuScreen *ubuntuScreen = static_cast<UbuntuScreen*>(window->screen()->handle());
145@@ -110,8 +113,19 @@
146 mNativeOrientation = new Qt::ScreenOrientation(platformScreen->nativeOrientation());
147 }
148 return mNativeOrientation;
149- } else {
150- return NULL;
151+ case MirSurface:
152+ if (window) {
153+ auto ubuntuWindow = static_cast<UbuntuWindow*>(window->handle());
154+ if (ubuntuWindow) {
155+ return ubuntuWindow->mirSurface();
156+ } else {
157+ return nullptr;
158+ }
159+ } else {
160+ return nullptr;
161+ }
162+ default:
163+ return nullptr;
164 }
165 }
166
167
168=== modified file 'src/ubuntumirclient/nativeinterface.h'
169--- src/ubuntumirclient/nativeinterface.h 2016-04-28 14:09:54 +0000
170+++ src/ubuntumirclient/nativeinterface.h 2016-06-09 18:58:55 +0000
171@@ -26,7 +26,7 @@
172 class UbuntuNativeInterface : public QPlatformNativeInterface {
173 Q_OBJECT
174 public:
175- enum ResourceType { EglDisplay, EglContext, NativeOrientation, Display, MirConnection, Scale, FormFactor };
176+ enum ResourceType { EglDisplay, EglContext, NativeOrientation, Display, MirConnection, MirSurface, Scale, FormFactor };
177
178 UbuntuNativeInterface(const UbuntuClientIntegration *integration);
179 ~UbuntuNativeInterface();

Subscribers

People subscribed via source and target branches