Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qoutputmapping.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
5#include <QFile>
6#include <QFileInfo>
7#include <QVariantMap>
8#include <QJsonDocument>
9#include <QJsonObject>
10#include <QJsonArray>
11
13
14using namespace Qt::StringLiterals;
15
17
25
27{
28 return false;
29}
30
32{
33 Q_UNUSED(deviceNode);
34 return QString();
35}
36
37#ifdef Q_OS_WEBOS
38QWindow *QOutputMapping::windowForDeviceNode(const QString &deviceNode)
39{
40 Q_UNUSED(deviceNode);
41 return nullptr;
42}
43
44void QOutputMapping::set(QOutputMapping *mapping)
45{
46 if (s_outputMapping)
47 delete s_outputMapping;
48
49 s_outputMapping = mapping;
50}
51#endif // Q_OS_WEBOS
52
54{
55 static QString configFile = qEnvironmentVariable("QT_QPA_EGLFS_KMS_CONFIG");
56 if (configFile.isEmpty())
57 return false;
58
59 QFile file(configFile);
60 if (!file.open(QFile::ReadOnly)) {
61 qWarning("touch input support: Failed to open %ls", qUtf16Printable(configFile));
62 return false;
63 }
64
65 const QJsonDocument doc = QJsonDocument::fromJson(file.readAll());
66 if (!doc.isObject()) {
67 qWarning("touch input support: Failed to parse %ls", qUtf16Printable(configFile));
68 return false;
69 }
70
71 // What we are interested is the virtualIndex and touchDevice properties for
72 // each element in the outputs array.
73 const QJsonArray outputs = doc.object().value("outputs"_L1).toArray();
74 for (int i = 0; i < outputs.size(); ++i) {
75 const QVariantMap output = outputs.at(i).toObject().toVariantMap();
76 if (!output.contains(QStringLiteral("touchDevice")))
77 continue;
78 if (!output.contains(QStringLiteral("name"))) {
79 qWarning("evdevtouch: Output %d specifies touchDevice but not name, this is wrong", i);
80 continue;
81 }
82 QFileInfo deviceNode(output.value(QStringLiteral("touchDevice")).toString());
83 const QString &screenName = output.value(QStringLiteral("name")).toString();
84 m_screenTable.insert(deviceNode.canonicalFilePath(), screenName);
85 }
86
87 return true;
88}
89
91{
92 return m_screenTable.value(deviceNode);
93}
94
95QT_END_NAMESPACE
QString screenNameForDeviceNode(const QString &deviceNode) override
static QOutputMapping * get()
virtual QString screenNameForDeviceNode(const QString &deviceNode)
virtual bool load()
static QOutputMapping * s_outputMapping