18#include "LomiriApplication.h"
25#include <QQmlComponent>
30#include <deviceinfo.h>
33#include <qtmir/displayconfigurationstorage.h>
37#include "CachingNetworkManagerFactory.h"
38#include "LomiriCommandLineParser.h"
39#include "DebuggingController.h"
40#include "WindowManagementPolicy.h"
41#include "DisplayConfigurationStorage.h"
46LomiriApplication::LomiriApplication(
int & argc,
char ** argv)
47 : qtmir::MirServerApplication(argc, argv, { qtmir::SetWindowManagementPolicy<WindowManagementPolicy>(),
48 qtmir::SetDisplayConfigurationStorage<DisplayConfigurationStorage>() })
51 setApplicationName(QStringLiteral(
"lomiri"));
52 setOrganizationName(QStringLiteral(
"UBports"));
58 if (m_qmlArgs.hasTestability() || getenv(
"QT_LOAD_TESTABILITY")) {
59 QLibrary testLib(QStringLiteral(
"qttestability"));
61 typedef void (*TasInitialize)(void);
62 TasInitialize initFunction = (TasInitialize)testLib.resolve(
"qt_testability_init");
66 qCritical(
"Library qttestability resolve failed!");
69 qCritical(
"Library qttestability load failed!");
73 bindtextdomain(
"lomiri", translationDirectory().toUtf8().data());
76 QByteArray pxpguEnv = qgetenv(
"GRID_UNIT_PX");
78 int pxpgu = pxpguEnv.toInt(&ok);
82 m_qmlEngine->rootContext()->setContextProperty(
"internalGu", pxpgu);
83 m_qmlEngine->rootContext()->setContextProperty(QStringLiteral(
"applicationArguments"), &m_qmlArgs);
84 m_qmlEngine->rootContext()->setContextProperty(
"DebuggingController",
new DebuggingController(
this));
86 auto component(
new QQmlComponent(m_qmlEngine, m_qmlArgs.qmlfie()));
88 if (component->status() == QQmlComponent::Error) {
89 qDebug().nospace().noquote() \
90 <<
"Lomiri encountered an unrecoverable error while loading:\n"
91 << component->errorString();
92 m_qmlEngine->rootContext()->setContextProperty(QStringLiteral(
"errorString"), component->errorString());
93 auto errorComponent(
new QQmlComponent(m_qmlEngine,
94 QUrl::fromLocalFile(::qmlDirectory() +
"/ErrorApplication.qml")));
95 errorComponent->create();
96 if (!errorComponent->errorString().isEmpty())
97 qDebug().nospace().noquote() \
98 <<
"Lomiri encountered an error while loading the error screen:\n"
99 << errorComponent->errorString();
103 #ifdef LOMIRI_ENABLE_TOUCH_EMULATION
106 if (m_qmlArgs.hasMouseToTouch()) {
107 m_mouseTouchAdaptor = MouseTouchAdaptor::instance();
112LomiriApplication::~LomiriApplication()
117void LomiriApplication::destroyResources()
119 #ifdef LOMIRI_ENABLE_TOUCH_EMULATION
120 delete m_mouseTouchAdaptor;
121 m_mouseTouchAdaptor =
nullptr;
125 m_qmlEngine =
nullptr;
128void LomiriApplication::setupQmlEngine()
130 m_qmlEngine =
new QQmlEngine(
this);
132 m_qmlEngine->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
134 prependImportPaths(m_qmlEngine, ::overrideImportPaths());
135 appendImportPaths(m_qmlEngine, ::fallbackImportPaths());
138 auto panelPath = info.contains(
"DisplayCutoutsCollapsed") ?
"Panel/WithCutouts" :
"Panel/WithoutCutouts";
139 prependImportPaths(m_qmlEngine, {QDir(::qmlDirectory() + panelPath).canonicalPath()});
141 m_qmlEngine->setNetworkAccessManagerFactory(
new CachingNetworkManagerFactory);
143 QObject::connect(m_qmlEngine, &QQmlEngine::quit,
this, [=](){
144 qDebug().nospace().noquote() <<
"Quitting Lomiri... Bye!";
147 QObject::connect(m_qmlEngine, &QQmlEngine::exit,
this, [=](
int ret){
148 qDebug().nospace().noquote() <<
"Exiting Lomiri... Bye!";