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 QByteArray pxpguEnv = qgetenv(
"GRID_UNIT_PX");
77 int pxpgu = pxpguEnv.toInt(&ok);
81 m_qmlEngine->rootContext()->setContextProperty(
"internalGu", pxpgu);
82 m_qmlEngine->rootContext()->setContextProperty(QStringLiteral(
"applicationArguments"), &m_qmlArgs);
83 m_qmlEngine->rootContext()->setContextProperty(
"DebuggingController",
new DebuggingController(
this));
85 auto component(
new QQmlComponent(m_qmlEngine, m_qmlArgs.qmlfie()));
87 if (component->status() == QQmlComponent::Error) {
88 qDebug().nospace().noquote() \
89 <<
"Lomiri encountered an unrecoverable error while loading:\n"
90 << component->errorString();
91 m_qmlEngine->rootContext()->setContextProperty(QStringLiteral(
"errorString"), component->errorString());
92 auto errorComponent(
new QQmlComponent(m_qmlEngine,
93 QUrl::fromLocalFile(::qmlDirectory() +
"/ErrorApplication.qml")));
94 errorComponent->create();
95 if (!errorComponent->errorString().isEmpty())
96 qDebug().nospace().noquote() \
97 <<
"Lomiri encountered an error while loading the error screen:\n"
98 << errorComponent->errorString();
102 #ifdef LOMIRI_ENABLE_TOUCH_EMULATION
105 if (m_qmlArgs.hasMouseToTouch()) {
106 m_mouseTouchAdaptor = MouseTouchAdaptor::instance();
111LomiriApplication::~LomiriApplication()
116void LomiriApplication::destroyResources()
118 #ifdef LOMIRI_ENABLE_TOUCH_EMULATION
119 delete m_mouseTouchAdaptor;
120 m_mouseTouchAdaptor =
nullptr;
124 m_qmlEngine =
nullptr;
127void LomiriApplication::setupQmlEngine()
129 m_qmlEngine =
new QQmlEngine(
this);
131 m_qmlEngine->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
133 prependImportPaths(m_qmlEngine, ::overrideImportPaths());
134 appendImportPaths(m_qmlEngine, ::fallbackImportPaths());
136 m_qmlEngine->setNetworkAccessManagerFactory(
new CachingNetworkManagerFactory);
138 QObject::connect(m_qmlEngine, &QQmlEngine::quit,
this, &QGuiApplication::quit);