on xenial help sign in
Selective run unity8 either as standalone or as a Mir server depending on the QPA plugin in use.
aab2c8aRicardo Mendoza
main.cpp+36−11
@@ -27,6 +27,10 @@
27#include <QLibrary>
27#include <QLibrary>
28#include <libintl.h>
28#include <libintl.h>
29
29
30+// Unity-Mir
31+#include <unity-mir/qmirserver.h>
32+#include <unity-mir/qmirserverapplication.h>
33+
30// local
34// local
31#include "paths.h"
35#include "paths.h"
32#include "MouseTouchAdaptor.h"
36#include "MouseTouchAdaptor.h"
@@ -72,7 +76,7 @@ void resolveIconTheme() {
72}
76}
73} // namespace {
77} // namespace {
74
78
75−int main(int argc, char** argv)
79+int startShell(int argc, char** argv, ShellServerConfiguration* server)
76{
80{
77 /* Workaround Qt platform integration plugin not advertising itself
81 /* Workaround Qt platform integration plugin not advertising itself
78 as having the following capabilities:
82 as having the following capabilities:
@@ -82,12 +86,19 @@ int main(int argc, char** argv)
82 setenv("QML_FORCE_THREADED_RENDERER", "1", 1);
86 setenv("QML_FORCE_THREADED_RENDERER", "1", 1);
83 setenv("QML_FIXED_ANIMATION_STEP", "1", 1);
87 setenv("QML_FIXED_ANIMATION_STEP", "1", 1);
84
88
89+ const bool isUbuntuMirServer = qgetenv("QT_QPA_PLATFORM") == "ubuntumirserver";
90+
85 QGuiApplication::setApplicationName("Unity 8");
91 QGuiApplication::setApplicationName("Unity 8");
86− QGuiApplication application(argc, argv);
92+ QGuiApplication *application;
93+ if (isUbuntuMirServer) {
94+ application = new QMirServerApplication(argc, (char**)argv, server);
95+ } else {
96+ application = new QGuiApplication(argc, (char**)argv);
97+ }
87
98
88 resolveIconTheme();
99 resolveIconTheme();
89
100
90− QStringList args = application.arguments();
101+ QStringList args = application->arguments();
91 ApplicationArguments qmlArgs(args);
102 ApplicationArguments qmlArgs(args);
92
103
93 // The testability driver is only loaded by QApplication but not by QGuiApplication.
104 // The testability driver is only loaded by QApplication but not by QGuiApplication.
@@ -124,7 +135,7 @@ int main(int argc, char** argv)
124 if (args.contains(QLatin1String("-mousetouch"))) {
135 if (args.contains(QLatin1String("-mousetouch"))) {
125 mouseTouchAdaptor = new MouseTouchAdaptor;
136 mouseTouchAdaptor = new MouseTouchAdaptor;
126 mouseTouchAdaptor->setTargetWindow(view);
137 mouseTouchAdaptor->setTargetWindow(view);
127− application.installNativeEventFilter(mouseTouchAdaptor);
138+ application->installNativeEventFilter(mouseTouchAdaptor);
128 }
139 }
129
140
130 QPlatformNativeInterface* nativeInterface = QGuiApplication::platformNativeInterface();
141 QPlatformNativeInterface* nativeInterface = QGuiApplication::platformNativeInterface();
@@ -140,24 +151,38 @@ int main(int argc, char** argv)
140 prependImportPaths(view->engine(), ::overrideImportPaths());
151 prependImportPaths(view->engine(), ::overrideImportPaths());
141 appendImportPaths(view->engine(), ::fallbackImportPaths());
152 appendImportPaths(view->engine(), ::fallbackImportPaths());
142
153
143− if (qgetenv("QT_QPAPLATFORM") != "ubuntu") {
154+ QStringList importPath = view->engine()->importPathList().filter("qt5/imports");
144− QString mirPath("/usr/lib/arm-linux-gnueabihf/qt5/imports/Unity-Mir");
155+ qDebug << "Import list is: " << importPath.first();
145− qsetenv("QT_QPA_PLATFORM", "ubuntumirserver");
156+
157+ if (isUbuntuMirServer)
158+ importPath.first().append("/Unity-Mir");
146− view->engine()->addImportPath(mirPath);
159+ view->engine()->addImportPath(importPath.first());
147− }
160+ }
148
161
149 view->setSource(source);
162 view->setSource(source);
150 view->setColor("transparent");
163 view->setColor("transparent");
151
164
152− if (qgetenv("QT_QPA_PLATFORM") == "ubuntu" || args.contains(QLatin1String("-fullscreen"))) {
165+ if (qgetenv("QT_QPA_PLATFORM") == "ubuntu" || isUbuntuMirServer || args.contains(QLatin1String("-fullscreen"))) {
153 view->showFullScreen();
166 view->showFullScreen();
154 } else {
167 } else {
155 view->show();
168 view->show();
156 }
169 }
157
170
158− int result = application.exec();
171+ int result = application->exec();
159
172
160 delete mouseTouchAdaptor;
173 delete mouseTouchAdaptor;
174+ delete application;
161
175
162 return result;
176 return result;
163}
177}
178+
179+int main(int argc, const char *argv[])
180+{
181+ if (qgetenv("QT_QPA_PLATFORM") != "ubuntu") {
182+ setenv("QT_QPA_PLATFORM", "ubuntumirserver", 1);
183+ QMirServer mirServer(argc, argv);
184+ return mirServer.runWithClient(startShell);
185+ } else {
186+ return startShell(argc, argv, nullptr);
187+ }
188+}