17 #include "UnityApplication.h" 23 #include <QQmlContext> 24 #include <QQmlComponent> 31 #include <hybris/properties/properties.h> 34 #include <qtmir/displayconfigurationstorage.h> 38 #include "CachingNetworkManagerFactory.h" 39 #include "UnityCommandLineParser.h" 40 #include "DebuggingController.h" 41 #include "WindowManagementPolicy.h" 42 #include "DisplayConfigurationStorage.h" 48 UnityApplication::UnityApplication(
int & argc,
char ** argv)
49 :
qtmir::MirServerApplication(argc, argv, { qtmir::SetWindowManagementPolicy<WindowManagementPolicy>(),
50 qtmir::SetDisplayConfigurationStorage<DisplayConfigurationStorage>() })
53 setApplicationName(QStringLiteral(
"unity8"));
54 setOrganizationName(QStringLiteral(
"Canonical"));
58 if (m_qmlArgs.deviceName().isEmpty()) {
60 property_get(
"ro.product.device", buffer ,
"desktop" );
61 m_qmlArgs.setDeviceName(QString(buffer));
66 if (m_qmlArgs.hasTestability() || getenv(
"QT_LOAD_TESTABILITY")) {
67 QLibrary testLib(QStringLiteral(
"qttestability"));
69 typedef void (*TasInitialize)(void);
70 TasInitialize initFunction = (TasInitialize)testLib.resolve(
"qt_testability_init");
74 qCritical(
"Library qttestability resolve failed!");
77 qCritical(
"Library qttestability load failed!");
81 bindtextdomain(
"unity8", translationDirectory().toUtf8().data());
84 QScopedPointer<QGSettings> gSettings(
new QGSettings(
"com.canonical.Unity8"));
85 gSettings->reset(QStringLiteral(
"alwaysShowOsk"));
88 QByteArray pxpguEnv = qgetenv(
"GRID_UNIT_PX");
90 int pxpgu = pxpguEnv.toInt(&ok);
94 m_qmlEngine->rootContext()->setContextProperty(
"internalGu", pxpgu);
95 m_qmlEngine->rootContext()->setContextProperty(QStringLiteral(
"applicationArguments"), &m_qmlArgs);
96 m_qmlEngine->rootContext()->setContextProperty(
"DebuggingController",
new DebuggingController(
this));
98 auto component(
new QQmlComponent(m_qmlEngine, m_qmlArgs.qmlfie()));
100 if (component->status() == QQmlComponent::Error) {
101 m_qmlEngine->rootContext()->setContextProperty(QStringLiteral(
"errorString"), component->errorString());
102 auto errorComponent(
new QQmlComponent(m_qmlEngine,
103 QUrl::fromLocalFile(::qmlDirectory() +
"/ErrorApplication.qml")));
104 errorComponent->create();
105 qDebug() << errorComponent->errorString();
109 #ifdef UNITY8_ENABLE_TOUCH_EMULATION 112 if (m_qmlArgs.hasMouseToTouch()) {
113 m_mouseTouchAdaptor = MouseTouchAdaptor::instance();
117 if (m_qmlArgs.mode().compare(
"greeter") == 0) {
118 if (!QProcess::startDetached(
"initctl emit --no-wait unity8-greeter-started")) {
119 qDebug() <<
"Unable to send unity8-greeter-started event to Upstart";
124 UnityApplication::~UnityApplication()
129 void UnityApplication::destroyResources()
131 #ifdef UNITY8_ENABLE_TOUCH_EMULATION 132 delete m_mouseTouchAdaptor;
133 m_mouseTouchAdaptor =
nullptr;
137 m_qmlEngine =
nullptr;
140 void UnityApplication::setupQmlEngine()
142 m_qmlEngine =
new QQmlEngine(
this);
144 m_qmlEngine->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
146 prependImportPaths(m_qmlEngine, ::overrideImportPaths());
147 appendImportPaths(m_qmlEngine, ::fallbackImportPaths());
149 m_qmlEngine->setNetworkAccessManagerFactory(
new CachingNetworkManagerFactory);
151 QObject::connect(m_qmlEngine, &QQmlEngine::quit,
this, &QGuiApplication::quit);