summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Griebl <robert.griebl@qt.io>2020-11-18 14:39:33 +0100
committerRobert Griebl <robert.griebl@qt.io>2020-11-28 17:47:41 +0100
commit911ee1f92017f22f9aa1fd430b414ff28c7e0cbe (patch)
tree58ad194c55506ccb7792949914ccec2757d88ad3
parent6f8a53da17c04848319dcb5d58e70f12788ca9d7 (diff)
Qt 6 port, part 1 .. without cmake
All C++ and QML unit-tests pass. The QML "windowitem" test is very unstable though and often crashes in the RHI layer. Change-Id: Ia42fc71ad69d2ba74b8b631ded7569b48cf458ee Reviewed-by: Robert Griebl <robert.griebl@qt.io>
-rw-r--r--.qmake.conf2
-rw-r--r--qmltypes/QtApplicationManager/Application/plugins.qmltypes2
-rw-r--r--qmltypes/QtApplicationManager/SystemUI/plugins.qmltypes2
-rw-r--r--qmltypes/QtApplicationManager/plugins.qmltypes2
-rw-r--r--src/application-lib/packageinfo.cpp4
-rw-r--r--src/common-lib/common-lib.pro1
-rw-r--r--src/common-lib/configcache.cpp11
-rw-r--r--src/common-lib/error.h8
-rw-r--r--src/common-lib/exception.cpp2
-rw-r--r--src/common-lib/exception.h8
-rw-r--r--src/common-lib/qml-utilities.cpp7
-rw-r--r--src/common-lib/qtyaml.cpp15
-rw-r--r--src/common-lib/utilities.cpp2
-rw-r--r--src/common-lib/utilities.h6
-rw-r--r--src/dbus-lib/dbusdaemon.cpp16
-rw-r--r--src/dbus-lib/dbusdaemon.h3
-rw-r--r--src/intent-server-lib/intent.cpp2
-rw-r--r--src/launcher-lib/intentclientdbusimplementation.cpp6
-rw-r--r--src/launcher-lib/ipcwrapperobject.cpp12
-rw-r--r--src/launcher-lib/launcher-lib.pro2
-rw-r--r--src/launcher-lib/waylandqtamclientextension.cpp2
-rw-r--r--src/main-lib/main.cpp7
-rw-r--r--src/manager-lib/application.cpp4
-rw-r--r--src/manager-lib/application.h6
-rw-r--r--src/manager-lib/applicationipcinterface.cpp8
-rw-r--r--src/manager-lib/applicationmanager.cpp3
-rw-r--r--src/manager-lib/intentaminterface.cpp7
-rw-r--r--src/manager-lib/nativeruntime.cpp2
-rw-r--r--src/manager-lib/processcontainer.cpp32
-rw-r--r--src/manager-lib/processcontainer.h6
-rw-r--r--src/manager-lib/qmlinprocessapplicationmanagerwindow.cpp2
-rw-r--r--src/manager-lib/qmlinprocessruntime.cpp3
-rw-r--r--src/manager-lib/sudo.cpp12
-rw-r--r--src/package-lib/packageextractor.cpp1
-rw-r--r--src/package-lib/packageutilities.cpp4
-rw-r--r--src/shared-main-lib/sharedmain.cpp4
-rw-r--r--src/tools/controller/controller.cpp2
-rw-r--r--src/tools/dumpqmltypes/dumpqmltypes.cpp2
-rw-r--r--src/tools/launcher-qml/launcher-qml.cpp1
-rw-r--r--src/tools/packager/packagingjob.cpp1
-rw-r--r--src/tools/testrunner/amtest.cpp7
-rw-r--r--src/tools/testrunner/amtest.h2
-rw-r--r--src/tools/testrunner/testrunner.cpp2
-rw-r--r--src/tools/testrunner/testrunner.h2
-rw-r--r--src/tools/testrunner/testrunner.pro2
-rw-r--r--src/window-lib/touchemulation.cpp11
-rw-r--r--src/window-lib/touchemulation.h1
-rw-r--r--src/window-lib/touchemulation_x11.cpp17
-rw-r--r--src/window-lib/touchemulation_x11_p.h6
-rw-r--r--src/window-lib/waylandqtamserverextension.cpp3
-rw-r--r--src/window-lib/window-lib.pro2
-rw-r--r--src/window-lib/windowitem.cpp6
-rw-r--r--src/window-lib/windowitem.h2
-rw-r--r--tests/configuration/tst_configuration.cpp20
-rw-r--r--tests/main/tst_main.cpp5
-rw-r--r--tests/qml/resources/test.pro2
56 files changed, 162 insertions, 150 deletions
diff --git a/.qmake.conf b/.qmake.conf
index c540db11..cad05d8c 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -1,6 +1,6 @@
load(qt_build_config)
-MODULE_VERSION = 5.15.1
+MODULE_VERSION = 6.0.0
SOURCE_DIR=$$PWD
BUILD_DIR=$$shadowed($$PWD)
diff --git a/qmltypes/QtApplicationManager/Application/plugins.qmltypes b/qmltypes/QtApplicationManager/Application/plugins.qmltypes
index f198ebce..9cd26d01 100644
--- a/qmltypes/QtApplicationManager/Application/plugins.qmltypes
+++ b/qmltypes/QtApplicationManager/Application/plugins.qmltypes
@@ -7,7 +7,7 @@ import QtQuick.tooling 1.2
// appman-dumpqmltypes
Module {
- dependencies: [ "QtQuick.Window 2.15", "QtQuick 2.15" ]
+ dependencies: [ "QtQuick.Window 2.0", "QtQuick 2.0" ]
Component {
name: "IntentHandler"
exports: [ "QtApplicationManager.Application/IntentHandler 2.0" ]
diff --git a/qmltypes/QtApplicationManager/SystemUI/plugins.qmltypes b/qmltypes/QtApplicationManager/SystemUI/plugins.qmltypes
index 520cd8ef..5b7ce6ce 100644
--- a/qmltypes/QtApplicationManager/SystemUI/plugins.qmltypes
+++ b/qmltypes/QtApplicationManager/SystemUI/plugins.qmltypes
@@ -7,7 +7,7 @@ import QtQuick.tooling 1.2
// appman-dumpqmltypes
Module {
- dependencies: [ "QtQuick.Window 2.15", "QtQuick 2.15" ]
+ dependencies: [ "QtQuick.Window 2.0", "QtQuick 2.0" ]
Component {
name: "ProcessStatus"
exports: [ "QtApplicationManager.SystemUI/ProcessStatus 2.0" ]
diff --git a/qmltypes/QtApplicationManager/plugins.qmltypes b/qmltypes/QtApplicationManager/plugins.qmltypes
index 379320ea..a035c40f 100644
--- a/qmltypes/QtApplicationManager/plugins.qmltypes
+++ b/qmltypes/QtApplicationManager/plugins.qmltypes
@@ -7,7 +7,7 @@ import QtQuick.tooling 1.2
// appman-dumpqmltypes
Module {
- dependencies: [ "QtQuick.Window 2.15", "QtQuick 2.15" ]
+ dependencies: [ "QtQuick.Window 2.0", "QtQuick 2.0" ]
Component {
name: "MonitorModel"
exports: [ "QtApplicationManager/MonitorModel 2.0" ]
diff --git a/src/application-lib/packageinfo.cpp b/src/application-lib/packageinfo.cpp
index 05946096..b3fbd03b 100644
--- a/src/application-lib/packageinfo.cpp
+++ b/src/application-lib/packageinfo.cpp
@@ -194,11 +194,11 @@ void PackageInfo::writeToDataStream(QDataStream &ds) const
<< m_baseDir.absolutePath()
<< serializedReport;
- ds << m_applications.size();
+ ds << int(m_applications.size());
for (const auto &app : m_applications)
app->writeToDataStream(ds);
- ds << m_intents.size();
+ ds << int(m_intents.size());
for (const auto &intent : m_intents)
intent->writeToDataStream(ds);
}
diff --git a/src/common-lib/common-lib.pro b/src/common-lib/common-lib.pro
index ed98d0ad..4b1ffda6 100644
--- a/src/common-lib/common-lib.pro
+++ b/src/common-lib/common-lib.pro
@@ -6,7 +6,6 @@ load(am-config)
QT = core core-private network concurrent
qtHaveModule(geniviextras):QT *= geniviextras
-android:QT *= androidextras
qtHaveModule(dbus):QT *= dbus
qtHaveModule(qml):QT *= qml qml-private
diff --git a/src/common-lib/configcache.cpp b/src/common-lib/configcache.cpp
index 47491fc0..8d7aef1f 100644
--- a/src/common-lib/configcache.cpp
+++ b/src/common-lib/configcache.cpp
@@ -149,7 +149,7 @@ void *AbstractConfigCache::takeResult(int index) const
Q_ASSERT(!(d->options & MergedResult));
void *result = nullptr;
if (index >= 0 && index < d->cache.size())
- qSwap(result, d->cache[index].content);
+ std::swap(result, d->cache[index].content);
return result;
}
@@ -223,7 +223,7 @@ void AbstractConfigCache::parse()
}
if (ds.status() != QDataStream::Ok)
- throw Exception("failed to read cache content");
+ throw Exception("failed to read cache content (%1)").arg(ds.status());
cacheIsValid = true;
@@ -245,6 +245,7 @@ void AbstractConfigCache::parse()
} catch (const Exception &e) {
qWarning(LogCache) << "Failed to read cache:" << e.what();
+ cache.clear();
}
}
} else if (d->options.testFlag(ClearCache)) {
@@ -368,11 +369,11 @@ void AbstractConfigCache::parse()
// everything is parsed now, so we can write a new cache file
try {
- QFile cacheFile(cacheFilePath);
- if (!cacheFile.open(QFile::WriteOnly | QFile::Truncate))
+ QFile newCacheFile(cacheFilePath);
+ if (!newCacheFile.open(QFile::WriteOnly | QFile::Truncate))
throw Exception(cacheFile, "failed to open file for writing");
- QDataStream ds(&cacheFile);
+ QDataStream ds(&newCacheFile);
CacheHeader cacheHeader;
cacheHeader.baseName = d->cacheBaseName;
cacheHeader.typeId = d->typeId;
diff --git a/src/common-lib/error.h b/src/common-lib/error.h
index 6204783d..fe19d2e3 100644
--- a/src/common-lib/error.h
+++ b/src/common-lib/error.h
@@ -76,9 +76,13 @@ enum class Error {
QT_END_NAMESPACE_AM
-Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE_AM(Error))
+QT_BEGIN_NAMESPACE
-inline QDebug &operator<<(QDebug &debug, QT_PREPEND_NAMESPACE_AM(Error) error)
+inline QDebug &operator<<(QDebug &debug, const QT_PREPEND_NAMESPACE_AM(Error) &error)
{
return debug << int(error);
}
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE_AM(Error))
diff --git a/src/common-lib/exception.cpp b/src/common-lib/exception.cpp
index ba3e8020..6b9212c7 100644
--- a/src/common-lib/exception.cpp
+++ b/src/common-lib/exception.cpp
@@ -86,7 +86,7 @@ Exception::Exception(Exception &&move) Q_DECL_NOEXCEPT
: m_errorCode(move.m_errorCode)
, m_errorString(move.m_errorString)
{
- qSwap(m_whatBuffer, move.m_whatBuffer);
+ std::swap(m_whatBuffer, move.m_whatBuffer);
}
Exception::~Exception() Q_DECL_NOEXCEPT
diff --git a/src/common-lib/exception.h b/src/common-lib/exception.h
index c2ed3ec9..4610992c 100644
--- a/src/common-lib/exception.h
+++ b/src/common-lib/exception.h
@@ -91,7 +91,7 @@ public:
}
// this will generate compiler errors if there's no suitable QString::arg(const C &) overload
- template <typename C> typename QtPrivate::QEnableIf<QtPrivate::IsSequentialContainer<C>::Value, Exception>::Type &
+ template <typename C> typename std::enable_if<QtPrivate::IsSequentialContainer<C>::Value, Exception>::type &
arg(const C &c) Q_DECL_NOEXCEPT
{
QString s;
@@ -104,12 +104,6 @@ public:
return *this;
}
- // QStringList is always special
- Exception &arg(const QStringList &sl) Q_DECL_NOEXCEPT
- {
- return arg(static_cast<QList<QString>>(sl));
- }
-
Exception &arg(const char *str) Q_DECL_NOEXCEPT
{
m_errorString = m_errorString.arg(QString::fromUtf8(str));
diff --git a/src/common-lib/qml-utilities.cpp b/src/common-lib/qml-utilities.cpp
index f3d43965..230f578d 100644
--- a/src/common-lib/qml-utilities.cpp
+++ b/src/common-lib/qml-utilities.cpp
@@ -47,6 +47,7 @@
#include <private/qvariant_p.h>
#include "logging.h"
+#include "utilities.h"
#include "qml-utilities.h"
QT_BEGIN_NAMESPACE_AM
@@ -73,18 +74,18 @@ void fixNullValuesForQml(QVariant &v)
{
switch (static_cast<int>(v.type())) {
case QVariant::List: {
- QVariantList *list = v_cast<QVariantList>(&v.data_ptr());
+ QVariantList *list = qt6_v_cast<QVariantList>(&v.data_ptr());
fixNullValuesForQml(*list);
break;
}
case QVariant::Map: {
- QVariantMap *map = v_cast<QVariantMap>(&v.data_ptr());
+ QVariantMap *map = qt6_v_cast<QVariantMap>(&v.data_ptr());
fixNullValuesForQml(*map);
break;
}
case QVariant::Invalid: {
QVariant v2 = QVariant::fromValue(nullptr);
- qSwap(v.data_ptr(), v2.data_ptr());
+ std::swap(v.data_ptr(), v2.data_ptr());
break;
}
}
diff --git a/src/common-lib/qtyaml.cpp b/src/common-lib/qtyaml.cpp
index 56631d3b..4144d4bd 100644
--- a/src/common-lib/qtyaml.cpp
+++ b/src/common-lib/qtyaml.cpp
@@ -45,7 +45,6 @@
#include <QRegularExpression>
#include <QDebug>
#include <QtNumeric>
-#include <QTextCodec>
#include <QFileInfo>
#include <QDir>
@@ -189,7 +188,6 @@ public:
QString sourceName;
QString sourceDir;
QByteArray data;
- QTextCodec *codec = nullptr;
bool parsedHeader = false;
yaml_parser_t parser;
yaml_event_t event;
@@ -218,10 +216,11 @@ YamlParser::YamlParser(const QByteArray &data, const QString &fileName)
if (d->event.type != YAML_STREAM_START_EVENT)
throw Exception("Invalid YAML data");
switch (d->event.data.stream_start.encoding) {
+ case YAML_UTF8_ENCODING: break;
default:
- case YAML_UTF8_ENCODING: d->codec = QTextCodec::codecForName("UTF-8"); break;
- case YAML_UTF16LE_ENCODING: d->codec = QTextCodec::codecForName("UTF-16LE"); break;
- case YAML_UTF16BE_ENCODING: d->codec = QTextCodec::codecForName("UTF-16BE"); break;
+ case YAML_UTF16LE_ENCODING:
+ case YAML_UTF16BE_ENCODING:
+ throw Exception("Only UTF-8 is supported as a YAML encoding");
}
}
@@ -321,8 +320,8 @@ QString YamlParser::parseString() const
Q_ASSERT(d->event.data.scalar.value);
Q_ASSERT(static_cast<int>(d->event.data.scalar.length) >= 0);
- return QTextDecoder(d->codec).toUnicode(reinterpret_cast<const char *>(d->event.data.scalar.value),
- static_cast<int>(d->event.data.scalar.length));
+ return QString::fromUtf8(reinterpret_cast<const char *>(d->event.data.scalar.value),
+ static_cast<int>(d->event.data.scalar.length));
}
QVariant YamlParser::parseScalar() const
@@ -666,7 +665,7 @@ YamlParserException::YamlParserException(YamlParser *p, const char *errorString)
bool isProblem = p->d->parser.problem;
yaml_mark_t &mark = isProblem ? p->d->parser.problem_mark : p->d->parser.mark;
- QString context = QTextDecoder(p->d->codec).toUnicode(p->d->data);
+ QString context = QString::fromUtf8(p->d->data);
int lpos = context.lastIndexOf(qL1C('\n'), int(mark.index ? mark.index - 1 : 0));
int rpos = context.indexOf(qL1C('\n'), int(mark.index));
context = context.mid(lpos + 1, rpos == -1 ? context.size() : rpos - lpos - 1);
diff --git a/src/common-lib/utilities.cpp b/src/common-lib/utilities.cpp
index eeee57c3..8a7061f1 100644
--- a/src/common-lib/utilities.cpp
+++ b/src/common-lib/utilities.cpp
@@ -339,7 +339,7 @@ void recursiveMergeVariantMap(QVariantMap &into, const QVariantMap &from)
// we're trying not to detach, so we're using v_cast to avoid copies
if (needsMerge && (toValue.type() == QVariant::Map))
- recursiveMergeMap(v_cast<QVariantMap>(&toValue.data_ptr()), fromValue.toMap());
+ recursiveMergeMap(qt6_v_cast<QVariantMap>(&toValue.data_ptr()), fromValue.toMap());
else if (needsMerge && (toValue.type() == QVariant::List))
into->insert(it.key(), toValue.toList() + fromValue.toList());
else
diff --git a/src/common-lib/utilities.h b/src/common-lib/utilities.h
index 0d51fc6f..7086be3d 100644
--- a/src/common-lib/utilities.h
+++ b/src/common-lib/utilities.h
@@ -157,4 +157,10 @@ inline bool loadResource(const QString &resource)
: (QResource::registerResource(resource) || QLibrary(QDir().absoluteFilePath(resource)).load());
}
+// Qt6 removed v_cast, but the "replacement" QVariant::Private::get is const only
+template <typename T> T *qt6_v_cast(QVariant::Private *vp)
+{
+ return static_cast<T *>(const_cast<void *>(vp->storage()));
+}
+
QT_END_NAMESPACE_AM
diff --git a/src/dbus-lib/dbusdaemon.cpp b/src/dbus-lib/dbusdaemon.cpp
index 0e0117f7..b1072599 100644
--- a/src/dbus-lib/dbusdaemon.cpp
+++ b/src/dbus-lib/dbusdaemon.cpp
@@ -76,6 +76,13 @@ DBusDaemonProcess::DBusDaemonProcess(QObject *parent)
#endif
setProgram(program);
setArguments(arguments);
+
+#if defined(Q_OS_LINUX)
+ setChildProcessModifier([]() {
+ // at least on Linux we can make sure that those dbus-daemons are always killed
+ prctl(PR_SET_PDEATHSIG, SIGKILL);
+ });
+#endif
}
DBusDaemonProcess::~DBusDaemonProcess()
@@ -84,15 +91,6 @@ DBusDaemonProcess::~DBusDaemonProcess()
waitForFinished();
}
-void DBusDaemonProcess::setupChildProcess()
-{
-# if defined(Q_OS_LINUX)
- // at least on Linux we can make sure that those dbus-daemons are always killed
- prctl(PR_SET_PDEATHSIG, SIGKILL);
-# endif
- QProcess::setupChildProcess();
-}
-
void DBusDaemonProcess::start() Q_DECL_NOEXCEPT_EXPR(false)
{
static const int timeout = 10000 * int(timeoutFactor());
diff --git a/src/dbus-lib/dbusdaemon.h b/src/dbus-lib/dbusdaemon.h
index ca3fdd4b..78f7138f 100644
--- a/src/dbus-lib/dbusdaemon.h
+++ b/src/dbus-lib/dbusdaemon.h
@@ -54,9 +54,6 @@ public:
~DBusDaemonProcess() override;
static void start() Q_DECL_NOEXCEPT_EXPR(false);
-
-protected:
- void setupChildProcess() override;
};
QT_END_NAMESPACE_AM
diff --git a/src/intent-server-lib/intent.cpp b/src/intent-server-lib/intent.cpp
index 5d6461f5..35ee0eac 100644
--- a/src/intent-server-lib/intent.cpp
+++ b/src/intent-server-lib/intent.cpp
@@ -201,7 +201,7 @@ bool Intent::checkParameterMatch(const QVariantMap &parameters) const
bool foundMatch = false;
const QVariantList rvlist = requiredValue.toList();
for (const QVariant &rv2 : rvlist) {
- if (actualValue.canConvert(int(rv2.type())) && actualValue == rv2) {
+ if (actualValue.canConvert(rv2.metaType()) && actualValue == rv2) {
foundMatch = true;
break;
}
diff --git a/src/launcher-lib/intentclientdbusimplementation.cpp b/src/launcher-lib/intentclientdbusimplementation.cpp
index 62d9d07c..d72c9054 100644
--- a/src/launcher-lib/intentclientdbusimplementation.cpp
+++ b/src/launcher-lib/intentclientdbusimplementation.cpp
@@ -91,13 +91,15 @@ void IntentClientDBusImplementation::initialize(IntentClient *intentClient) Q_DE
connect(m_dbusInterface, &IoQtApplicationManagerIntentInterfaceInterface::replyFromSystem,
intentClient, [this](const QString &requestId, bool error, const QVariantMap &result) {
- emit replyFromSystem(requestId, error, convertFromDBusVariant(result).toMap());
+ emit replyFromSystem(QUuid::fromString(requestId), error,
+ convertFromDBusVariant(result).toMap());
});
connect(m_dbusInterface, &IoQtApplicationManagerIntentInterfaceInterface::requestToApplication,
intentClient, [this](const QString &requestId, const QString &id,
const QString &applicationId, const QVariantMap &parameters) {
- emit requestToApplication(requestId, id, QString(), applicationId, convertFromDBusVariant(parameters).toMap());
+ emit requestToApplication(QUuid::fromString(requestId), id, QString(), applicationId,
+ convertFromDBusVariant(parameters).toMap());
});
}
diff --git a/src/launcher-lib/ipcwrapperobject.cpp b/src/launcher-lib/ipcwrapperobject.cpp
index d20ee5a3..875c40d1 100644
--- a/src/launcher-lib/ipcwrapperobject.cpp
+++ b/src/launcher-lib/ipcwrapperobject.cpp
@@ -182,7 +182,7 @@ IpcWrapperObject::IpcWrapperObject(const QString &service, const QString &path,
m_wrapperHelper, SLOT(onPropertiesChanged(QString,QVariantMap,QStringList)));
QMetaObjectBuilder mob;
- mob.setFlags(QMetaObjectBuilder::DynamicMetaObject);
+ mob.setFlags(DynamicMetaObject);
const QMetaObject *mo = m_dbusInterface->metaObject();
@@ -213,7 +213,7 @@ IpcWrapperObject::IpcWrapperObject(const QString &service, const QString &path,
for (int i = mo->methodOffset(); i < mo->methodCount(); ++i) {
QMetaMethod mm = mo->method(i);
if ((pass == 1) == (mm.methodType() == QMetaMethod::Signal)) {
- QByteArray resultTypeName = QMetaType::typeName(mm.returnType());
+ QByteArray resultTypeName = QMetaType(mm.returnType()).name();
if (mm.returnType() == qMetaTypeId<QDBusVariant>())
resultTypeName = "QVariant";
@@ -292,7 +292,7 @@ int IpcWrapperObject::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
QMetaProperty mp = metaObject()->property(metaObject()->propertyOffset() + _id);
QVariant value = dbusmp.read(m_dbusInterface);
value = convertFromDBusVariant(value);
- QMetaType::construct(int(mp.type()), _a[0], value.data());
+ mp.metaType().construct(_a[0], value.data());
break;
}
case QMetaObject::WriteProperty: {
@@ -300,7 +300,7 @@ int IpcWrapperObject::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
int valueType = mp.userType();
if (valueType == qMetaTypeId<QDBusVariant>())
valueType = QMetaType::QVariant;
- QVariant value(valueType, _a[0]);
+ QVariant value(QMetaType(valueType), _a[0]);
value = convertFromJSVariant(value);
if (mp.userType() == qMetaTypeId<QDBusVariant>()) {
QDBusVariant dbv = QDBusVariant(value);
@@ -316,7 +316,7 @@ int IpcWrapperObject::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
QList<QVariant> args;
for (int i = 0; i < mm.parameterCount(); ++i) {
- args << QVariant(mm.parameterType(i), _a[i + 1]);
+ args << QVariant(mm.parameterMetaType(i), _a[i + 1]);
}
QDBusMessage reply = m_dbusInterface->callWithArgumentList(QDBus::Block, qL1S(mm.name()), args);
@@ -325,7 +325,7 @@ int IpcWrapperObject::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
value = convertFromDBusVariant(reply.arguments().at(0));
}
- QMetaType::construct(mm.returnType(), _a[0], value.data());
+ mm.returnMetaType().construct(_a[0], value.data());
break;
}
default:
diff --git a/src/launcher-lib/launcher-lib.pro b/src/launcher-lib/launcher-lib.pro
index 80c70d53..72d7d539 100644
--- a/src/launcher-lib/launcher-lib.pro
+++ b/src/launcher-lib/launcher-lib.pro
@@ -37,6 +37,8 @@ SOURCES += \
WAYLANDCLIENTSOURCES += ../wayland-extensions/qtam-extension.xml
HEADERS += waylandqtamclientextension_p.h
SOURCES += waylandqtamclientextension.cpp
+
+ PKGCONFIG += wayland-client
}
HEADERS += \
diff --git a/src/launcher-lib/waylandqtamclientextension.cpp b/src/launcher-lib/waylandqtamclientextension.cpp
index e3b26bac..ab09ac2b 100644
--- a/src/launcher-lib/waylandqtamclientextension.cpp
+++ b/src/launcher-lib/waylandqtamclientextension.cpp
@@ -102,7 +102,7 @@ void WaylandQtAMClientExtension::sendPropertyToServer(struct ::wl_surface *surfa
const QVariant &value)
{
QByteArray byteValue;
- QDataStream ds(&byteValue, QIODevice::WriteOnly);
+ QDataStream ds(&byteValue, QDataStream::WriteOnly);
ds << value;
qCDebug(LogWaylandDebug) << "CLIENT >>prop>>" << surface << name << value;
set_window_property(surface, name, byteValue);
diff --git a/src/main-lib/main.cpp b/src/main-lib/main.cpp
index 1c4864dd..6a1aa5c3 100644
--- a/src/main-lib/main.cpp
+++ b/src/main-lib/main.cpp
@@ -77,7 +77,7 @@
# include <QGuiApplication>
# include <QQuickView>
# include <QQuickItem>
-# include <QTouchDevice>
+# include <QInputDevice>
# include <private/qopenglcontext_p.h>
# include <QLocalServer>
#endif
@@ -684,6 +684,7 @@ void Main::setupWindowManager(const QString &waylandSocketName, const QVariantLi
bool slowAnimations, bool uiWatchdog)
{
#if defined(AM_HEADLESS)
+ Q_UNUSED(waylandExtraSockets)
Q_UNUSED(waylandSocketName)
Q_UNUSED(slowAnimations)
Q_UNUSED(uiWatchdog)
@@ -755,6 +756,8 @@ void Main::setupWindowManager(const QString &waylandSocketName, const QVariantLi
m_windowManager->addWaylandSocket(extraSocket.take());
}
+#else
+ Q_UNUSED(waylandExtraSockets)
#endif
QObject::connect(&m_applicationManager->internalSignals, &ApplicationManagerInternalSignals::newRuntimeCreated,
@@ -771,7 +774,7 @@ void Main::setupTouchEmulation(bool enableTouchEmulation)
#else
if (enableTouchEmulation) {
if (TouchEmulation::isSupported()) {
- if (QTouchDevice::devices().isEmpty()) {
+ if (TouchEmulation::hasPhysicalTouchscreen()) {
TouchEmulation::createInstance();
qCDebug(LogGraphics) << "Touch emulation is enabled: all mouse events will be "
"converted to touch events.";
diff --git a/src/manager-lib/application.cpp b/src/manager-lib/application.cpp
index 8f8f6694..fca17725 100644
--- a/src/manager-lib/application.cpp
+++ b/src/manager-lib/application.cpp
@@ -492,6 +492,8 @@ void Application::setLastExitCodeAndStatus(int exitCode, Am::ExitStatus exitStat
QT_END_NAMESPACE_AM
+QT_BEGIN_NAMESPACE
+
QDebug operator<<(QDebug debug, const QT_PREPEND_NAMESPACE_AM(Application) *app)
{
debug << "Application Object:";
@@ -502,4 +504,6 @@ QDebug operator<<(QDebug debug, const QT_PREPEND_NAMESPACE_AM(Application) *app)
return debug;
}
+QT_END_NAMESPACE
+
#include "moc_application.cpp"
diff --git a/src/manager-lib/application.h b/src/manager-lib/application.h
index 696068df..8cf791ec 100644
--- a/src/manager-lib/application.h
+++ b/src/manager-lib/application.h
@@ -182,6 +182,10 @@ private:
QT_END_NAMESPACE_AM
-Q_DECLARE_METATYPE(const QT_PREPEND_NAMESPACE_AM(Application *))
+QT_BEGIN_NAMESPACE
QDebug operator<<(QDebug debug, const QT_PREPEND_NAMESPACE_AM(Application) *app);
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(const QT_PREPEND_NAMESPACE_AM(Application *))
diff --git a/src/manager-lib/applicationipcinterface.cpp b/src/manager-lib/applicationipcinterface.cpp
index 7928a851..d3dd8e45 100644
--- a/src/manager-lib/applicationipcinterface.cpp
+++ b/src/manager-lib/applicationipcinterface.cpp
@@ -534,11 +534,11 @@ bool IpcProxyObject::handleMessage(const QDBusMessage &message, const QDBusConne
// parameter types need to match - the only exception is if we expect
// a QVariant, since we can convert the parameter implicitly
- if (argsCopy[ai].typeName() != QMetaType::typeName(expectedTypes.at(ai + 1))) {
+ if (argsCopy[ai].typeName() != QMetaType(expectedTypes.at(ai + 1)).name()) {
if (expectedTypes.at(ai + 1) != QMetaType::QVariant) {
matched = false;
qWarning() << "MISMATCHED PARAMETER" << ai + 1 << "ON FUNCTION" << function
- << "- EXPECTED" << QMetaType::typeName(expectedTypes.at(ai + 1))
+ << "- EXPECTED" << QMetaType(expectedTypes.at(ai + 1)).name()
<< "- RECEIVED" << argsCopy[ai].typeName();
break;
}
@@ -573,8 +573,6 @@ bool IpcProxyObject::handleMessage(const QDBusMessage &message, const QDBusConne
if (message.arguments().at(0) != m_interfaceName)
return false;
- const QMetaObject *mo = m_object->metaObject();
-
if (function == "Get") {
QByteArray name = message.arguments().at(1).toString().toLatin1();
QVariant result;
@@ -660,7 +658,7 @@ void IpcProxyObject::relaySignal(int signalIndex, void **argv)
QList<QVariant> args;
for (int i = 0; i < mm.parameterCount(); ++i) {
- args << convertFromJSVariant(QVariant(mm.parameterType(i), argv[i + 1]));
+ args << convertFromJSVariant(QVariant(mm.parameterMetaType(i), argv[i + 1]));
}
QDBusMessage message = QDBusMessage::createSignal(pathName, m_interfaceName, qL1S(mm.name()));
diff --git a/src/manager-lib/applicationmanager.cpp b/src/manager-lib/applicationmanager.cpp
index d0565130..68a97dd8 100644
--- a/src/manager-lib/applicationmanager.cpp
+++ b/src/manager-lib/applicationmanager.cpp
@@ -43,6 +43,7 @@
#include <QCoreApplication>
#include <QUrl>
+#include <QRegularExpression>
#include <QFileInfo>
#include <QProcess>
#include <QDir>
@@ -691,7 +692,7 @@ bool ApplicationManager::startApplicationInternal(const QString &appId, const QS
if ((hasAsterisk && key.length() == 1)
|| (!hasAsterisk && key == app->id())
- || QRegExp(key, Qt::CaseSensitive, QRegExp::Wildcard).exactMatch(app->id())) {
+ || QRegularExpression(QRegularExpression::wildcardToRegularExpression(key)).match(app->id()).hasMatch()) {
containerId = value;
break;
}
diff --git a/src/manager-lib/intentaminterface.cpp b/src/manager-lib/intentaminterface.cpp
index 66b97546..5df42163 100644
--- a/src/manager-lib/intentaminterface.cpp
+++ b/src/manager-lib/intentaminterface.cpp
@@ -133,7 +133,6 @@ IntentServer *IntentAMImplementation::createIntentServerAndClientInstance(Packag
QObject::connect(&packageManager->internalSignals, &PackageManagerInternalSignals::registerIntent,
intentServer, [intentServer](IntentInfo *intentInfo, Package *package) {
-
if (!intentServer->addIntent(intentInfo->id(), package->id(), intentInfo->handlingApplicationId(),
intentInfo->requiredCapabilities(),
intentInfo->visibility() == IntentInfo::Public ? Intent::Public
@@ -434,7 +433,7 @@ void IntentServerInProcessIpcConnection::requestToApplication(IntentServerReques
// behavior in single- and multi-process mode
QMetaObject::invokeMethod(this, [this, irs]() {
auto clientInterface = m_interface->intentClientSystemInterface();
- emit clientInterface->requestToApplication(irs->requestId().toString(), irs->intentId(),
+ emit clientInterface->requestToApplication(irs->requestId(), irs->intentId(),
irs->requestingApplicationId(),
irs->handlingApplicationId(), irs->parameters());
}, Qt::QueuedConnection);
@@ -446,7 +445,7 @@ void IntentServerInProcessIpcConnection::replyFromSystem(IntentServerRequest *ir
// behavior in single- and multi-process mode
QMetaObject::invokeMethod(this, [this, irs]() {
auto clientInterface = m_interface->intentClientSystemInterface();
- emit clientInterface->replyFromSystem(irs->requestId().toString(), !irs->succeeded(), irs->result());
+ emit clientInterface->replyFromSystem(irs->requestId(), !irs->succeeded(), irs->result());
}, Qt::QueuedConnection);
}
@@ -526,7 +525,7 @@ QString IntentServerDBusIpcConnection::requestToSystem(const QString &intentId,
void IntentServerDBusIpcConnection::replyFromApplication(const QString &requestId, bool error,
const QVariantMap &result)
{
- emit m_interface->replyFromApplication(application()->id(), requestId, error,
+ emit m_interface->replyFromApplication(application()->id(), QUuid::fromString(requestId), error,
convertFromDBusVariant(result).toMap());
}
diff --git a/src/manager-lib/nativeruntime.cpp b/src/manager-lib/nativeruntime.cpp
index 2e232989..8d0f05ae 100644
--- a/src/manager-lib/nativeruntime.cpp
+++ b/src/manager-lib/nativeruntime.cpp
@@ -194,7 +194,7 @@ bool NativeRuntime::initialize()
// try the main binaries directory
possibleLocations.append(QCoreApplication::applicationDirPath());
// try Qt's bin folder
- possibleLocations.append(QLibraryInfo::location(QLibraryInfo::BinariesPath));
+ possibleLocations.append(QLibraryInfo::path(QLibraryInfo::BinariesPath));
// try the AM's build directory
possibleLocations.append(qApp->property("_am_build_dir").toString() + qSL("/bin")); // set by main.cpp
// if everything fails, try to locate it in $PATH
diff --git a/src/manager-lib/processcontainer.cpp b/src/manager-lib/processcontainer.cpp
index 05e2ad58..96584054 100644
--- a/src/manager-lib/processcontainer.cpp
+++ b/src/manager-lib/processcontainer.cpp
@@ -56,12 +56,14 @@
QT_BEGIN_NAMESPACE_AM
-class HostQProcess : public QProcess // clazy:exclude=missing-qobject-macro
+
+HostProcess::HostProcess()
+ : m_process(new QProcess)
{
-protected:
- void setupChildProcess() override
- {
+ m_process->setProcessChannelMode(QProcess::ForwardedChannels);
+ m_process->setInputChannelMode(QProcess::ForwardedInputChannel);
#if defined(Q_OS_UNIX)
+ m_process->setChildProcessModifier([this]() {
if (m_stopBeforeExec) {
fprintf(stderr, "\n*** a 'process' container was started in stopped state ***\nthe process is suspended via SIGSTOP and you can attach a debugger to it via\n\n gdb -p %d\n\n", getpid());
raise(SIGSTOP);
@@ -75,20 +77,8 @@ protected:
::close(fd);
}
}
+ });
#endif
- }
-
-public:
- bool m_stopBeforeExec = false;
- QVector<int> m_stdioRedirections;
-};
-
-
-HostProcess::HostProcess()
- : m_process(new HostQProcess)
-{
- m_process->setProcessChannelMode(QProcess::ForwardedChannels);
- m_process->setInputChannelMode(QProcess::ForwardedInputChannel);
}
HostProcess::~HostProcess()
@@ -119,7 +109,7 @@ void HostProcess::start(const QString &program, const QStringList &arguments)
#if defined(Q_OS_UNIX)
// make sure that the redirection fds do not have a close-on-exec flag, since we need them
// in the child process.
- for (int fd : qAsConst(m_process->m_stdioRedirections)) {
+ for (int fd : qAsConst(m_stdioRedirections)) {
if (fd < 0)
continue;
int flags = fcntl(fd, F_GETFD);
@@ -134,7 +124,7 @@ void HostProcess::start(const QString &program, const QStringList &arguments)
// we are forked now and the child process has received a copy of all redirected fds
// now it's time to close our fds, since we don't need them anymore (plus we would block
// the tty where they originated from)
- for (int fd : qAsConst(m_process->m_stdioRedirections)) {
+ for (int fd : qAsConst(m_stdioRedirections)) {
if (fd >= 0)
::close(fd);
}
@@ -173,12 +163,12 @@ Am::RunState HostProcess::state() const
void HostProcess::setStdioRedirections(const QVector<int> &stdioRedirections)
{
- m_process->m_stdioRedirections = stdioRedirections;
+ m_stdioRedirections = stdioRedirections;
}
void HostProcess::setStopBeforeExec(bool stopBeforeExec)
{
- m_process->m_stopBeforeExec = stopBeforeExec;
+ m_stopBeforeExec = stopBeforeExec;
}
diff --git a/src/manager-lib/processcontainer.h b/src/manager-lib/processcontainer.h
index 99348a25..2eaa3a67 100644
--- a/src/manager-lib/processcontainer.h
+++ b/src/manager-lib/processcontainer.h
@@ -66,8 +66,6 @@ public:
};
-class HostQProcess;
-
class HostProcess : public AbstractContainerProcess
{
Q_OBJECT
@@ -91,8 +89,10 @@ public slots:
void setStopBeforeExec(bool stopBeforeExec);
private:
- HostQProcess *m_process;
+ QProcess *m_process;
qint64 m_pid = 0;
+ bool m_stopBeforeExec = false;
+ QVector<int> m_stdioRedirections;
};
class ProcessContainer : public AbstractContainer
diff --git a/src/manager-lib/qmlinprocessapplicationmanagerwindow.cpp b/src/manager-lib/qmlinprocessapplicationmanagerwindow.cpp
index 58462ed7..563461ce 100644
--- a/src/manager-lib/qmlinprocessapplicationmanagerwindow.cpp
+++ b/src/manager-lib/qmlinprocessapplicationmanagerwindow.cpp
@@ -203,7 +203,7 @@ void QmlInProcessApplicationManagerWindow::componentComplete()
// called, so we don't depend on the existence of onCompleted handlers (and conform to multi-
// process mode; there is no guarantee though, since multi-process is inherently asynchronous).
- for (auto a = QQmlComponent::qmlAttachedProperties(this); a; a = a->next) {
+ for (auto a = QQmlComponent::qmlAttachedProperties(this); a; a = a->next()) {
auto appWindow = qobject_cast<QmlInProcessApplicationManagerWindow *>(a->parent());
if (!appWindow || appWindow != this)
continue;
diff --git a/src/manager-lib/qmlinprocessruntime.cpp b/src/manager-lib/qmlinprocessruntime.cpp
index 68c03072..59999727 100644
--- a/src/manager-lib/qmlinprocessruntime.cpp
+++ b/src/manager-lib/qmlinprocessruntime.cpp
@@ -48,6 +48,7 @@
#include <QMetaObject>
#include <private/qv4engine_p.h>
#include <private/qqmlcontext_p.h>
+#include <private/qqmlcontextdata_p.h>
#if !defined(AM_HEADLESS)
# include <QQuickView>
@@ -367,7 +368,7 @@ QmlInProcessRuntime *QmlInProcessRuntime::determineRuntime(QObject *object)
// if this didn't work out, check out the calling context
if (QQmlEngine *engine = qmlEngine(object)) {
if (QV4::ExecutionEngine *v4 = engine->handle()) {
- if (QQmlContextData *callingContext = v4->callingQmlContext())
+ if (QQmlContextData *callingContext = v4->callingQmlContext().data())
runtime = findRuntime(callingContext->asQQmlContext());
}
}
diff --git a/src/manager-lib/sudo.cpp b/src/manager-lib/sudo.cpp
index 26602c28..74769752 100644
--- a/src/manager-lib/sudo.cpp
+++ b/src/manager-lib/sudo.cpp
@@ -255,7 +255,7 @@ SudoInterface::SudoInterface()
bool SudoInterface::sendMessage(int socket, const QByteArray &msg, MessageType type, const QString &errorString)
{
QByteArray packet;
- QDataStream ds(&packet, QIODevice::WriteOnly);
+ QDataStream ds(&packet, QDataStream::WriteOnly);
ds << errorString << msg;
packet.prepend((type == Request) ? "RQST" : "RPLY");
@@ -278,7 +278,7 @@ QByteArray SudoInterface::receiveMessage(int socket, MessageType type, QString *
QByteArray packet(recvBuffer + headerSize, int(bytesReceived) - headerSize);
- QDataStream ds(&packet, QIODevice::ReadOnly);
+ QDataStream ds(&packet, QDataStream::ReadOnly);
QByteArray msg;
ds >> *errorString >> msg;
return msg;
@@ -318,9 +318,9 @@ template <typename R, typename C, typename ...Ps> R returnType(R (C::*)(Ps...));
#define CALL(FUNC_NAME, PARAM) \
QByteArray msg; \
- QDataStream(&msg, QIODevice::WriteOnly) << #FUNC_NAME << PARAM; \
+ QDataStream(&msg, QDataStream::WriteOnly) << #FUNC_NAME << PARAM; \
QByteArray reply = call(msg); \
- QDataStream result(&reply, QIODevice::ReadOnly); \
+ QDataStream result(&reply, QDataStream::ReadOnly); \
decltype(returnType(&SudoClient::FUNC_NAME)) r; \
result >> r; \
return r
@@ -340,7 +340,7 @@ void SudoClient::stopServer()
#ifdef Q_OS_LINUX
if (!m_shortCircuit && m_socket >= 0) {
QByteArray msg;
- QDataStream(&msg, QIODevice::WriteOnly) << "stopServer";
+ QDataStream(&msg, QDataStream::WriteOnly) << "stopServer";
sendMessage(m_socket, msg, Request);
}
#endif
@@ -419,7 +419,7 @@ QByteArray SudoServer::receive(const QByteArray &msg)
QByteArray function(functionArray);
delete [] functionArray;
QByteArray reply;
- QDataStream result(&reply, QIODevice::WriteOnly);
+ QDataStream result(&reply, QDataStream::WriteOnly);
m_errorString.clear();
if (function == "removeRecursive") {
diff --git a/src/package-lib/packageextractor.cpp b/src/package-lib/packageextractor.cpp
index 99a660f3..e2243ee1 100644
--- a/src/package-lib/packageextractor.cpp
+++ b/src/package-lib/packageextractor.cpp
@@ -46,7 +46,6 @@
#include <QAtomicInt>
#include <QFile>
#include <QDir>
-#include <QRegExp>
#include <QDataStream>
#include <QUrl>
#include <QDebug>
diff --git a/src/package-lib/packageutilities.cpp b/src/package-lib/packageutilities.cpp
index 74ab4ca1..51870f7b 100644
--- a/src/package-lib/packageutilities.cpp
+++ b/src/package-lib/packageutilities.cpp
@@ -171,10 +171,10 @@ void PackageUtilities::addHeaderDataToDigest(const QVariantMap &header, QCryptog
for (auto it = headerDataForDigest.constBegin(); it != headerDataForDigest.constEnd(); ++it) {
if (header.contains(it.key())) {
QByteArray ba;
- QDataStream ds(&ba, QIODevice::WriteOnly);
+ QDataStream ds(&ba, QDataStream::WriteOnly);
QVariant v = header.value(it.key());
- if (!v.convert(int(it.value().type())))
+ if (!v.convert(it.value().metaType()))
throw Exception(Error::Package, "metadata field %1 has invalid type for digest calculation (cannot convert %2 to %3)")
.arg(it.key()).arg(header.value(it.key()).type()).arg(it.value().type());
ds << v;
diff --git a/src/shared-main-lib/sharedmain.cpp b/src/shared-main-lib/sharedmain.cpp
index 7c41206a..623606f0 100644
--- a/src/shared-main-lib/sharedmain.cpp
+++ b/src/shared-main-lib/sharedmain.cpp
@@ -112,10 +112,6 @@ void SharedMain::initialize()
s_initialized = true;
-# if !defined(QT_NO_SESSIONMANAGER)
- QGuiApplication::setFallbackSessionManagementEnabled(false);
-# endif
-
// this is needed for both WebEngine and Wayland Multi-screen rendering
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
diff --git a/src/tools/controller/controller.cpp b/src/tools/controller/controller.cpp
index cc330013..969dd1ef 100644
--- a/src/tools/controller/controller.cpp
+++ b/src/tools/controller/controller.cpp
@@ -220,7 +220,7 @@ public:
}
protected:
- bool notify(QObject *o, QEvent *e)
+ bool notify(QObject *o, QEvent *e) override
{
try {
return QCoreApplication::notify(o, e);
diff --git a/src/tools/dumpqmltypes/dumpqmltypes.cpp b/src/tools/dumpqmltypes/dumpqmltypes.cpp
index 76baa238..e64ef5fb 100644
--- a/src/tools/dumpqmltypes/dumpqmltypes.cpp
+++ b/src/tools/dumpqmltypes/dumpqmltypes.cpp
@@ -287,7 +287,7 @@ int main(int argc, char **argv)
QDir outDir;
if (clp.isSet(qSL("install")) && clp.positionalArguments().isEmpty()) {
- outDir.setPath(QLibraryInfo::location(QLibraryInfo::Qml2ImportsPath));
+ outDir.setPath(QLibraryInfo::path(QLibraryInfo::Qml2ImportsPath));
if (!outDir.exists())
throw Exception("Qt's QML2 imports directory (%1) is missing.")
.arg(outDir.absolutePath());
diff --git a/src/tools/launcher-qml/launcher-qml.cpp b/src/tools/launcher-qml/launcher-qml.cpp
index ae5e3a7f..dd067d8d 100644
--- a/src/tools/launcher-qml/launcher-qml.cpp
+++ b/src/tools/launcher-qml/launcher-qml.cpp
@@ -573,7 +573,6 @@ void Controller::startApplication(const QString &baseDir, const QString &qmlFile
QSurfaceFormat surfaceFormat = m_window->format();
surfaceFormat.setAlphaBufferSize(8);
m_window->setFormat(surfaceFormat);
- m_window->setClearBeforeRendering(true);
m_window->setColor(QColor(m_configuration.value(qSL("backgroundColor")).toString()));
}
}
diff --git a/src/tools/packager/packagingjob.cpp b/src/tools/packager/packagingjob.cpp
index ca8bb151..da0d7ab7 100644
--- a/src/tools/packager/packagingjob.cpp
+++ b/src/tools/packager/packagingjob.cpp
@@ -31,7 +31,6 @@
#include <QFile>
#include <QFileInfo>
#include <QUrl>
-#include <QRegExp>
#include <QDirIterator>
#include <QMessageAuthenticationCode>
#include <QJsonDocument>
diff --git a/src/tools/testrunner/amtest.cpp b/src/tools/testrunner/amtest.cpp
index c992c569..2b6c491f 100644
--- a/src/tools/testrunner/amtest.cpp
+++ b/src/tools/testrunner/amtest.cpp
@@ -90,12 +90,9 @@ void AmTest::ignoreMessage(MsgType type, const char *msg)
QTestLog::ignoreMessage(convertMsgType(type), msg);
}
-void AmTest::ignoreMessage(MsgType type, const QRegExp &expression)
+void AmTest::ignoreMessage(MsgType type, const QRegularExpression &expression)
{
- QRegularExpression re(expression.pattern());
- if (expression.caseSensitivity() == Qt::CaseInsensitive)
- re.setPatternOptions(QRegularExpression::CaseInsensitiveOption);
- QTestLog::ignoreMessage(convertMsgType(type), re);
+ QTestLog::ignoreMessage(convertMsgType(type), expression);
}
int AmTest::observeObjectDestroyed(QObject *obj)
diff --git a/src/tools/testrunner/amtest.h b/src/tools/testrunner/amtest.h
index 91bb43b0..f7d8ee1b 100644
--- a/src/tools/testrunner/amtest.h
+++ b/src/tools/testrunner/amtest.h
@@ -63,7 +63,7 @@ public:
int timeoutFactor() const;
Q_INVOKABLE void ignoreMessage(MsgType type, const char* msg);
- Q_INVOKABLE void ignoreMessage(MsgType type, const QRegExp &expression);
+ Q_INVOKABLE void ignoreMessage(MsgType type, const QRegularExpression &expression);
Q_INVOKABLE int observeObjectDestroyed(QObject *obj);
Q_INVOKABLE void aboutToBlock();
#if defined(Q_OS_LINUX)
diff --git a/src/tools/testrunner/testrunner.cpp b/src/tools/testrunner/testrunner.cpp
index b518098b..206ac3a7 100644
--- a/src/tools/testrunner/testrunner.cpp
+++ b/src/tools/testrunner/testrunner.cpp
@@ -45,7 +45,7 @@
#include <QCoreApplication>
#include <QEventLoop>
#include <QQmlEngine>
-#include <QRegExp>
+#include <QRegularExpression>
#include <QDir>
#include <QFileInfo>
diff --git a/src/tools/testrunner/testrunner.h b/src/tools/testrunner/testrunner.h
index db30c4d9..c32e5d55 100644
--- a/src/tools/testrunner/testrunner.h
+++ b/src/tools/testrunner/testrunner.h
@@ -43,8 +43,8 @@
#pragma once
#include <QtAppManCommon/global.h>
+#include <QStringList>
-QT_FORWARD_DECLARE_CLASS(QStringList)
QT_BEGIN_NAMESPACE_AM
diff --git a/src/tools/testrunner/testrunner.pro b/src/tools/testrunner/testrunner.pro
index ce46fe44..7adb906d 100644
--- a/src/tools/testrunner/testrunner.pro
+++ b/src/tools/testrunner/testrunner.pro
@@ -8,7 +8,7 @@ DEFINES += AM_TESTRUNNER
CONFIG *= console
-QT += qmltest qmltest-private
+QT += qmltest qmltest-private testlib-private
HEADERS += \
testrunner.h \
diff --git a/src/window-lib/touchemulation.cpp b/src/window-lib/touchemulation.cpp
index c58d4b53..893a5a11 100644
--- a/src/window-lib/touchemulation.cpp
+++ b/src/window-lib/touchemulation.cpp
@@ -42,6 +42,7 @@
#include <QtAppManCommon/global.h>
#include <QGuiApplication>
+#include <QInputDevice>
#include "touchemulation.h"
#if defined(AM_ENABLE_TOUCH_EMULATION)
# include "touchemulation_x11_p.h"
@@ -83,6 +84,16 @@ bool TouchEmulation::isSupported()
return false;
}
+bool QtAM::TouchEmulation::hasPhysicalTouchscreen()
+{
+ const auto devs = QInputDevice::devices();
+ for (auto dev : devs) {
+ if (dev->type() == QInputDevice::DeviceType::TouchScreen)
+ return true;
+ }
+ return false;
+}
+
QT_END_NAMESPACE_AM
#include "moc_touchemulation.cpp"
diff --git a/src/window-lib/touchemulation.h b/src/window-lib/touchemulation.h
index caf967b1..c70bcc1d 100644
--- a/src/window-lib/touchemulation.h
+++ b/src/window-lib/touchemulation.h
@@ -63,6 +63,7 @@ public:
static TouchEmulation *instance();
static bool isSupported();
+ static bool hasPhysicalTouchscreen();
private:
static TouchEmulation *s_instance;
diff --git a/src/window-lib/touchemulation_x11.cpp b/src/window-lib/touchemulation_x11.cpp
index 927f8e94..6a6c5562 100644
--- a/src/window-lib/touchemulation_x11.cpp
+++ b/src/window-lib/touchemulation_x11.cpp
@@ -46,7 +46,7 @@
#include <QGuiApplication>
#include <QMouseEvent>
-#include <QTouchDevice>
+#include <QPointingDevice>
#include <QWindow>
#include <QTest>
@@ -65,6 +65,10 @@
# define XCB_GE_GENERIC 35
#endif
+#if defined None
+# undef None
+#endif
+
QT_BEGIN_NAMESPACE_AM
using QTest::QTouchEventSequence;
@@ -74,7 +78,7 @@ static Qt::MouseButton xcbButtonToQtMouseButton(xcb_button_t detail)
{
switch (detail) {
case 1: return Qt::LeftButton;
- case 2: return Qt::MidButton;
+ case 2: return Qt::MiddleButton;
case 3: return Qt::RightButton;
// don't care about the rest
default: return Qt::NoButton;
@@ -102,9 +106,10 @@ TouchEmulationX11::TouchEmulationX11()
qGuiApp->installNativeEventFilter(this);
// Create a fake touch device to deliver our synthesized events
- m_touchDevice = new QTouchDevice;
- m_touchDevice->setType(QTouchDevice::TouchScreen);
- QWindowSystemInterface::registerTouchDevice(m_touchDevice);
+ m_touchDevice = new QPointingDevice(qSL("Fake Touch"), -1, QInputDevice::DeviceType::TouchScreen,
+ QPointingDevice::PointerType::Finger,
+ QInputDevice::Capability::None, 0, 0);
+ QWindowSystemInterface::registerInputDevice(m_touchDevice);
queryForXInput2();
}
@@ -123,7 +128,7 @@ void TouchEmulationX11::queryForXInput2()
}
}
-bool TouchEmulationX11::nativeEventFilter(const QByteArray &eventType, void *message, long * /*result*/)
+bool TouchEmulationX11::nativeEventFilter(const QByteArray &eventType, void *message, qintptr * /*result*/)
{
if (eventType != "xcb_generic_event_t")
return false; // just ignore non-XCB-native events
diff --git a/src/window-lib/touchemulation_x11_p.h b/src/window-lib/touchemulation_x11_p.h
index 14657ac6..59bb610e 100644
--- a/src/window-lib/touchemulation_x11_p.h
+++ b/src/window-lib/touchemulation_x11_p.h
@@ -51,7 +51,7 @@
#include <QObject>
#include <QWindow>
-QT_FORWARD_DECLARE_CLASS(QTouchDevice)
+QT_FORWARD_DECLARE_CLASS(QPointingDevice)
QT_FORWARD_DECLARE_CLASS(QWindow)
QT_BEGIN_NAMESPACE_AM
@@ -60,7 +60,7 @@ class TouchEmulationX11 : public TouchEmulation, public QAbstractNativeEventFilt
{
public:
TouchEmulationX11();
- bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override;
+ bool nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result) override;
private:
void queryForXInput2();
@@ -72,7 +72,7 @@ private:
void backupEventData(void *event);
void restoreEventData(void *event);
- QTouchDevice *m_touchDevice = nullptr;
+ QPointingDevice *m_touchDevice = nullptr;
bool m_haveXInput2 = false;
bool m_leftButtonIsPressed = false;
diff --git a/src/window-lib/waylandqtamserverextension.cpp b/src/window-lib/waylandqtamserverextension.cpp
index f09e7110..58716398 100644
--- a/src/window-lib/waylandqtamserverextension.cpp
+++ b/src/window-lib/waylandqtamserverextension.cpp
@@ -42,6 +42,7 @@
#include "waylandqtamserverextension_p.h"
+#include <QDataStream>
#include <QtWaylandCompositor/QWaylandCompositor>
#include <QtWaylandCompositor/QWaylandResource>
#include <QtWaylandCompositor/QWaylandSurface>
@@ -64,7 +65,7 @@ void WaylandQtAMServerExtension::setWindowProperty(QWaylandSurface *surface, con
{
if (setWindowPropertyHelper(surface, name, value)) {
QByteArray byteValue;
- QDataStream ds(&byteValue, QIODevice::WriteOnly);
+ QDataStream ds(&byteValue, QDataStream::WriteOnly);
ds << value;
Resource *target = resourceMap().value(surface->waylandClient());
diff --git a/src/window-lib/window-lib.pro b/src/window-lib/window-lib.pro
index 918bbe34..f14738fc 100644
--- a/src/window-lib/window-lib.pro
+++ b/src/window-lib/window-lib.pro
@@ -36,6 +36,8 @@ multi-process:!headless {
CONFIG *= wayland-scanner generated_privates
private_headers.CONFIG += no_check_exists
+
+ PKGCONFIG += wayland-server
}
!headless:HEADERS += \
diff --git a/src/window-lib/windowitem.cpp b/src/window-lib/windowitem.cpp
index c4ec5ff4..ad456ea0 100644
--- a/src/window-lib/windowitem.cpp
+++ b/src/window-lib/windowitem.cpp
@@ -226,7 +226,7 @@ void WindowItem::createImpl(bool inProcess)
#endif // AM_MULTI_PROCESS
}
-void WindowItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
+void WindowItem::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry)
{
m_contentItem->setWidth(newGeometry.width());
m_contentItem->setHeight(newGeometry.height());
@@ -234,7 +234,7 @@ void WindowItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeo
if (m_impl && newGeometry.isValid())
m_impl->updateSize(newGeometry.size());
- QQuickItem::geometryChanged(newGeometry, oldGeometry);
+ QQuickItem::geometryChange(newGeometry, oldGeometry);
}
bool WindowItem::primary() const
@@ -418,8 +418,6 @@ void WindowItem::WaylandImpl::createWaylandItem()
{
m_waylandItem = new QWaylandQuickItem(q);
- m_waylandItem->setSizeFollowsSurface(false);
-
connect(m_waylandItem, &QWaylandQuickItem::surfaceDestroyed, q, [this]() {
// keep the buffer there to allow us to animate the window destruction
m_waylandItem->setBufferLocked(true);
diff --git a/src/window-lib/windowitem.h b/src/window-lib/windowitem.h
index 3d7524ee..d6712070 100644
--- a/src/window-lib/windowitem.h
+++ b/src/window-lib/windowitem.h
@@ -93,7 +93,7 @@ public:
static void contentItemData_clear(QQmlListProperty<QObject> *property);
protected:
- void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override;
+ void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override;
signals:
void windowChanged();
void primaryChanged();
diff --git a/tests/configuration/tst_configuration.cpp b/tests/configuration/tst_configuration.cpp
index e12948ee..0d3b81a8 100644
--- a/tests/configuration/tst_configuration.cpp
+++ b/tests/configuration/tst_configuration.cpp
@@ -106,17 +106,17 @@ void tst_Configuration::defaultConfig()
QCOMPARE(c.dltDescription(), qSL(""));
QCOMPARE(c.resources(), {});
- QCOMPARE(c.openGLConfiguration(), {});
+ QCOMPARE(c.openGLConfiguration(), QVariantMap {});
QCOMPARE(c.installationLocations(), {});
QCOMPARE(c.containerSelectionConfiguration(), {});
- QCOMPARE(c.containerConfigurations(), {});
- QCOMPARE(c.runtimeConfigurations(), {});
+ QCOMPARE(c.containerConfigurations(), QVariantMap {});
+ QCOMPARE(c.runtimeConfigurations(), QVariantMap {});
QCOMPARE(c.dbusRegistration("iface1"), qSL("auto"));
- QCOMPARE(c.rawSystemProperties(), {});
+ QCOMPARE(c.rawSystemProperties(), QVariantMap {});
QCOMPARE(c.quickLaunchIdleLoad(), qreal(0));
QCOMPARE(c.quickLaunchRuntimesPerContainer(), 0);
@@ -131,7 +131,7 @@ void tst_Configuration::defaultConfig()
QCOMPARE(c.waylandSocketName(), defaultWaylandSocketName);
QCOMPARE(c.waylandExtraSockets(), {});
- QCOMPARE(c.managerCrashAction(), {});
+ QCOMPARE(c.managerCrashAction(), QVariantMap {});
QCOMPARE(c.caCertificates(), {});
@@ -491,17 +491,17 @@ void tst_Configuration::commandLineConfig()
QCOMPARE(c.dltDescription(), qSL(""));
QCOMPARE(c.resources(), {});
- QCOMPARE(c.openGLConfiguration(), {});
+ QCOMPARE(c.openGLConfiguration(), QVariantMap {});
QCOMPARE(c.installationLocations(), {});
QCOMPARE(c.containerSelectionConfiguration(), {});
- QCOMPARE(c.containerConfigurations(), {});
- QCOMPARE(c.runtimeConfigurations(), {});
+ QCOMPARE(c.containerConfigurations(), QVariantMap{});
+ QCOMPARE(c.runtimeConfigurations(), QVariantMap{});
QCOMPARE(c.dbusRegistration("iface1"), qSL("system"));
- QCOMPARE(c.rawSystemProperties(), {});
+ QCOMPARE(c.rawSystemProperties(), QVariantMap {});
QCOMPARE(c.quickLaunchIdleLoad(), qreal(0));
QCOMPARE(c.quickLaunchRuntimesPerContainer(), 0);
@@ -509,7 +509,7 @@ void tst_Configuration::commandLineConfig()
QCOMPARE(c.waylandSocketName(), qSL("wlsock-1"));
QCOMPARE(c.waylandExtraSockets(), {});
- QCOMPARE(c.managerCrashAction(), {});
+ QCOMPARE(c.managerCrashAction(), QVariantMap {});
QCOMPARE(c.caCertificates(), {});
diff --git a/tests/main/tst_main.cpp b/tests/main/tst_main.cpp
index a27222ad..bccd62b1 100644
--- a/tests/main/tst_main.cpp
+++ b/tests/main/tst_main.cpp
@@ -79,12 +79,13 @@ private:
tst_Main::tst_Main()
{
- argc = 3;
+ argc = 4;
argv = new char*[argc + 1];
argv[0] = qstrdup("tst_Main");
argv[1] = qstrdup("--dbus");
argv[2] = qstrdup("none");
- argv[3] = nullptr;
+ argv[3] = qstrdup("--no-cache");
+ argv[4] = nullptr;
}
tst_Main::~tst_Main()
diff --git a/tests/qml/resources/test.pro b/tests/qml/resources/test.pro
index fd145a2e..3553c02a 100644
--- a/tests/qml/resources/test.pro
+++ b/tests/qml/resources/test.pro
@@ -2,7 +2,7 @@ AM_CONFIG = am-config.yaml
TEST_FILES = tst_resource.qml
TEST_APPS = app1 app2
-DIRECTORIES = apps/app2/qml
+DIRECTORIES = apps/app2/qml relative
FILES = am-config.yaml \
apps/app1/icon.png apps/app1/info.yaml \
apps/app2/icon.png apps/app2/info.yaml