@@ -27,6 +27,10 @@
27#include <QLibrary>
27#include <QLibrary>
28#include <libintl.h>
28#include <libintl.h>
31+#include <unity-mir/qmirserver.h>
32+#include <unity-mir/qmirserverapplication.h>
31#include "paths.h"
35#include "paths.h"
32#include "MouseTouchAdaptor.h"
36#include "MouseTouchAdaptor.h"
@@ -72,7 +76,7 @@ void resolveIconTheme() {
73} // namespace {
77} // namespace {
75−int main(int argc, char** argv)
79+int startShell(int argc, char** argv, ShellServerConfiguration* server)
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);
89+ const bool isUbuntuMirServer = qgetenv("QT_QPA_PLATFORM") == "ubuntumirserver";
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);
96+ application = new QGuiApplication(argc, (char**)argv);
88 resolveIconTheme();
99 resolveIconTheme();
90− QStringList args = application.arguments();
101+ QStringList args = application->arguments();
91 ApplicationArguments qmlArgs(args);
102 ApplicationArguments qmlArgs(args);
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);
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());
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());
149 view->setSource(source);
162 view->setSource(source);
150 view->setColor("transparent");
163 view->setColor("transparent");
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();
155 view->show();
168 view->show();
158− int result = application.exec();
171+ int result = application->exec();
160 delete mouseTouchAdaptor;
173 delete mouseTouchAdaptor;
162 return result;
176 return result;
179+int main(int argc, const char *argv[])
181+ if (qgetenv("QT_QPA_PLATFORM") != "ubuntu") {
182+ setenv("QT_QPA_PLATFORM", "ubuntumirserver", 1);
183+ QMirServer mirServer(argc, argv);
184+ return mirServer.runWithClient(startShell);
186+ return startShell(argc, argv, nullptr);