@@ -27,10 +27,23 @@
2727#include <QtQml/QQmlEngine>
2828#include <QStandardPaths>
2929
30+static QString installRoot;
31+
3032inline bool isRunningInstalled() {
31− static bool installed = (QCoreApplication::applicationDirPath() ==
32− QDir(QStringLiteral("@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@")).canonicalPath());
33− return installed;
33+ if (installRoot.isNull()) {
34+ QString snapRoot = qgetenv("SNAP");
35+ if (QCoreApplication::applicationDirPath() ==
36+ QDir(snapRoot + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@")).canonicalPath()) {
37+ installRoot = snapRoot;
38+ }
39+ else if (QCoreApplication::applicationDirPath() ==
40+ QDir(QStringLiteral("@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@")).canonicalPath()) {
41+ installRoot = "/";
42+ } else {
43+ installRoot = "";
44+ }
45+ }
46+ return !installRoot.isEmpty();
3447}
3548
3649inline QString buildDirectory() {
@@ -45,7 +58,7 @@ inline QString sourceDirectory() {
4558
4659inline QString translationDirectory() {
4760 if (isRunningInstalled()) {
48− return QStringLiteral("@CMAKE_INSTALL_PREFIX@/share/locale");
61+ return installRoot + QStringLiteral("@CMAKE_INSTALL_PREFIX@/share/locale");
4962 } else {
5063 return QString(buildDirectory() + "/po/locale");
5164 }
@@ -53,7 +66,7 @@ inline QString translationDirectory() {
5366
5467inline QString qmlDirectory() {
5568 if (isRunningInstalled()) {
56− return QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
69+ return installRoot + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
5770 } else {
5871 return QString(sourceDirectory() + "/qml");
5972 }
@@ -70,7 +83,7 @@ inline QStringList overrideImportPaths() {
7083inline QStringList nonMirImportPaths() {
7184 QStringList paths;
7285 if (isRunningInstalled()) {
73− paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/nonmirplugins");
86+ paths << installRoot + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/nonmirplugins");
7487 } else {
7588 paths << QString(buildDirectory() + "/nonmirplugins");
7689 }
@@ -80,10 +93,10 @@ inline QStringList nonMirImportPaths() {
8093inline QStringList fallbackImportPaths() {
8194 QStringList paths;
8295 if (isRunningInstalled()) {
83− paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@");
84− paths << QStringLiteral("@USS_PRIVATE_PLUGINDIR@");
85− paths << QStringLiteral("@SHELL_PLUGINDIR@");
86− paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
96+ paths << installRoot + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@");
97+ paths << installRoot + QStringLiteral("@USS_PRIVATE_PLUGINDIR@");
98+ paths << installRoot + QStringLiteral("@SHELL_PLUGINDIR@");
99+ paths << installRoot + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
87100 } else {
88101 paths << QStringLiteral("@USS_PRIVATE_PLUGINDIR@");
89102 paths << QStringLiteral("@SHELL_PLUGINDIR@");
@@ -94,7 +107,7 @@ inline QStringList fallbackImportPaths() {
94107
95108inline QString mockPluginsDir() {
96109 if (isRunningInstalled()) {
97− return QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
110+ return installRoot + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
98111 } else {
99112 return QString(buildDirectory() + "/tests/mocks");
100113 }