summaryrefslogtreecommitdiffstats
path: root/wayland
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <holger@moiji-mobile.com>2017-09-14 17:33:12 +0200
committerHolger Freyther <holger+qt@freyther.de>2017-10-24 12:06:40 +0000
commita55e76398219a2188691ca718216b9faca7abe18 (patch)
treeaa50e3a05e7a0c7d78ee1e8f45cd4722b50ae3d8 /wayland
parent04c907b60b7da6175f81fb1b5f61cc4ce3f71e1e (diff)
democompositor: Allow arbitrary extensions inside the app map
Allow extensions and let them begin with X-. Briefly document it, add some extensions as an example and briefly test that the right values are parsed. Change-Id: I7a9ae6b2f365802fcce6dce56fa7795f76d83421 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
Diffstat (limited to 'wayland')
-rw-r--r--wayland/democompositor/apps/README1
-rw-r--r--wayland/democompositor/apps/appentry.cpp2
-rw-r--r--wayland/democompositor/apps/appentry.h3
-rw-r--r--wayland/democompositor/apps/appparser.cpp15
-rw-r--r--wayland/democompositor/resources/apps/clock.app5
-rw-r--r--wayland/democompositor/tests/apps/tst_appparser.cpp8
6 files changed, 31 insertions, 3 deletions
diff --git a/wayland/democompositor/apps/README b/wayland/democompositor/apps/README
index 361b2c1..b804917 100644
--- a/wayland/democompositor/apps/README
+++ b/wayland/democompositor/apps/README
@@ -18,3 +18,4 @@ Icon The icon to use for display Yes String
Name A user displayable name Yes String
Exec Application to execute to launch Yes String
Path The directory to search for the app No String
+X-* Extensions to the specification No Any
diff --git a/wayland/democompositor/apps/appentry.cpp b/wayland/democompositor/apps/appentry.cpp
index aaae167..cdb9ba8 100644
--- a/wayland/democompositor/apps/appentry.cpp
+++ b/wayland/democompositor/apps/appentry.cpp
@@ -53,5 +53,5 @@
AppEntry AppEntry::empty()
{
QString empty;
- return AppEntry{empty, empty, empty, empty, empty};
+ return AppEntry{empty, empty, empty, empty, empty, QVariantMap()};
}
diff --git a/wayland/democompositor/apps/appentry.h b/wayland/democompositor/apps/appentry.h
index 317b748..4514331 100644
--- a/wayland/democompositor/apps/appentry.h
+++ b/wayland/democompositor/apps/appentry.h
@@ -52,6 +52,7 @@
#include <QtCore/QObject>
#include <QtCore/QString>
+#include <QtCore/QVariantMap>
/**
* A const representatation of an application entry. Members include
@@ -63,6 +64,7 @@ class AppEntry {
Q_PROPERTY(QString appName MEMBER appName CONSTANT)
Q_PROPERTY(QString executableName MEMBER executableName CONSTANT)
Q_PROPERTY(QString executablePath MEMBER executablePath CONSTANT)
+ Q_PROPERTY(QVariantMap extensions MEMBER extensions CONSTANT)
public:
QString iconName;
@@ -70,6 +72,7 @@ public:
QString executableName;
QString executablePath;
QString sourceFileName;
+ QVariantMap extensions;
static AppEntry empty();
};
diff --git a/wayland/democompositor/apps/appparser.cpp b/wayland/democompositor/apps/appparser.cpp
index 2c373cc..38cc0b2 100644
--- a/wayland/democompositor/apps/appparser.cpp
+++ b/wayland/democompositor/apps/appparser.cpp
@@ -94,6 +94,18 @@ static int readInt(const QJsonObject& object, const QString& key, bool *ok)
return doReadInt(object.value(key), ok);
}
+static QVariantMap readExtensions(const QJsonObject& object, const QString& prefixKey)
+{
+ QVariantMap map;
+
+ for (auto it = object.constBegin(); it != object.constEnd(); ++it) {
+ if (!it.key().startsWith(prefixKey))
+ continue;
+ map[it.key()] = it.value().toVariant();
+ }
+ return map;
+}
+
AppEntry AppParser::parseData(const QByteArray& content, const QString& fileName, bool *ok)
{
*ok = true;
@@ -129,10 +141,11 @@ AppEntry AppParser::parseData(const QByteArray& content, const QString& fileName
QString appName = readString(root, QStringLiteral("Name"), ok);
QString executableName = readString(root, QStringLiteral("Exec"), ok);
QString executablePath = readStringOptional(root, QStringLiteral("Path"), ok);
+ QVariantMap extensions = readExtensions(root, QStringLiteral("X-"));
if (!*ok)
return AppEntry::empty();
- return AppEntry{iconName, appName, executableName, executablePath, fileName};
+ return AppEntry{iconName, appName, executableName, executablePath, fileName, extensions};
}
AppEntry AppParser::parseFile(const QString& fileName, bool *ok)
diff --git a/wayland/democompositor/resources/apps/clock.app b/wayland/democompositor/resources/apps/clock.app
index d6f5f56..f28d9b7 100644
--- a/wayland/democompositor/resources/apps/clock.app
+++ b/wayland/democompositor/resources/apps/clock.app
@@ -4,5 +4,8 @@
"Icon": "qrc:/images/Icon_Clocks.png",
"Name": "Clocks",
"Exec": "clocks",
- "Path": "./"
+ "Path": "./",
+ "X-Fullscreen": true,
+ "X-Priority": 100,
+ "X-Screen": "left"
}
diff --git a/wayland/democompositor/tests/apps/tst_appparser.cpp b/wayland/democompositor/tests/apps/tst_appparser.cpp
index 6d63fd9..a71c123 100644
--- a/wayland/democompositor/tests/apps/tst_appparser.cpp
+++ b/wayland/democompositor/tests/apps/tst_appparser.cpp
@@ -127,6 +127,14 @@ void tst_AppParser::testFileOpen()
QCOMPARE(entry.appName, QStringLiteral("Clocks"));
QCOMPARE(entry.executableName, QStringLiteral("clocks"));
QCOMPARE(entry.executablePath, QStringLiteral("./"));
+
+ // Look at extensions
+ QVERIFY(entry.extensions["X-Fullscreen"].canConvert(QMetaType::Bool));
+ QCOMPARE(entry.extensions["X-Fullscreen"].toBool(), true);
+ QVERIFY(entry.extensions["X-Priority"].canConvert(QMetaType::Double));
+ QCOMPARE(entry.extensions["X-Priority"].toInt(), 100);
+ QVERIFY(entry.extensions["X-Screen"].canConvert(QMetaType::QString));
+ QCOMPARE(entry.extensions["X-Screen"].toString(), QStringLiteral("left"));
}
QTEST_MAIN(tst_AppParser)