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

Proposed by Daniel d'Andrada
Status: Superseded
Proposed branch: lp:~dandrader/qtubuntu/winIdIsMirSurface
Merge into: lp:qtubuntu
Diff against target: 150 lines (+45/-17)
4 files modified
src/ubuntumirclient/integration.cpp (+40/-6)
src/ubuntumirclient/integration.h (+4/-2)
src/ubuntumirclient/window.cpp (+1/-8)
src/ubuntumirclient/window.h (+0/-1)
To merge this branch: bzr merge lp:~dandrader/qtubuntu/winIdIsMirSurface
Reviewer Review Type Date Requested Status
Ubuntu Phablet Team Pending
Review via email: mp+296794@code.launchpad.net

Commit message

Make QWindow::winId() return the underlying MirSurface pointer

Have it return something useful.

Description of the change

ubuntu-keyboard needs that in order to be able to use Mir client API to fill out the input region of its surface.

To post a comment you must log in.

Unmerged revisions

323. By Daniel d'Andrada

Make QWindow::winId() return the underlying MirSurface pointer

Have it return something useful.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/ubuntumirclient/integration.cpp'
2--- src/ubuntumirclient/integration.cpp 2016-04-28 14:44:18 +0000
3+++ src/ubuntumirclient/integration.cpp 2016-06-08 14:15:13 +0000
4@@ -28,6 +28,7 @@
5 #include "window.h"
6
7 // Qt
8+#include <QFileInfo>
9 #include <QGuiApplication>
10 #include <private/qguiapplication_p.h>
11 #include <qpa/qplatformnativeinterface.h>
12@@ -77,8 +78,12 @@
13 , mClipboard(new UbuntuClipboard)
14 , mScaleFactor(1.0)
15 {
16- setupOptions();
17- setupDescription();
18+ {
19+ QStringList args = QCoreApplication::arguments();
20+ setupOptions(args);
21+ QByteArray sessionName = generateSessionName(args);
22+ setupDescription(sessionName);
23+ }
24
25 // Create new application instance
26 mInstance = u_application_instance_new_from_description_with_options(mDesc, mOptions);
27@@ -161,9 +166,8 @@
28 return mServices;
29 }
30
31-void UbuntuClientIntegration::setupOptions()
32+void UbuntuClientIntegration::setupOptions(QStringList &args)
33 {
34- QStringList args = QCoreApplication::arguments();
35 int argc = args.size() + 1;
36 char **argv = new char*[argc];
37 for (int i = 0; i < argc - 1; i++)
38@@ -177,10 +181,11 @@
39 delete [] argv;
40 }
41
42-void UbuntuClientIntegration::setupDescription()
43+void UbuntuClientIntegration::setupDescription(QByteArray &sessionName)
44 {
45 mDesc = u_application_description_new();
46- UApplicationId* id = u_application_id_new_from_stringn("QtUbuntu", 8);
47+
48+ UApplicationId* id = u_application_id_new_from_stringn(sessionName.data(), sessionName.count());
49 u_application_description_set_application_id(mDesc, id);
50
51 UApplicationLifecycleDelegate* delegate = u_application_lifecycle_delegate_new();
52@@ -190,6 +195,35 @@
53 u_application_description_set_application_lifecycle_delegate(mDesc, delegate);
54 }
55
56+QByteArray UbuntuClientIntegration::generateSessionName(QStringList &args)
57+{
58+ // Try to come up with some meaningful session name to uniquely identify this session,
59+ // helping with shell debugging
60+
61+ if (args.count() == 0) {
62+ return QByteArray("QtUbuntu");
63+ } if (args[0].contains("qmlscene")) {
64+ return generateSessionNameFromQmlFile(args);
65+ } else {
66+ // use the executable name
67+ QFileInfo fileInfo(args[0]);
68+ return fileInfo.fileName().toLocal8Bit();
69+ }
70+}
71+
72+QByteArray UbuntuClientIntegration::generateSessionNameFromQmlFile(QStringList &args)
73+{
74+ Q_FOREACH (QString arg, args) {
75+ if (arg.endsWith(".qml")) {
76+ QFileInfo fileInfo(arg);
77+ return fileInfo.fileName().toLocal8Bit();
78+ }
79+ }
80+
81+ // give up
82+ return "qmlscene";
83+}
84+
85 QPlatformWindow* UbuntuClientIntegration::createPlatformWindow(QWindow* window) const
86 {
87 return const_cast<UbuntuClientIntegration*>(this)->createPlatformWindow(window);
88
89=== modified file 'src/ubuntumirclient/integration.h'
90--- src/ubuntumirclient/integration.h 2016-04-28 14:09:54 +0000
91+++ src/ubuntumirclient/integration.h 2016-06-08 14:15:13 +0000
92@@ -76,8 +76,10 @@
93 void destroyScreen(UbuntuScreen *screen);
94
95 private:
96- void setupOptions();
97- void setupDescription();
98+ void setupOptions(QStringList &args);
99+ void setupDescription(QByteArray &sessionName);
100+ static QByteArray generateSessionName(QStringList &args);
101+ static QByteArray generateSessionNameFromQmlFile(QStringList &args);
102
103 UbuntuNativeInterface* mNativeInterface;
104 QPlatformFontDatabase* mFontDb;
105
106=== modified file 'src/ubuntumirclient/window.cpp'
107--- src/ubuntumirclient/window.cpp 2016-04-28 14:44:18 +0000
108+++ src/ubuntumirclient/window.cpp 2016-06-08 14:15:13 +0000
109@@ -118,12 +118,6 @@
110 }
111 }
112
113-WId makeId()
114-{
115- static int id = 1;
116- return id++;
117-}
118-
119 MirPixelFormat defaultPixelFormatFor(MirConnection *connection)
120 {
121 MirPixelFormat format;
122@@ -513,7 +507,6 @@
123 EGLConfig eglConfig, MirConnection *mirConnection)
124 : QObject(nullptr)
125 , QPlatformWindow(w)
126- , mId(makeId())
127 , mClipboard(clipboard)
128 , mWindowState(w->windowState())
129 , mWindowFlags(w->flags())
130@@ -721,7 +714,7 @@
131
132 WId UbuntuWindow::winId() const
133 {
134- return mId;
135+ return reinterpret_cast<WId>(mSurface->mirSurface());
136 }
137
138 void UbuntuWindow::onSwapBuffersDone()
139
140=== modified file 'src/ubuntumirclient/window.h'
141--- src/ubuntumirclient/window.h 2016-04-28 14:44:18 +0000
142+++ src/ubuntumirclient/window.h 2016-06-08 14:15:13 +0000
143@@ -73,7 +73,6 @@
144 void updatePanelHeightHack(bool enable);
145 void updateSurfaceState();
146 mutable QMutex mMutex;
147- const WId mId;
148 const QSharedPointer<UbuntuClipboard> mClipboard;
149 Qt::WindowState mWindowState;
150 Qt::WindowFlags mWindowFlags;

Subscribers

People subscribed via source and target branches