21 #include <QCommandLineParser>
22 #include <QtQuick/QQuickView>
23 #include <QtGui/QGuiApplication>
24 #include <QtQml/QQmlEngine>
25 #include <QtQml/QQmlContext>
33 #include "MouseTouchAdaptor.h"
34 #include "ApplicationArguments.h"
35 #include "CachingNetworkManagerFactory.h"
38 #include <TouchRegistry.h>
40 int main(
int argc,
const char *argv[])
42 bool isMirServer =
false;
43 if (qgetenv(
"QT_QPA_PLATFORM") ==
"ubuntumirclient") {
44 setenv(
"QT_QPA_PLATFORM",
"mirserver", 1 );
48 QGuiApplication::setApplicationName(
"unity8");
49 QGuiApplication *application;
51 QCommandLineParser parser;
52 parser.setApplicationDescription(
"Description: Unity 8 Shell");
53 parser.addHelpOption();
55 QCommandLineOption fullscreenOption(
"fullscreen",
57 parser.addOption(fullscreenOption);
59 QCommandLineOption framelessOption(
"frameless",
60 "Run without window borders");
61 parser.addOption(framelessOption);
63 QCommandLineOption mousetouchOption(
"mousetouch",
64 "Allow the mouse to provide touch input");
65 parser.addOption(mousetouchOption);
67 QCommandLineOption windowGeometryOption(QStringList() <<
"windowgeometry",
68 "Specify the window geometry as [<width>x<height>]",
"windowgeometry",
"1");
69 parser.addOption(windowGeometryOption);
71 QCommandLineOption testabilityOption(
"testability",
72 "DISCOURAGED: Please set QT_LOAD_TESTABILITY instead. \n \
73 Load the testability driver");
74 parser.addOption(testabilityOption);
76 application =
new QGuiApplication(argc, (
char**)argv);
80 parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
81 parser.process(*application);
83 QString indicatorProfile = qgetenv(
"UNITY_INDICATOR_PROFILE");
84 if (indicatorProfile.isEmpty()) {
85 indicatorProfile =
"phone";
88 ApplicationArguments qmlArgs;
89 if (parser.isSet(windowGeometryOption) &&
90 parser.value(windowGeometryOption).split(
'x').size() == 2)
92 QStringList geom = parser.value(windowGeometryOption).split(
'x');
93 qmlArgs.setSize(geom.at(0).toInt(), geom.at(1).toInt());
98 if (parser.isSet(testabilityOption) || getenv(
"QT_LOAD_TESTABILITY")) {
99 QLibrary testLib(QLatin1String(
"qttestability"));
100 if (testLib.load()) {
101 typedef void (*TasInitialize)(void);
102 TasInitialize initFunction = (TasInitialize)testLib.resolve(
"qt_testability_init");
106 qCritical(
"Library qttestability resolve failed!");
109 qCritical(
"Library qttestability load failed!");
113 bindtextdomain(
"unity8", translationDirectory().toUtf8().data());
114 textdomain(
"unity8");
116 QQuickView* view =
new QQuickView();
117 view->setResizeMode(QQuickView::SizeRootObjectToView);
118 view->setColor(
"black");
119 view->setTitle(
"Unity8 Shell");
120 view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
121 view->rootContext()->setContextProperty(
"applicationArguments", &qmlArgs);
122 view->rootContext()->setContextProperty(
"indicatorProfile", indicatorProfile);
123 if (parser.isSet(framelessOption)) {
124 view->setFlags(Qt::FramelessWindowHint);
126 TouchRegistry touchRegistry;
127 view->installEventFilter(&touchRegistry);
131 MouseTouchAdaptor *mouseTouchAdaptor = 0;
132 if (parser.isSet(mousetouchOption)) {
133 mouseTouchAdaptor =
new MouseTouchAdaptor;
134 application->installNativeEventFilter(mouseTouchAdaptor);
137 QUrl source(::qmlDirectory()+
"Shell.qml");
138 prependImportPaths(view->engine(), ::overrideImportPaths());
140 prependImportPaths(view->engine(), ::nonMirImportPaths());
142 appendImportPaths(view->engine(), ::fallbackImportPaths());
144 CachingNetworkManagerFactory *managerFactory =
new CachingNetworkManagerFactory();
145 view->engine()->setNetworkAccessManagerFactory(managerFactory);
147 view->setSource(source);
148 QObject::connect(view->engine(), SIGNAL(quit()), application, SLOT(quit()));
150 if (isMirServer || parser.isSet(fullscreenOption)) {
151 view->showFullScreen();
156 int result = application->exec();
159 delete mouseTouchAdaptor;