From 911ee1f92017f22f9aa1fd430b414ff28c7e0cbe Mon Sep 17 00:00:00 2001 From: Robert Griebl Date: Wed, 18 Nov 2020 14:39:33 +0100 Subject: 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 --- .qmake.conf | 2 +- .../Application/plugins.qmltypes | 2 +- .../QtApplicationManager/SystemUI/plugins.qmltypes | 2 +- qmltypes/QtApplicationManager/plugins.qmltypes | 2 +- src/application-lib/packageinfo.cpp | 4 +-- src/common-lib/common-lib.pro | 1 - src/common-lib/configcache.cpp | 11 ++++---- src/common-lib/error.h | 8 ++++-- src/common-lib/exception.cpp | 2 +- src/common-lib/exception.h | 8 +----- src/common-lib/qml-utilities.cpp | 7 +++-- src/common-lib/qtyaml.cpp | 15 +++++----- src/common-lib/utilities.cpp | 2 +- src/common-lib/utilities.h | 6 ++++ src/dbus-lib/dbusdaemon.cpp | 16 +++++------ src/dbus-lib/dbusdaemon.h | 3 -- src/intent-server-lib/intent.cpp | 2 +- .../intentclientdbusimplementation.cpp | 6 ++-- src/launcher-lib/ipcwrapperobject.cpp | 12 ++++---- src/launcher-lib/launcher-lib.pro | 2 ++ src/launcher-lib/waylandqtamclientextension.cpp | 2 +- src/main-lib/main.cpp | 7 +++-- src/manager-lib/application.cpp | 4 +++ src/manager-lib/application.h | 6 +++- src/manager-lib/applicationipcinterface.cpp | 8 ++---- src/manager-lib/applicationmanager.cpp | 3 +- src/manager-lib/intentaminterface.cpp | 7 ++--- src/manager-lib/nativeruntime.cpp | 2 +- src/manager-lib/processcontainer.cpp | 32 ++++++++-------------- src/manager-lib/processcontainer.h | 6 ++-- .../qmlinprocessapplicationmanagerwindow.cpp | 2 +- src/manager-lib/qmlinprocessruntime.cpp | 3 +- src/manager-lib/sudo.cpp | 12 ++++---- src/package-lib/packageextractor.cpp | 1 - src/package-lib/packageutilities.cpp | 4 +-- src/shared-main-lib/sharedmain.cpp | 4 --- src/tools/controller/controller.cpp | 2 +- src/tools/dumpqmltypes/dumpqmltypes.cpp | 2 +- src/tools/launcher-qml/launcher-qml.cpp | 1 - src/tools/packager/packagingjob.cpp | 1 - src/tools/testrunner/amtest.cpp | 7 ++--- src/tools/testrunner/amtest.h | 2 +- src/tools/testrunner/testrunner.cpp | 2 +- src/tools/testrunner/testrunner.h | 2 +- src/tools/testrunner/testrunner.pro | 2 +- src/window-lib/touchemulation.cpp | 11 ++++++++ src/window-lib/touchemulation.h | 1 + src/window-lib/touchemulation_x11.cpp | 17 ++++++++---- src/window-lib/touchemulation_x11_p.h | 6 ++-- src/window-lib/waylandqtamserverextension.cpp | 3 +- src/window-lib/window-lib.pro | 2 ++ src/window-lib/windowitem.cpp | 6 ++-- src/window-lib/windowitem.h | 2 +- tests/configuration/tst_configuration.cpp | 20 +++++++------- tests/main/tst_main.cpp | 5 ++-- tests/qml/resources/test.pro | 2 +- 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 QtPrivate::QEnableIf::Value, Exception>::Type & + template typename std::enable_if::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>(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 #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(v.type())) { case QVariant::List: { - QVariantList *list = v_cast(&v.data_ptr()); + QVariantList *list = qt6_v_cast(&v.data_ptr()); fixNullValuesForQml(*list); break; } case QVariant::Map: { - QVariantMap *map = v_cast(&v.data_ptr()); + QVariantMap *map = qt6_v_cast(&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 #include #include -#include #include #include @@ -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(d->event.data.scalar.length) >= 0); - return QTextDecoder(d->codec).toUnicode(reinterpret_cast(d->event.data.scalar.value), - static_cast(d->event.data.scalar.length)); + return QString::fromUtf8(reinterpret_cast(d->event.data.scalar.value), + static_cast(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(&toValue.data_ptr()), fromValue.toMap()); + recursiveMergeMap(qt6_v_cast(&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 T *qt6_v_cast(QVariant::Private *vp) +{ + return static_cast(const_cast(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 ¶meters) 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 ¶meters) { - 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()) 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()) valueType = QMetaType::QVariant; - QVariant value(valueType, _a[0]); + QVariant value(QMetaType(valueType), _a[0]); value = convertFromJSVariant(value); if (mp.userType() == qMetaTypeId()) { QDBusVariant dbv = QDBusVariant(value); @@ -316,7 +316,7 @@ int IpcWrapperObject::qt_metacall(QMetaObject::Call _c, int _id, void **_a) QList 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 # include # include -# include +# include # include # include #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 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 #include +#include #include #include #include @@ -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 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 &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 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(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 #include #include +#include #if !defined(AM_HEADLESS) # include @@ -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 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 #include #include -#include #include #include #include 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 #include #include -#include #include #include #include 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 #include #include -#include +#include #include #include 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 +#include -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 #include +#include #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 #include -#include +#include #include #include @@ -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 #include -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 #include #include #include @@ -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 *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 -- cgit v1.2.3