17#include "LomiriApplication.h"
24#include <QQmlComponent>
31#include <qtmir/displayconfigurationstorage.h>
35#include "CachingNetworkManagerFactory.h"
36#include "LomiriCommandLineParser.h"
37#include "DebuggingController.h"
38#include "WindowManagementPolicy.h"
39#include "DisplayConfigurationStorage.h"
45LomiriApplication::LomiriApplication(
int & argc,
char ** argv)
46 : qtmir::MirServerApplication(argc, argv, { qtmir::SetWindowManagementPolicy<WindowManagementPolicy>(),
47 qtmir::SetDisplayConfigurationStorage<DisplayConfigurationStorage>() })
50 setApplicationName(QStringLiteral(
"lomiri"));
51 setOrganizationName(QStringLiteral(
"UBports"));
57 if (m_qmlArgs.hasTestability() || getenv(
"QT_LOAD_TESTABILITY")) {
58 QLibrary testLib(QStringLiteral(
"qttestability"));
60 typedef void (*TasInitialize)(void);
61 TasInitialize initFunction = (TasInitialize)testLib.resolve(
"qt_testability_init");
65 qCritical(
"Library qttestability resolve failed!");
68 qCritical(
"Library qttestability load failed!");
72 bindtextdomain(
"lomiri", translationDirectory().toUtf8().data());
75 QScopedPointer<QGSettings> gSettings(
new QGSettings(
"com.lomiri.Shell"));
76 gSettings->reset(QStringLiteral(
"alwaysShowOsk"));
79 QByteArray pxpguEnv = qgetenv(
"GRID_UNIT_PX");
81 int pxpgu = pxpguEnv.toInt(&ok);
85 m_qmlEngine->rootContext()->setContextProperty(
"internalGu", pxpgu);
86 m_qmlEngine->rootContext()->setContextProperty(QStringLiteral(
"applicationArguments"), &m_qmlArgs);
87 m_qmlEngine->rootContext()->setContextProperty(
"DebuggingController",
new DebuggingController(
this));
89 auto component(
new QQmlComponent(m_qmlEngine, m_qmlArgs.qmlfie()));
91 if (component->status() == QQmlComponent::Error) {
92 qDebug().nospace().noquote() \
93 <<
"Lomiri encountered an unrecoverable error while loading:\n"
94 << component->errorString();
95 m_qmlEngine->rootContext()->setContextProperty(QStringLiteral(
"errorString"), component->errorString());
96 auto errorComponent(
new QQmlComponent(m_qmlEngine,
97 QUrl::fromLocalFile(::qmlDirectory() +
"/ErrorApplication.qml")));
98 errorComponent->create();
99 if (!errorComponent->errorString().isEmpty())
100 qDebug().nospace().noquote() \
101 <<
"Lomiri encountered an error while loading the error screen:\n"
102 << errorComponent->errorString();
106 #ifdef LOMIRI_ENABLE_TOUCH_EMULATION
109 if (m_qmlArgs.hasMouseToTouch()) {
110 m_mouseTouchAdaptor = MouseTouchAdaptor::instance();
115LomiriApplication::~LomiriApplication()
120void LomiriApplication::destroyResources()
122 #ifdef LOMIRI_ENABLE_TOUCH_EMULATION
123 delete m_mouseTouchAdaptor;
124 m_mouseTouchAdaptor =
nullptr;
128 m_qmlEngine =
nullptr;
131void LomiriApplication::setupQmlEngine()
133 m_qmlEngine =
new QQmlEngine(
this);
135 m_qmlEngine->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
137 prependImportPaths(m_qmlEngine, ::overrideImportPaths());
138 appendImportPaths(m_qmlEngine, ::fallbackImportPaths());
140 m_qmlEngine->setNetworkAccessManagerFactory(
new CachingNetworkManagerFactory);
142 QObject::connect(m_qmlEngine, &QQmlEngine::quit,
this, &QGuiApplication::quit);