From 415e4f50ffeb4bc38ee2a385f1d5575268f637ee Mon Sep 17 00:00:00 2001 From: Jan Grulich Date: May 17 2022 06:21:19 +0000 Subject: 5.15.4 --- diff --git a/.gitignore b/.gitignore index 80cf9dd..156d39b 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ /qtdeclarative-everywhere-src-5.15.1.tar.xz /qtdeclarative-everywhere-src-5.15.2.tar.xz /qtdeclarative-everywhere-opensource-src-5.15.3.tar.xz +/qtdeclarative-everywhere-opensource-src-5.15.4.tar.xz diff --git a/0001-Give-a-warning-when-StyledText-encounters-a-non-supp.patch b/0001-Give-a-warning-when-StyledText-encounters-a-non-supp.patch index 0938eff..e62143d 100644 --- a/0001-Give-a-warning-when-StyledText-encounters-a-non-supp.patch +++ b/0001-Give-a-warning-when-StyledText-encounters-a-non-supp.patch @@ -1,7 +1,7 @@ -From a6ec2f93dba2a3e4ac07332c5adf4456348bf4a1 Mon Sep 17 00:00:00 2001 +From eb1025d7808f04e3f114b08c86a5e680b2d18010 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Fri, 21 May 2021 13:30:41 +0200 -Subject: [PATCH 01/20] Give a warning when StyledText encounters a non +Subject: [PATCH 01/17] Give a warning when StyledText encounters a non supported entity Pick-to: 6.1 5.15 @@ -35,5 +35,5 @@ index 660852ba83..d531fc9205 100644 } else if (*ch == QLatin1Char(' ')) { QStringRef entity(&textIn, entityStart - 1, entityLength + 1); -- -2.35.1 +2.36.1 diff --git a/0002-Add-missing-limits-include-to-fix-build-with-GCC-11.patch b/0002-Add-missing-limits-include-to-fix-build-with-GCC-11.patch index 3f536b6..9cbde88 100644 --- a/0002-Add-missing-limits-include-to-fix-build-with-GCC-11.patch +++ b/0002-Add-missing-limits-include-to-fix-build-with-GCC-11.patch @@ -1,7 +1,7 @@ -From 0eb5ff2e97713e12318c00bab9f3605abb8592c2 Mon Sep 17 00:00:00 2001 +From ba07a40a2afacfb57ddb8f7cb4cc90a39560f17d Mon Sep 17 00:00:00 2001 From: Antonio Rojas Date: Sun, 23 May 2021 14:32:46 +0200 -Subject: [PATCH 02/20] Add missing limits include to fix build with GCC 11 +Subject: [PATCH 02/17] Add missing limits include to fix build with GCC 11 This is not required for Qt 6, since it is indirectly pulled via qanystrigview.h, but it is for Qt 5 (where qanystrigview does @@ -29,5 +29,5 @@ index a7e37d1964..01b2f58f16 100644 // -- -2.35.1 +2.36.1 diff --git a/0003-Document-that-StyledText-also-supports-nbsp-and-quot.patch b/0003-Document-that-StyledText-also-supports-nbsp-and-quot.patch index c8504d4..4faca37 100644 --- a/0003-Document-that-StyledText-also-supports-nbsp-and-quot.patch +++ b/0003-Document-that-StyledText-also-supports-nbsp-and-quot.patch @@ -1,7 +1,7 @@ -From 45621c00cae6b108b412e63388588be8bc4ccc44 Mon Sep 17 00:00:00 2001 +From eb9ebe3815ac100d4ab3b3a708f691a1dde270bf Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Fri, 21 May 2021 13:17:15 +0200 -Subject: [PATCH 03/20] Document that StyledText also supports   and +Subject: [PATCH 03/17] Document that StyledText also supports   and " Change-Id: I1715f8ae8ec8d0fbaf6dbe2b8663cc169da663cd @@ -12,7 +12,7 @@ Reviewed-by: Fabian Kosmale 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp -index b18d03a20a..43c29d1f58 100644 +index 6230186933..c1571fc6f5 100644 --- a/src/quick/items/qquicktext.cpp +++ b/src/quick/items/qquicktext.cpp @@ -2168,7 +2168,7 @@ void QQuickText::resetMaximumLineCount() @@ -25,5 +25,5 @@ index b18d03a20a..43c29d1f58 100644 \c Text.StyledText parser is strict, requiring tags to be correctly nested. -- -2.35.1 +2.36.1 diff --git a/0004-Support-apos-in-styled-text.patch b/0004-Support-apos-in-styled-text.patch index 4266211..a7b3a7f 100644 --- a/0004-Support-apos-in-styled-text.patch +++ b/0004-Support-apos-in-styled-text.patch @@ -1,7 +1,7 @@ -From bac7823a97ab901abc8da392ba23747feac4c933 Mon Sep 17 00:00:00 2001 +From 0aea240ef6d78989ef16ea1d41e161c641c2667c Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Fri, 21 May 2021 13:42:35 +0200 -Subject: [PATCH 04/20] Support ' in styled text +Subject: [PATCH 04/17] Support ' in styled text Pick-to: 6.1 5.15 Change-Id: I4a8db963e52a7899ab1796f9a560e8029cc1c929 @@ -14,7 +14,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp -index 43c29d1f58..459dea8f74 100644 +index c1571fc6f5..e823ca1095 100644 --- a/src/quick/items/qquicktext.cpp +++ b/src/quick/items/qquicktext.cpp @@ -2168,7 +2168,7 @@ void QQuickText::resetMaximumLineCount() @@ -40,5 +40,5 @@ index d531fc9205..a25af90414 100644 textOut += QChar(34); else if (entity == QLatin1String("nbsp")) -- -2.35.1 +2.36.1 diff --git a/0005-Remove-unused-QPointer-QQuickPointerMask.patch b/0005-Remove-unused-QPointer-QQuickPointerMask.patch index d6829af..349cece 100644 --- a/0005-Remove-unused-QPointer-QQuickPointerMask.patch +++ b/0005-Remove-unused-QPointer-QQuickPointerMask.patch @@ -1,7 +1,7 @@ -From d7d355175aa1e625e5b59b4494e37aeac9c849d5 Mon Sep 17 00:00:00 2001 +From bdf7658d89e1df55ded318432d4412dbf1d5d0f9 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Thu, 17 Jun 2021 16:32:28 +0200 -Subject: [PATCH 05/20] Remove unused QPointer +Subject: [PATCH 05/17] Remove unused QPointer Change-Id: I009fa6bbd8599dc3bb2e810176fe20e70ed50851 Reviewed-by: Shawn Rutledge @@ -31,5 +31,5 @@ index fba383e268..0d63618622 100644 QPointF targetStartPos; QPointF lastPos; -- -2.35.1 +2.36.1 diff --git a/0006-Include-limits-in-Yarr.h-to-fix-build-with-GCC-11.patch b/0006-Include-limits-in-Yarr.h-to-fix-build-with-GCC-11.patch index 4620652..001fb3c 100644 --- a/0006-Include-limits-in-Yarr.h-to-fix-build-with-GCC-11.patch +++ b/0006-Include-limits-in-Yarr.h-to-fix-build-with-GCC-11.patch @@ -1,7 +1,7 @@ -From 3c42d4d3dce95b67d65541c5612384eab0c3e27b Mon Sep 17 00:00:00 2001 +From 8da88589929a1d82103c8bbfa80210f3c1af3714 Mon Sep 17 00:00:00 2001 From: Dmitry Shachnev Date: Wed, 18 Aug 2021 22:50:29 +0300 -Subject: [PATCH 06/20] Include in Yarr.h to fix build with GCC 11 +Subject: [PATCH 06/17] Include in Yarr.h to fix build with GCC 11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -39,5 +39,5 @@ index ccf78f9880..2955ea7e72 100644 namespace JSC { namespace Yarr { -- -2.35.1 +2.36.1 diff --git a/0007-QQuickLoader-Do-not-incubate-if-the-source-arrives-a.patch b/0007-QQuickLoader-Do-not-incubate-if-the-source-arrives-a.patch index 7e183b0..61d49ca 100644 --- a/0007-QQuickLoader-Do-not-incubate-if-the-source-arrives-a.patch +++ b/0007-QQuickLoader-Do-not-incubate-if-the-source-arrives-a.patch @@ -1,7 +1,7 @@ -From 31179b578276f10841fcb60a876ea757f9ca82ff Mon Sep 17 00:00:00 2001 +From 103503f1cae9e928a4fa8b5e7e1f7af34f1add4d Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Tue, 21 Sep 2021 00:10:26 +0200 -Subject: [PATCH 07/20] QQuickLoader: Do not incubate if the source arrives +Subject: [PATCH 07/17] QQuickLoader: Do not incubate if the source arrives after setActive(false) Otherwise we end up in the crazy place of active being false but item @@ -108,5 +108,5 @@ index 0f6c811adb..dddacbaa0b 100644 #include "tst_qquickloader.moc" -- -2.35.1 +2.36.1 diff --git a/0008-QQmlDelegateModel-Refresh-the-view-when-a-column-is-.patch b/0008-QQmlDelegateModel-Refresh-the-view-when-a-column-is-.patch index 676a7fc..fe05a8e 100644 --- a/0008-QQmlDelegateModel-Refresh-the-view-when-a-column-is-.patch +++ b/0008-QQmlDelegateModel-Refresh-the-view-when-a-column-is-.patch @@ -1,7 +1,7 @@ -From 4fd8f31beb6ce07207cc8e934c7f4caa6abd8a54 Mon Sep 17 00:00:00 2001 +From 0fdd8a998075a8b52954724743d3a04c105c6ce2 Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Thu, 23 Sep 2021 03:43:04 +0200 -Subject: [PATCH 08/20] QQmlDelegateModel: Refresh the view when a column is +Subject: [PATCH 08/17] QQmlDelegateModel: Refresh the view when a column is added at 0 It can happen that a model reports n>0 rows but columns=0 (See @@ -17,13 +17,12 @@ Signed-off-by: Aleix Pol src/qmlmodels/qqmldelegatemodel.cpp | 44 +++++++++++++++++++ src/qmlmodels/qqmldelegatemodel_p.h | 3 ++ .../data/redrawUponColumnChange.qml | 11 +++++ - .../qqmldelegatemodel/qqmldelegatemodel.pro | 2 +- - .../tst_qqmldelegatemodel.cpp | 29 ++++++++++++ - 5 files changed, 88 insertions(+), 1 deletion(-) + .../tst_qqmldelegatemodel.cpp | 27 ++++++++++++ + 4 files changed, 85 insertions(+) create mode 100644 tests/auto/qml/qqmldelegatemodel/data/redrawUponColumnChange.qml diff --git a/src/qmlmodels/qqmldelegatemodel.cpp b/src/qmlmodels/qqmldelegatemodel.cpp -index e6aff955fe..381726291d 100644 +index 26ded63c41..53e511303e 100644 --- a/src/qmlmodels/qqmldelegatemodel.cpp +++ b/src/qmlmodels/qqmldelegatemodel.cpp @@ -389,6 +389,12 @@ void QQmlDelegateModelPrivate::connectToAbstractItemModel() @@ -122,24 +121,11 @@ index 0000000000..206133bb39 + text: display + } +} -diff --git a/tests/auto/qml/qqmldelegatemodel/qqmldelegatemodel.pro b/tests/auto/qml/qqmldelegatemodel/qqmldelegatemodel.pro -index 7fdd3ab5f1..fbd72f6a44 100644 ---- a/tests/auto/qml/qqmldelegatemodel/qqmldelegatemodel.pro -+++ b/tests/auto/qml/qqmldelegatemodel/qqmldelegatemodel.pro -@@ -2,7 +2,7 @@ CONFIG += testcase - TARGET = tst_qqmldelegatemodel - macos:CONFIG -= app_bundle - --QT += qml testlib core-private qml-private qmlmodels-private -+QT += qml quick testlib core-private qml-private qmlmodels-private - - SOURCES += tst_qqmldelegatemodel.cpp - diff --git a/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp b/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp -index 87f42c0c8a..1d338ac330 100644 +index 71550a50f3..4c1eae7ac7 100644 --- a/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp +++ b/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp -@@ -27,8 +27,12 @@ +@@ -27,6 +27,8 @@ ****************************************************************************/ #include @@ -147,21 +133,17 @@ index 87f42c0c8a..1d338ac330 100644 +#include #include #include -+#include -+#include - - #include "../../shared/util.h" - -@@ -42,6 +46,7 @@ public: - private slots: + #include +@@ -45,6 +47,7 @@ private slots: void valueWithoutCallingObjectFirst_data(); void valueWithoutCallingObjectFirst(); + void filterOnGroup_removeWhenCompleted(); + void redrawUponColumnChange(); }; class AbstractItemModel : public QAbstractItemModel -@@ -134,6 +139,30 @@ void tst_QQmlDelegateModel::valueWithoutCallingObjectFirst() - QCOMPARE(model->variantValue(index, role), expectedValue); +@@ -149,6 +152,30 @@ void tst_QQmlDelegateModel::filterOnGroup_removeWhenCompleted() + QTest::qWaitFor([=]{ return model->count() == 2; } ); } +void tst_QQmlDelegateModel::redrawUponColumnChange() @@ -192,5 +174,5 @@ index 87f42c0c8a..1d338ac330 100644 #include "tst_qqmldelegatemodel.moc" -- -2.35.1 +2.36.1 diff --git a/0009-Fix-sweep-step-for-tainted-QObject-JavaScript-wrappe.patch b/0009-Fix-sweep-step-for-tainted-QObject-JavaScript-wrappe.patch index b847a54..1cb2349 100644 --- a/0009-Fix-sweep-step-for-tainted-QObject-JavaScript-wrappe.patch +++ b/0009-Fix-sweep-step-for-tainted-QObject-JavaScript-wrappe.patch @@ -1,7 +1,7 @@ -From 00dd37619f35db3cddb2ac59198d3bde7ce73cd7 Mon Sep 17 00:00:00 2001 +From f2d1bfa96bedb09c27f52a802b03cbefb17a0257 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Sun, 10 Oct 2021 21:04:21 +0300 -Subject: [PATCH 09/20] Fix sweep step for tainted QObject JavaScript wrappers +Subject: [PATCH 09/17] Fix sweep step for tainted QObject JavaScript wrappers Currently, whenever the garbage collector runs, it will destroy all valid tainted wrappers. @@ -115,5 +115,5 @@ index 5d635aa63b..824fd89e5b 100644 // engine2 doesn't own the object as engine1 was the first to wrap it above. // Therefore, no effect here. -- -2.35.1 +2.36.1 diff --git a/0010-Fix-distorted-text-with-subpixel-matrix-translation.patch b/0010-Fix-distorted-text-with-subpixel-matrix-translation.patch index 1d4751d..64d1f69 100644 --- a/0010-Fix-distorted-text-with-subpixel-matrix-translation.patch +++ b/0010-Fix-distorted-text-with-subpixel-matrix-translation.patch @@ -1,7 +1,7 @@ -From 55f07163f84badcc9aa0805f1523ef43a7225778 Mon Sep 17 00:00:00 2001 +From b884339e8b6dd8dcaed9704afda2ebed4fcaf9b5 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 12 Oct 2021 13:13:01 +0200 -Subject: [PATCH 10/20] Fix distorted text with subpixel matrix translation +Subject: [PATCH 10/17] Fix distorted text with subpixel matrix translation We would pixel-align native text *before* applying the model-view matrix, which would cause GL_NEAREST artifacts to @@ -479,5 +479,5 @@ index 0000000000..c60fc4d8b0 + } +} -- -2.35.1 +2.36.1 diff --git a/0011-Revert-Fix-for-possible-crash-in-QSGDefaultLayer-gra.patch b/0011-Revert-Fix-for-possible-crash-in-QSGDefaultLayer-gra.patch index 6e0c782..b234f3e 100644 --- a/0011-Revert-Fix-for-possible-crash-in-QSGDefaultLayer-gra.patch +++ b/0011-Revert-Fix-for-possible-crash-in-QSGDefaultLayer-gra.patch @@ -1,7 +1,7 @@ -From ffa77919e72951c7accf84ad09dc669d166aedf8 Mon Sep 17 00:00:00 2001 +From 8b0a4b1a329010e056b19fdd9940bad2036b5f57 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Mon, 11 Oct 2021 15:37:33 +0200 -Subject: [PATCH 11/20] Revert "Fix for possible crash in +Subject: [PATCH 11/17] Revert "Fix for possible crash in QSGDefaultLayer::grab" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 @@ -67,5 +67,5 @@ index 4deb6c70a3..c0a1ccab78 100644 protected: void releaseResources() override; -- -2.35.1 +2.36.1 diff --git a/0012-Fix-TapHandler-so-that-it-actually-registers-a-tap.patch b/0012-Fix-TapHandler-so-that-it-actually-registers-a-tap.patch new file mode 100644 index 0000000..fd72833 --- /dev/null +++ b/0012-Fix-TapHandler-so-that-it-actually-registers-a-tap.patch @@ -0,0 +1,73 @@ +From 0e201d3561cecc8a1e982f81095f14af1dc3ceca Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan=20Arve=20S=C3=A6ther?= +Date: Thu, 3 Sep 2020 10:51:01 +0200 +Subject: [PATCH 12/17] Fix TapHandler so that it actually registers a tap + +This bug caused all quick examples that used the +shared\LauncherList.qml to be broken. + +In QtGui, QSinglePointEvent will construct itself with a point id of 0 +if there is a valid point, and with a point id of -1 if the point is +invalid (the default constructor does the latter). +However, QQuickSinglePointHandler::wantsPointerEvent() did not agree +with that, because it assumed that a point id of 0 meant +uninitialized/invalid point. +The fix is to change QQuickSinglePointHandler::wantsPointerEvent() and +QQuickHandlerPoint so that it assumes that the id -1 is now an invalid +point, (instead of 0) + +Change-Id: I8c9683dfe06ebb77c5342a26f08174b67e7cbd90 +Reviewed-by: Shawn Rutledge +(cherry picked from commit 8d3a91016506fd0afedb0be535f7c34a4ca762f6) +--- + src/quick/handlers/qquickhandlerpoint.cpp | 4 ++-- + src/quick/handlers/qquicksinglepointhandler.cpp | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/quick/handlers/qquickhandlerpoint.cpp b/src/quick/handlers/qquickhandlerpoint.cpp +index 72efdfd0f4..6aef3545dd 100644 +--- a/src/quick/handlers/qquickhandlerpoint.cpp ++++ b/src/quick/handlers/qquickhandlerpoint.cpp +@@ -82,7 +82,7 @@ void QQuickHandlerPoint::localize(QQuickItem *item) + + void QQuickHandlerPoint::reset() + { +- m_id = 0; ++ m_id = -1; + m_uniqueId = QPointingDeviceUniqueId(); + m_position = QPointF(); + m_scenePosition = QPointF(); +@@ -165,7 +165,7 @@ void QQuickHandlerPoint::reset(const QVector &points) + pressureSum += point.pressure(); + ellipseDiameterSum += point.ellipseDiameters(); + } +- m_id = 0; ++ m_id = -1; + m_uniqueId = QPointingDeviceUniqueId(); + // all points are required to be from the same event, so pressed buttons and modifiers should be the same + m_pressedButtons = points.first().pressedButtons(); +diff --git a/src/quick/handlers/qquicksinglepointhandler.cpp b/src/quick/handlers/qquicksinglepointhandler.cpp +index b51f53b74f..89081b4e84 100644 +--- a/src/quick/handlers/qquicksinglepointhandler.cpp ++++ b/src/quick/handlers/qquicksinglepointhandler.cpp +@@ -75,7 +75,7 @@ bool QQuickSinglePointHandler::wantsPointerEvent(QQuickPointerEvent *event) + if (!QQuickPointerDeviceHandler::wantsPointerEvent(event)) + return false; + +- if (d->pointInfo.id()) { ++ if (d->pointInfo.id() != -1) { + // We already know which one we want, so check whether it's there. + // It's expected to be an update or a release. + // If we no longer want it, cancel the grab. +@@ -125,7 +125,7 @@ bool QQuickSinglePointHandler::wantsPointerEvent(QQuickPointerEvent *event) + chosen->setAccepted(); + } + } +- return d->pointInfo.id(); ++ return d->pointInfo.id() != -1; + } + + void QQuickSinglePointHandler::handlePointerEventImpl(QQuickPointerEvent *event) +-- +2.36.1 + diff --git a/0012-QQuickItemAnimation-close-potential-memory-leak.patch b/0012-QQuickItemAnimation-close-potential-memory-leak.patch deleted file mode 100644 index 091542f..0000000 --- a/0012-QQuickItemAnimation-close-potential-memory-leak.patch +++ /dev/null @@ -1,58 +0,0 @@ -From c3804f86e0a75c0c8402127a5b01bc7a858e6492 Mon Sep 17 00:00:00 2001 -From: Volker Hilsheimer -Date: Wed, 17 Mar 2021 16:52:21 +0100 -Subject: [PATCH 12/20] QQuickItemAnimation: close potential memory leak - -Fix static analyzer warning bff6cb4333f531d5a72f7bf6dc1485f6. - -If ownership of viaData is not passed to the viaAction, then the object -might be leaked. Use std::unique_ptr to make ownership transfer explicit -and implicitly delete unowned objects. - -Pick-to: 6.1 5.15 -Change-Id: I89f2a6b630941a98a74db302bc1ab08055c71974 -Reviewed-by: Ulf Hermann -(cherry picked from commit 78aea267209c34abeb4895712dc76c923aa46165) ---- - src/quick/items/qquickitemanimation.cpp | 11 ++++------- - 1 file changed, 4 insertions(+), 7 deletions(-) - -diff --git a/src/quick/items/qquickitemanimation.cpp b/src/quick/items/qquickitemanimation.cpp -index 23694e2de3..dfb56ccc00 100644 ---- a/src/quick/items/qquickitemanimation.cpp -+++ b/src/quick/items/qquickitemanimation.cpp -@@ -230,8 +230,8 @@ QAbstractAnimationJob* QQuickParentAnimation::transition(QQuickStateActions &act - { - Q_D(QQuickParentAnimation); - -- QQuickParentAnimationData *data = new QQuickParentAnimationData; -- QQuickParentAnimationData *viaData = new QQuickParentAnimationData; -+ std::unique_ptr data(new QQuickParentAnimationData); -+ std::unique_ptr viaData(new QQuickParentAnimationData); - - bool hasExplicit = false; - if (d->target && d->newParent) { -@@ -377,8 +377,8 @@ QAbstractAnimationJob* QQuickParentAnimation::transition(QQuickStateActions &act - QParallelAnimationGroupJob *ag = new QParallelAnimationGroupJob; - - if (d->via) -- viaAction->setAnimAction(viaData); -- targetAction->setAnimAction(data); -+ viaAction->setAnimAction(viaData.release()); -+ targetAction->setAnimAction(data.release()); - - //take care of any child animations - bool valid = d->defaultProperty.isValid(); -@@ -405,9 +405,6 @@ QAbstractAnimationJob* QQuickParentAnimation::transition(QQuickStateActions &act - topLevelGroup->appendAnimation(d->via ? viaAction : targetAction); - } - return initInstance(topLevelGroup); -- } else { -- delete data; -- delete viaData; - } - return nullptr; - } --- -2.35.1 - diff --git a/0013-Revert-Fix-TapHandler-so-that-it-actually-registers-.patch b/0013-Revert-Fix-TapHandler-so-that-it-actually-registers-.patch new file mode 100644 index 0000000..b6374af --- /dev/null +++ b/0013-Revert-Fix-TapHandler-so-that-it-actually-registers-.patch @@ -0,0 +1,61 @@ +From 5af400361da5d66427c68bf743c8def70b7cbc8e Mon Sep 17 00:00:00 2001 +From: Albert Astals Cid +Date: Tue, 16 Nov 2021 22:43:37 +0100 +Subject: [PATCH 13/17] Revert "Fix TapHandler so that it actually registers a + tap" + +This reverts commit 36e8ccd434f948e4f11a8f9d59139ec072e41ff5. + +It's causing regresions +--- + src/quick/handlers/qquickhandlerpoint.cpp | 4 ++-- + src/quick/handlers/qquicksinglepointhandler.cpp | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/quick/handlers/qquickhandlerpoint.cpp b/src/quick/handlers/qquickhandlerpoint.cpp +index 6aef3545dd..72efdfd0f4 100644 +--- a/src/quick/handlers/qquickhandlerpoint.cpp ++++ b/src/quick/handlers/qquickhandlerpoint.cpp +@@ -82,7 +82,7 @@ void QQuickHandlerPoint::localize(QQuickItem *item) + + void QQuickHandlerPoint::reset() + { +- m_id = -1; ++ m_id = 0; + m_uniqueId = QPointingDeviceUniqueId(); + m_position = QPointF(); + m_scenePosition = QPointF(); +@@ -165,7 +165,7 @@ void QQuickHandlerPoint::reset(const QVector &points) + pressureSum += point.pressure(); + ellipseDiameterSum += point.ellipseDiameters(); + } +- m_id = -1; ++ m_id = 0; + m_uniqueId = QPointingDeviceUniqueId(); + // all points are required to be from the same event, so pressed buttons and modifiers should be the same + m_pressedButtons = points.first().pressedButtons(); +diff --git a/src/quick/handlers/qquicksinglepointhandler.cpp b/src/quick/handlers/qquicksinglepointhandler.cpp +index 89081b4e84..b51f53b74f 100644 +--- a/src/quick/handlers/qquicksinglepointhandler.cpp ++++ b/src/quick/handlers/qquicksinglepointhandler.cpp +@@ -75,7 +75,7 @@ bool QQuickSinglePointHandler::wantsPointerEvent(QQuickPointerEvent *event) + if (!QQuickPointerDeviceHandler::wantsPointerEvent(event)) + return false; + +- if (d->pointInfo.id() != -1) { ++ if (d->pointInfo.id()) { + // We already know which one we want, so check whether it's there. + // It's expected to be an update or a release. + // If we no longer want it, cancel the grab. +@@ -125,7 +125,7 @@ bool QQuickSinglePointHandler::wantsPointerEvent(QQuickPointerEvent *event) + chosen->setAccepted(); + } + } +- return d->pointInfo.id() != -1; ++ return d->pointInfo.id(); + } + + void QQuickSinglePointHandler::handlePointerEventImpl(QQuickPointerEvent *event) +-- +2.36.1 + diff --git a/0013-qqmldelegatemodel-Fix-out-of-bounds-cache-removal.patch b/0013-qqmldelegatemodel-Fix-out-of-bounds-cache-removal.patch deleted file mode 100644 index b0281dd..0000000 --- a/0013-qqmldelegatemodel-Fix-out-of-bounds-cache-removal.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 44ac7f39d874202163926f505a46179c084154b9 Mon Sep 17 00:00:00 2001 -From: Maximilian Goldstein -Date: Tue, 23 Feb 2021 16:10:44 +0100 -Subject: [PATCH 13/20] qqmldelegatemodel: Fix out of bounds cache removal - -Pick-to: 5.15 6.0 6.1 -Task-number: QTBUG-91276 -Change-Id: I1ddbb4a3326d61ff94e3881beb64a14dade11c46 -Reviewed-by: Ulf Hermann -(cherry picked from commit 31ad81d81e623a34cd71567b9507f16601f1c1d4) ---- - src/qmlmodels/qqmldelegatemodel.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/qmlmodels/qqmldelegatemodel.cpp b/src/qmlmodels/qqmldelegatemodel.cpp -index 381726291d..53e511303e 100644 ---- a/src/qmlmodels/qqmldelegatemodel.cpp -+++ b/src/qmlmodels/qqmldelegatemodel.cpp -@@ -1621,7 +1621,7 @@ void QQmlDelegateModelPrivate::itemsRemoved( - removed[i] = 0; - - for (const Compositor::Remove &remove : removes) { -- for (; cacheIndex < remove.cacheIndex; ++cacheIndex) -+ for (; cacheIndex < remove.cacheIndex && cacheIndex < m_cache.size(); ++cacheIndex) - incrementIndexes(m_cache.at(cacheIndex), m_groupCount, removed); - - for (int i = 1; i < m_groupCount; ++i) { --- -2.35.1 - diff --git a/0014-QQmlJs-FixedPoolArray-fix-UB-precondition-violation-.patch b/0014-QQmlJs-FixedPoolArray-fix-UB-precondition-violation-.patch new file mode 100644 index 0000000..fe52529 --- /dev/null +++ b/0014-QQmlJs-FixedPoolArray-fix-UB-precondition-violation-.patch @@ -0,0 +1,36 @@ +From 9a3aaa96c58d167ab9eec0d0c8105853e8c6117a Mon Sep 17 00:00:00 2001 +From: Marc Mutz +Date: Tue, 21 Dec 2021 09:20:17 +0100 +Subject: [PATCH 14/17] QQmlJs::FixedPoolArray: fix UB (precondition violation) + in allocate() + +Says ubsan: + + qqmljsfixedpoolarray_p.h:90:19: runtime error: null pointer passed as argument 2, which is declared to never be null + +Fix, like in so many other places, by a size check. + +Pick-to: 6.3 6.2 5.15 +Change-Id: I9181d6ecb467c2dc726978ce7f93b35a6bf2f944 +Reviewed-by: Lars Knoll +(cherry picked from commit d74e931f3fc2587ac6d1e2930acbbe54ea5be2b5) +--- + src/qml/common/qqmljsfixedpoolarray_p.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/qml/common/qqmljsfixedpoolarray_p.h b/src/qml/common/qqmljsfixedpoolarray_p.h +index b65b994d6c..15a8cd6878 100644 +--- a/src/qml/common/qqmljsfixedpoolarray_p.h ++++ b/src/qml/common/qqmljsfixedpoolarray_p.h +@@ -86,7 +86,7 @@ public: + if (QTypeInfo::isComplex) { + for (int i = 0; i < count; ++i) + new (data + i) T(vector.at(i)); +- } else { ++ } else if (count) { + memcpy(data, static_cast(vector.constData()), count * sizeof(T)); + } + } +-- +2.36.1 + diff --git a/0014-QQuickWindow-don-t-leak-old-screenChanged-connection.patch b/0014-QQuickWindow-don-t-leak-old-screenChanged-connection.patch deleted file mode 100644 index 2547f68..0000000 --- a/0014-QQuickWindow-don-t-leak-old-screenChanged-connection.patch +++ /dev/null @@ -1,50 +0,0 @@ -From f8f6b9d084decbad8ee90880493c413ac90c2911 Mon Sep 17 00:00:00 2001 -From: Andreas Hartmetz -Date: Fri, 5 Mar 2021 12:41:06 +0100 -Subject: [PATCH 14/20] QQuickWindow: don't leak old screenChanged connections - -Connections could accumulate. Because the newest one was invoked -last due to how signal-slot invocations are ordered, rendering -was correct, but the stale connections caused unnecessary updates -(and wasted a small amount of memory). -This comes from a misunderstanding I had at the time about how -QMetaObject::Connection works. Destroying or overwriting one does -not affect the actual connection. - -While at it, also modernize the connect(). - -Pick-to: 5.15 6.0 6.1 -Change-Id: Idde81bdbff8947ed517bf2740d623a395c0acb74 -Reviewed-by: Fabian Kosmale -Reviewed-by: Shawn Rutledge -(cherry picked from commit 9f8292d48913c5bc50377749c2b3e030cf16d703) ---- - src/quick/items/qquickwindow.cpp | 7 +++---- - 1 file changed, 3 insertions(+), 4 deletions(-) - -diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp -index eea1e93f32..c956c85091 100644 ---- a/src/quick/items/qquickwindow.cpp -+++ b/src/quick/items/qquickwindow.cpp -@@ -450,15 +450,14 @@ void QQuickWindow::physicalDpiChanged() - void QQuickWindow::handleScreenChanged(QScreen *screen) - { - Q_D(QQuickWindow); -+ disconnect(d->physicalDpiChangedConnection); - if (screen) { - physicalDpiChanged(); - // When physical DPI changes on the same screen, either the resolution or the device pixel - // ratio changed. We must check what it is. Device pixel ratio does not have its own - // ...Changed() signal. -- d->physicalDpiChangedConnection = connect(screen, SIGNAL(physicalDotsPerInchChanged(qreal)), -- this, SLOT(physicalDpiChanged())); -- } else { -- disconnect(d->physicalDpiChangedConnection); -+ d->physicalDpiChangedConnection = connect(screen, &QScreen::physicalDotsPerInchChanged, -+ this, &QQuickWindow::physicalDpiChanged); - } - - d->forcePolish(); --- -2.35.1 - diff --git a/0015-Fix-TapHandler-so-that-it-actually-registers-a-tap.patch b/0015-Fix-TapHandler-so-that-it-actually-registers-a-tap.patch deleted file mode 100644 index de92325..0000000 --- a/0015-Fix-TapHandler-so-that-it-actually-registers-a-tap.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 743ae2a4d59eccc4720390c4c757b081eb2c6bfa Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jan=20Arve=20S=C3=A6ther?= -Date: Thu, 3 Sep 2020 10:51:01 +0200 -Subject: [PATCH 15/20] Fix TapHandler so that it actually registers a tap - -This bug caused all quick examples that used the -shared\LauncherList.qml to be broken. - -In QtGui, QSinglePointEvent will construct itself with a point id of 0 -if there is a valid point, and with a point id of -1 if the point is -invalid (the default constructor does the latter). -However, QQuickSinglePointHandler::wantsPointerEvent() did not agree -with that, because it assumed that a point id of 0 meant -uninitialized/invalid point. -The fix is to change QQuickSinglePointHandler::wantsPointerEvent() and -QQuickHandlerPoint so that it assumes that the id -1 is now an invalid -point, (instead of 0) - -Change-Id: I8c9683dfe06ebb77c5342a26f08174b67e7cbd90 -Reviewed-by: Shawn Rutledge -(cherry picked from commit 8d3a91016506fd0afedb0be535f7c34a4ca762f6) ---- - src/quick/handlers/qquickhandlerpoint.cpp | 4 ++-- - src/quick/handlers/qquicksinglepointhandler.cpp | 4 ++-- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/src/quick/handlers/qquickhandlerpoint.cpp b/src/quick/handlers/qquickhandlerpoint.cpp -index 72efdfd0f4..6aef3545dd 100644 ---- a/src/quick/handlers/qquickhandlerpoint.cpp -+++ b/src/quick/handlers/qquickhandlerpoint.cpp -@@ -82,7 +82,7 @@ void QQuickHandlerPoint::localize(QQuickItem *item) - - void QQuickHandlerPoint::reset() - { -- m_id = 0; -+ m_id = -1; - m_uniqueId = QPointingDeviceUniqueId(); - m_position = QPointF(); - m_scenePosition = QPointF(); -@@ -165,7 +165,7 @@ void QQuickHandlerPoint::reset(const QVector &points) - pressureSum += point.pressure(); - ellipseDiameterSum += point.ellipseDiameters(); - } -- m_id = 0; -+ m_id = -1; - m_uniqueId = QPointingDeviceUniqueId(); - // all points are required to be from the same event, so pressed buttons and modifiers should be the same - m_pressedButtons = points.first().pressedButtons(); -diff --git a/src/quick/handlers/qquicksinglepointhandler.cpp b/src/quick/handlers/qquicksinglepointhandler.cpp -index b51f53b74f..89081b4e84 100644 ---- a/src/quick/handlers/qquicksinglepointhandler.cpp -+++ b/src/quick/handlers/qquicksinglepointhandler.cpp -@@ -75,7 +75,7 @@ bool QQuickSinglePointHandler::wantsPointerEvent(QQuickPointerEvent *event) - if (!QQuickPointerDeviceHandler::wantsPointerEvent(event)) - return false; - -- if (d->pointInfo.id()) { -+ if (d->pointInfo.id() != -1) { - // We already know which one we want, so check whether it's there. - // It's expected to be an update or a release. - // If we no longer want it, cancel the grab. -@@ -125,7 +125,7 @@ bool QQuickSinglePointHandler::wantsPointerEvent(QQuickPointerEvent *event) - chosen->setAccepted(); - } - } -- return d->pointInfo.id(); -+ return d->pointInfo.id() != -1; - } - - void QQuickSinglePointHandler::handlePointerEventImpl(QQuickPointerEvent *event) --- -2.35.1 - diff --git a/0015-V4-Do-not-call-dtor-of-an-object-we-continue-to-use.patch b/0015-V4-Do-not-call-dtor-of-an-object-we-continue-to-use.patch new file mode 100644 index 0000000..c250ddc --- /dev/null +++ b/0015-V4-Do-not-call-dtor-of-an-object-we-continue-to-use.patch @@ -0,0 +1,51 @@ +From 2dc624d1f7771d4e93ad7f5293fb43cf539b1ca4 Mon Sep 17 00:00:00 2001 +From: Ulf Hermann +Date: Thu, 3 Feb 2022 10:02:06 +0100 +Subject: [PATCH 15/17] V4: Do not call dtor of an object we continue to use + +After destroyObject(), the QObjectWrapper is still alive. We might use +its heap object again. Furthermore, the Heap::QObjectWrapper dtor does +not actually do anything defined. What we want to do here is clear the +QObject pointer because we've just gotten rid of the QObject. There is a +method for that: Heap::QObjectWrapper::destroy(). + +Finally, the internalClass must never ever be nullptr. Assert on that +rather than checking it. + +Pick-to: 5.15 6.2 6.3 +Task-number: QTBUG-100431 +Change-Id: I794a295c182b2ed4ba80673f58d6143c861b7391 +Reviewed-by: Andrei Golubev +Reviewed-by: Qt CI Bot +Reviewed-by: Fabian Kosmale +(cherry picked from commit 6c197319f34b8098d034f1543eb5feb9d7be54c3) +--- + src/qml/jsruntime/qv4qobjectwrapper.cpp | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp +index 9899c9274e..272b85069f 100644 +--- a/src/qml/jsruntime/qv4qobjectwrapper.cpp ++++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp +@@ -1160,8 +1160,7 @@ void Heap::QObjectWrapper::markObjects(Heap::Base *that, QV4::MarkStack *markSta + void QObjectWrapper::destroyObject(bool lastCall) + { + Heap::QObjectWrapper *h = d(); +- if (!h->internalClass) +- return; // destroyObject already got called ++ Q_ASSERT(h->internalClass); + + if (h->object()) { + QQmlData *ddata = QQmlData::get(h->object(), false); +@@ -1191,7 +1190,7 @@ void QObjectWrapper::destroyObject(bool lastCall) + } + } + +- h->~Data(); ++ h->destroy(); + } + + +-- +2.36.1 + diff --git a/0016-Make-sure-QQuickWidget-and-its-offscreen-window-s-sc.patch b/0016-Make-sure-QQuickWidget-and-its-offscreen-window-s-sc.patch new file mode 100644 index 0000000..2685bfa --- /dev/null +++ b/0016-Make-sure-QQuickWidget-and-its-offscreen-window-s-sc.patch @@ -0,0 +1,84 @@ +From 5eee7419f55c592a24d9c7746df0f197d8f0a71d Mon Sep 17 00:00:00 2001 +From: Vlad Zahorodnii +Date: Sat, 29 Jan 2022 21:59:33 +0200 +Subject: [PATCH 16/17] Make sure QQuickWidget and its offscreen window's + screens are always in sync + +By default, the offscreen window is placed on the primary screen. +However, if the parent widget argument is passed to the QQuickWidget's +constructor, then QQuickWidget's and the offscreen window's screens can +be different and that can create rendering issues, e.g. blurry text if +the primary screen and QQuickWidget's screen have different scale +factors. + +Change-Id: I10c62b5635664f943b11828773f14017f198a770 +Reviewed-by: David Edmundson +Reviewed-by: Laszlo Agocs +(cherry picked from commit a2a2734bffa1459639b31fb3f4f83873ba44ab5c) +--- + src/quickwidgets/qquickwidget.cpp | 26 +++++++++++--------------- + 1 file changed, 11 insertions(+), 15 deletions(-) + +diff --git a/src/quickwidgets/qquickwidget.cpp b/src/quickwidgets/qquickwidget.cpp +index 39780f8de3..223d91f579 100644 +--- a/src/quickwidgets/qquickwidget.cpp ++++ b/src/quickwidgets/qquickwidget.cpp +@@ -106,6 +106,7 @@ void QQuickWidgetPrivate::init(QQmlEngine* e) + + renderControl = new QQuickWidgetRenderControl(q); + offscreenWindow = new QQuickWindow(*new QQuickOffcreenWindowPrivate(),renderControl); ++ offscreenWindow->setScreen(q->screen()); + offscreenWindow->setTitle(QString::fromLatin1("Offscreen")); + offscreenWindow->setObjectName(QString::fromLatin1("QQuickOffScreenWindow")); + // Do not call create() on offscreenWindow. +@@ -901,9 +902,7 @@ void QQuickWidgetPrivate::createContext() + + context = new QOpenGLContext; + context->setFormat(offscreenWindow->requestedFormat()); +- const QWindow *win = q->window()->windowHandle(); +- if (win && win->screen()) +- context->setScreen(win->screen()); ++ context->setScreen(q->screen()); + QOpenGLContext *shareContext = qt_gl_global_share_context(); + if (!shareContext) + shareContext = QWidgetPrivate::get(q->window())->shareContext(); +@@ -1520,19 +1519,16 @@ bool QQuickWidget::event(QEvent *e) + d->handleWindowChange(); + break; + +- case QEvent::ScreenChangeInternal: +- if (QWindow *window = this->window()->windowHandle()) { +- QScreen *newScreen = window->screen(); +- +- if (d->offscreenWindow) +- d->offscreenWindow->setScreen(newScreen); +- if (d->offscreenSurface) +- d->offscreenSurface->setScreen(newScreen); ++ case QEvent::ScreenChangeInternal: { ++ QScreen *newScreen = screen(); ++ if (d->offscreenWindow) ++ d->offscreenWindow->setScreen(newScreen); ++ if (d->offscreenSurface) ++ d->offscreenSurface->setScreen(newScreen); + #if QT_CONFIG(opengl) +- if (d->context) +- d->context->setScreen(newScreen); ++ if (d->context) ++ d->context->setScreen(newScreen); + #endif +- } + + if (d->useSoftwareRenderer + #if QT_CONFIG(opengl) +@@ -1545,7 +1541,7 @@ bool QQuickWidget::event(QEvent *e) + d->render(true); + } + break; +- ++ } + case QEvent::Show: + case QEvent::Move: + d->updatePosition(); +-- +2.36.1 + diff --git a/0016-Revert-Fix-TapHandler-so-that-it-actually-registers-.patch b/0016-Revert-Fix-TapHandler-so-that-it-actually-registers-.patch deleted file mode 100644 index 795d1ad..0000000 --- a/0016-Revert-Fix-TapHandler-so-that-it-actually-registers-.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 84e0c1e0973ca7467089dc0227a2b9ac4aef52fa Mon Sep 17 00:00:00 2001 -From: Albert Astals Cid -Date: Tue, 16 Nov 2021 22:43:37 +0100 -Subject: [PATCH 16/20] Revert "Fix TapHandler so that it actually registers a - tap" - -This reverts commit 36e8ccd434f948e4f11a8f9d59139ec072e41ff5. - -It's causing regresions ---- - src/quick/handlers/qquickhandlerpoint.cpp | 4 ++-- - src/quick/handlers/qquicksinglepointhandler.cpp | 4 ++-- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/src/quick/handlers/qquickhandlerpoint.cpp b/src/quick/handlers/qquickhandlerpoint.cpp -index 6aef3545dd..72efdfd0f4 100644 ---- a/src/quick/handlers/qquickhandlerpoint.cpp -+++ b/src/quick/handlers/qquickhandlerpoint.cpp -@@ -82,7 +82,7 @@ void QQuickHandlerPoint::localize(QQuickItem *item) - - void QQuickHandlerPoint::reset() - { -- m_id = -1; -+ m_id = 0; - m_uniqueId = QPointingDeviceUniqueId(); - m_position = QPointF(); - m_scenePosition = QPointF(); -@@ -165,7 +165,7 @@ void QQuickHandlerPoint::reset(const QVector &points) - pressureSum += point.pressure(); - ellipseDiameterSum += point.ellipseDiameters(); - } -- m_id = -1; -+ m_id = 0; - m_uniqueId = QPointingDeviceUniqueId(); - // all points are required to be from the same event, so pressed buttons and modifiers should be the same - m_pressedButtons = points.first().pressedButtons(); -diff --git a/src/quick/handlers/qquicksinglepointhandler.cpp b/src/quick/handlers/qquicksinglepointhandler.cpp -index 89081b4e84..b51f53b74f 100644 ---- a/src/quick/handlers/qquicksinglepointhandler.cpp -+++ b/src/quick/handlers/qquicksinglepointhandler.cpp -@@ -75,7 +75,7 @@ bool QQuickSinglePointHandler::wantsPointerEvent(QQuickPointerEvent *event) - if (!QQuickPointerDeviceHandler::wantsPointerEvent(event)) - return false; - -- if (d->pointInfo.id() != -1) { -+ if (d->pointInfo.id()) { - // We already know which one we want, so check whether it's there. - // It's expected to be an update or a release. - // If we no longer want it, cancel the grab. -@@ -125,7 +125,7 @@ bool QQuickSinglePointHandler::wantsPointerEvent(QQuickPointerEvent *event) - chosen->setAccepted(); - } - } -- return d->pointInfo.id() != -1; -+ return d->pointInfo.id(); - } - - void QQuickSinglePointHandler::handlePointerEventImpl(QQuickPointerEvent *event) --- -2.35.1 - diff --git a/0017-QQmlJs-FixedPoolArray-fix-UB-precondition-violation-.patch b/0017-QQmlJs-FixedPoolArray-fix-UB-precondition-violation-.patch deleted file mode 100644 index d1849bb..0000000 --- a/0017-QQmlJs-FixedPoolArray-fix-UB-precondition-violation-.patch +++ /dev/null @@ -1,36 +0,0 @@ -From c6e595e7fbbe80c8db7ae33d8af05a4fd946a2f5 Mon Sep 17 00:00:00 2001 -From: Marc Mutz -Date: Tue, 21 Dec 2021 09:20:17 +0100 -Subject: [PATCH 17/20] QQmlJs::FixedPoolArray: fix UB (precondition violation) - in allocate() - -Says ubsan: - - qqmljsfixedpoolarray_p.h:90:19: runtime error: null pointer passed as argument 2, which is declared to never be null - -Fix, like in so many other places, by a size check. - -Pick-to: 6.3 6.2 5.15 -Change-Id: I9181d6ecb467c2dc726978ce7f93b35a6bf2f944 -Reviewed-by: Lars Knoll -(cherry picked from commit d74e931f3fc2587ac6d1e2930acbbe54ea5be2b5) ---- - src/qml/common/qqmljsfixedpoolarray_p.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/qml/common/qqmljsfixedpoolarray_p.h b/src/qml/common/qqmljsfixedpoolarray_p.h -index b65b994d6c..15a8cd6878 100644 ---- a/src/qml/common/qqmljsfixedpoolarray_p.h -+++ b/src/qml/common/qqmljsfixedpoolarray_p.h -@@ -86,7 +86,7 @@ public: - if (QTypeInfo::isComplex) { - for (int i = 0; i < count; ++i) - new (data + i) T(vector.at(i)); -- } else { -+ } else if (count) { - memcpy(data, static_cast(vector.constData()), count * sizeof(T)); - } - } --- -2.35.1 - diff --git a/0017-QQuickItem-Guard-against-cycles-in-nextPrevItemInTab.patch b/0017-QQuickItem-Guard-against-cycles-in-nextPrevItemInTab.patch new file mode 100644 index 0000000..8c8e508 --- /dev/null +++ b/0017-QQuickItem-Guard-against-cycles-in-nextPrevItemInTab.patch @@ -0,0 +1,122 @@ +From 51efb2ed2f071beda188270a23ac450fe4b318f7 Mon Sep 17 00:00:00 2001 +From: Fabian Kosmale +Date: Wed, 4 May 2022 09:10:54 +0200 +Subject: [PATCH 17/17] QQuickItem: Guard against cycles in + nextPrevItemInTabFocusChain +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +nextPrevItemInTabFocusChain already had a check to prevent running into +cycles, it would however only detect if we reached the original item. If +our cycle instead would loop between reachable items without ever +returning to the initial one, as in the diagram below, then we would +never terminate the loop. + + /-->other item<---next item +initial-item \ ^ + \ | + --->different item + +To prevent this from happening, we keep track of all items we've seen so +far. One last complications arises due to the fact that we do visit the +parent twice under some cicrcumstances, but we already have the skip +variable to indicate that case – we simply skip the duplicate check if +it is set to true. + +Pick-to: 6.2 6.3 +Fixes: QTBUG-87190 +Change-Id: I1449a7ebf8f325f00c296e8a8db4360faf1049e4 +Reviewed-by: Volker Hilsheimer +(cherry picked from commit e74bcf751495d9fe27efd195bc04e2a6ae6732a4) +--- + src/quick/items/qquickitem.cpp | 7 ++++++- + .../data/activeFocusOnTab_infiniteLoop3.qml | 13 +++++++++++++ + tests/auto/quick/qquickitem2/tst_qquickitem.cpp | 12 ++++++++++++ + 3 files changed, 31 insertions(+), 1 deletion(-) + create mode 100644 tests/auto/quick/qquickitem2/data/activeFocusOnTab_infiniteLoop3.qml + +diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp +index 497672b497..81b0db0b69 100644 +--- a/src/quick/items/qquickitem.cpp ++++ b/src/quick/items/qquickitem.cpp +@@ -59,6 +59,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -2520,6 +2521,7 @@ QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, boo + QQuickItem *current = item; + qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: startItem:" << startItem; + qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: firstFromItem:" << firstFromItem; ++ QDuplicateTracker cycleDetector; + do { + qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: current:" << current; + qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: from:" << from; +@@ -2586,7 +2588,10 @@ QQuickItem* QQuickItemPrivate::nextPrevItemInTabFocusChain(QQuickItem *item, boo + // traversed all of the chain (by compare the [current] item with [startItem]) + // Since the [startItem] might be promoted to its parent if it is invisible, + // we still have to check [current] item with original start item +- if ((current == startItem || current == originalStartItem) && from == firstFromItem) { ++ // We might also run into a cycle before we reach firstFromItem again ++ // but note that we have to ignore current if we are meant to skip it ++ if (((current == startItem || current == originalStartItem) && from == firstFromItem) || ++ (!skip && cycleDetector.hasSeen(current))) { + // wrapped around, avoid endless loops + if (item == contentItem) { + qCDebug(DBG_FOCUS) << "QQuickItemPrivate::nextPrevItemInTabFocusChain: looped, return contentItem"; +diff --git a/tests/auto/quick/qquickitem2/data/activeFocusOnTab_infiniteLoop3.qml b/tests/auto/quick/qquickitem2/data/activeFocusOnTab_infiniteLoop3.qml +new file mode 100644 +index 0000000000..889e480f3b +--- /dev/null ++++ b/tests/auto/quick/qquickitem2/data/activeFocusOnTab_infiniteLoop3.qml +@@ -0,0 +1,13 @@ ++import QtQuick 2.6 ++ ++Item { ++ visible: true ++ Item { ++ visible: false ++ Item { ++ objectName: "hiddenChild" ++ activeFocusOnTab: true ++ focus: true ++ } ++ } ++} +diff --git a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp +index f65650cf9c..eeff768bb4 100644 +--- a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp ++++ b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp +@@ -66,6 +66,7 @@ private slots: + void activeFocusOnTab10(); + void activeFocusOnTab_infiniteLoop_data(); + void activeFocusOnTab_infiniteLoop(); ++ void activeFocusOnTab_infiniteLoopControls(); + + void nextItemInFocusChain(); + void nextItemInFocusChain2(); +@@ -1055,6 +1056,17 @@ void tst_QQuickItem::activeFocusOnTab_infiniteLoop() + QCOMPARE(item, window->rootObject()); + } + ++ ++void tst_QQuickItem::activeFocusOnTab_infiniteLoopControls() ++{ ++ auto source = testFileUrl("activeFocusOnTab_infiniteLoop3.qml"); ++ QScopedPointerwindow(new QQuickView()); ++ window->setSource(source); ++ window->show(); ++ QVERIFY(window->errors().isEmpty()); ++ QTest::keyClick(window.get(), Qt::Key_Tab); // should not hang ++} ++ + void tst_QQuickItem::nextItemInFocusChain() + { + if (!qt_tab_all_widgets()) +-- +2.36.1 + diff --git a/0018-QQuickTextInput-update-cursor-rectangle-after-paddin.patch b/0018-QQuickTextInput-update-cursor-rectangle-after-paddin.patch deleted file mode 100644 index 4f76f95..0000000 --- a/0018-QQuickTextInput-update-cursor-rectangle-after-paddin.patch +++ /dev/null @@ -1,138 +0,0 @@ -From 9bb03b5dcc21275986df3d8b0efb6f28cdc583ec Mon Sep 17 00:00:00 2001 -From: Wang Chuan -Date: Mon, 5 Apr 2021 11:41:48 +0800 -Subject: [PATCH 18/20] QQuickTextInput: update cursor rectangle after padding - changed - -The position of cursor delegate needs to be updated when we change -padding, otherwise it will be in a wrong position. - -Fixes: QTBUG-91867 -Pick-to: 5.12 5.15 6.0 6.1 -Change-Id: I89ca84fe893ebf517ab67890196eede14a4055d7 -Reviewed-by: Shawn Rutledge -(cherry picked from commit d98694c4023881673259ba040c10df7e71ec3d37) ---- - src/quick/items/qquicktextinput.cpp | 5 ++++ - .../checkCursorDelegateWhenPaddingChanged.qml | 16 ++++++++++ - .../qquicktextinput/tst_qquicktextinput.cpp | 30 +++++++++++++++++++ - 3 files changed, 51 insertions(+) - create mode 100644 tests/auto/quick/qquicktextinput/data/checkCursorDelegateWhenPaddingChanged.qml - -diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp -index 079bf58abe..7d0d05700a 100644 ---- a/src/quick/items/qquicktextinput.cpp -+++ b/src/quick/items/qquicktextinput.cpp -@@ -2952,6 +2952,7 @@ void QQuickTextInputPrivate::setTopPadding(qreal value, bool reset) - } - if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding()))) { - updateLayout(); -+ q->updateCursorRectangle(); - emit q->topPaddingChanged(); - } - } -@@ -2966,6 +2967,7 @@ void QQuickTextInputPrivate::setLeftPadding(qreal value, bool reset) - } - if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding()))) { - updateLayout(); -+ q->updateCursorRectangle(); - emit q->leftPaddingChanged(); - } - } -@@ -2980,6 +2982,7 @@ void QQuickTextInputPrivate::setRightPadding(qreal value, bool reset) - } - if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding()))) { - updateLayout(); -+ q->updateCursorRectangle(); - emit q->rightPaddingChanged(); - } - } -@@ -2994,6 +2997,7 @@ void QQuickTextInputPrivate::setBottomPadding(qreal value, bool reset) - } - if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding()))) { - updateLayout(); -+ q->updateCursorRectangle(); - emit q->bottomPaddingChanged(); - } - } -@@ -4712,6 +4716,7 @@ void QQuickTextInput::setPadding(qreal padding) - - d->extra.value().padding = padding; - d->updateLayout(); -+ updateCursorRectangle(); - emit paddingChanged(); - if (!d->extra.isAllocated() || !d->extra->explicitTopPadding) - emit topPaddingChanged(); -diff --git a/tests/auto/quick/qquicktextinput/data/checkCursorDelegateWhenPaddingChanged.qml b/tests/auto/quick/qquicktextinput/data/checkCursorDelegateWhenPaddingChanged.qml -new file mode 100644 -index 0000000000..e6f07b4687 ---- /dev/null -+++ b/tests/auto/quick/qquicktextinput/data/checkCursorDelegateWhenPaddingChanged.qml -@@ -0,0 +1,16 @@ -+import QtQuick 2.12 -+ -+Rectangle { -+ width: 200 -+ height: 200 -+ TextInput { -+ objectName: "textInput" -+ leftPadding: 10 -+ focus: true -+ cursorDelegate: Rectangle { -+ objectName: "cursorDelegate" -+ width: 5 -+ color: "red" -+ } -+ } -+} -diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp -index 2e64c80b85..ac502bcb28 100644 ---- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp -+++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp -@@ -236,6 +236,7 @@ private slots: - void QTBUG_51115_readOnlyResetsSelection(); - void QTBUG_77814_InsertRemoveNoSelection(); - -+ void checkCursorDelegateWhenPaddingChanged(); - private: - void simulateKey(QWindow *, int key); - -@@ -7054,6 +7055,35 @@ void tst_qquicktextinput::QTBUG_77814_InsertRemoveNoSelection() - QCOMPARE(textInput->selectedText(), QString()); - } - -+void tst_qquicktextinput::checkCursorDelegateWhenPaddingChanged() -+{ -+ QQuickView view; -+ view.setSource(testFileUrl("checkCursorDelegateWhenPaddingChanged.qml")); -+ view.show(); -+ QVERIFY(QTest::qWaitForWindowExposed(&view)); -+ -+ QQuickTextInput *textInput = view.rootObject()->findChild("textInput"); -+ QVERIFY(textInput); -+ -+ QQuickItem *cursorDelegate = textInput->findChild("cursorDelegate"); -+ QVERIFY(cursorDelegate); -+ -+ QCOMPARE(cursorDelegate->x(), textInput->leftPadding()); -+ QCOMPARE(cursorDelegate->y(), textInput->topPadding()); -+ -+ textInput->setPadding(5); -+ QCOMPARE(cursorDelegate->x(), textInput->leftPadding()); -+ QCOMPARE(cursorDelegate->y(), textInput->topPadding()); -+ -+ textInput->setTopPadding(10); -+ QCOMPARE(cursorDelegate->x(), textInput->leftPadding()); -+ QCOMPARE(cursorDelegate->y(), textInput->topPadding()); -+ -+ textInput->setLeftPadding(10); -+ QCOMPARE(cursorDelegate->x(), textInput->leftPadding()); -+ QCOMPARE(cursorDelegate->y(), textInput->topPadding()); -+} -+ - QTEST_MAIN(tst_qquicktextinput) - - #include "tst_qquicktextinput.moc" --- -2.35.1 - diff --git a/0019-V4-Do-not-call-dtor-of-an-object-we-continue-to-use.patch b/0019-V4-Do-not-call-dtor-of-an-object-we-continue-to-use.patch deleted file mode 100644 index d84a374..0000000 --- a/0019-V4-Do-not-call-dtor-of-an-object-we-continue-to-use.patch +++ /dev/null @@ -1,51 +0,0 @@ -From c8a4894655eef230702e6cc889f3d40fbb5a9426 Mon Sep 17 00:00:00 2001 -From: Ulf Hermann -Date: Thu, 3 Feb 2022 10:02:06 +0100 -Subject: [PATCH 19/20] V4: Do not call dtor of an object we continue to use - -After destroyObject(), the QObjectWrapper is still alive. We might use -its heap object again. Furthermore, the Heap::QObjectWrapper dtor does -not actually do anything defined. What we want to do here is clear the -QObject pointer because we've just gotten rid of the QObject. There is a -method for that: Heap::QObjectWrapper::destroy(). - -Finally, the internalClass must never ever be nullptr. Assert on that -rather than checking it. - -Pick-to: 5.15 6.2 6.3 -Task-number: QTBUG-100431 -Change-Id: I794a295c182b2ed4ba80673f58d6143c861b7391 -Reviewed-by: Andrei Golubev -Reviewed-by: Qt CI Bot -Reviewed-by: Fabian Kosmale -(cherry picked from commit 6c197319f34b8098d034f1543eb5feb9d7be54c3) ---- - src/qml/jsruntime/qv4qobjectwrapper.cpp | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) - -diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp -index 9899c9274e..272b85069f 100644 ---- a/src/qml/jsruntime/qv4qobjectwrapper.cpp -+++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp -@@ -1160,8 +1160,7 @@ void Heap::QObjectWrapper::markObjects(Heap::Base *that, QV4::MarkStack *markSta - void QObjectWrapper::destroyObject(bool lastCall) - { - Heap::QObjectWrapper *h = d(); -- if (!h->internalClass) -- return; // destroyObject already got called -+ Q_ASSERT(h->internalClass); - - if (h->object()) { - QQmlData *ddata = QQmlData::get(h->object(), false); -@@ -1191,7 +1190,7 @@ void QObjectWrapper::destroyObject(bool lastCall) - } - } - -- h->~Data(); -+ h->destroy(); - } - - --- -2.35.1 - diff --git a/0020-Make-sure-QQuickWidget-and-its-offscreen-window-s-sc.patch b/0020-Make-sure-QQuickWidget-and-its-offscreen-window-s-sc.patch deleted file mode 100644 index bc6e222..0000000 --- a/0020-Make-sure-QQuickWidget-and-its-offscreen-window-s-sc.patch +++ /dev/null @@ -1,84 +0,0 @@ -From 02105099301450c890e1caba977ef44efdc43da7 Mon Sep 17 00:00:00 2001 -From: Vlad Zahorodnii -Date: Sat, 29 Jan 2022 21:59:33 +0200 -Subject: [PATCH 20/20] Make sure QQuickWidget and its offscreen window's - screens are always in sync - -By default, the offscreen window is placed on the primary screen. -However, if the parent widget argument is passed to the QQuickWidget's -constructor, then QQuickWidget's and the offscreen window's screens can -be different and that can create rendering issues, e.g. blurry text if -the primary screen and QQuickWidget's screen have different scale -factors. - -Change-Id: I10c62b5635664f943b11828773f14017f198a770 -Reviewed-by: David Edmundson -Reviewed-by: Laszlo Agocs -(cherry picked from commit a2a2734bffa1459639b31fb3f4f83873ba44ab5c) ---- - src/quickwidgets/qquickwidget.cpp | 26 +++++++++++--------------- - 1 file changed, 11 insertions(+), 15 deletions(-) - -diff --git a/src/quickwidgets/qquickwidget.cpp b/src/quickwidgets/qquickwidget.cpp -index 39780f8de3..223d91f579 100644 ---- a/src/quickwidgets/qquickwidget.cpp -+++ b/src/quickwidgets/qquickwidget.cpp -@@ -106,6 +106,7 @@ void QQuickWidgetPrivate::init(QQmlEngine* e) - - renderControl = new QQuickWidgetRenderControl(q); - offscreenWindow = new QQuickWindow(*new QQuickOffcreenWindowPrivate(),renderControl); -+ offscreenWindow->setScreen(q->screen()); - offscreenWindow->setTitle(QString::fromLatin1("Offscreen")); - offscreenWindow->setObjectName(QString::fromLatin1("QQuickOffScreenWindow")); - // Do not call create() on offscreenWindow. -@@ -901,9 +902,7 @@ void QQuickWidgetPrivate::createContext() - - context = new QOpenGLContext; - context->setFormat(offscreenWindow->requestedFormat()); -- const QWindow *win = q->window()->windowHandle(); -- if (win && win->screen()) -- context->setScreen(win->screen()); -+ context->setScreen(q->screen()); - QOpenGLContext *shareContext = qt_gl_global_share_context(); - if (!shareContext) - shareContext = QWidgetPrivate::get(q->window())->shareContext(); -@@ -1520,19 +1519,16 @@ bool QQuickWidget::event(QEvent *e) - d->handleWindowChange(); - break; - -- case QEvent::ScreenChangeInternal: -- if (QWindow *window = this->window()->windowHandle()) { -- QScreen *newScreen = window->screen(); -- -- if (d->offscreenWindow) -- d->offscreenWindow->setScreen(newScreen); -- if (d->offscreenSurface) -- d->offscreenSurface->setScreen(newScreen); -+ case QEvent::ScreenChangeInternal: { -+ QScreen *newScreen = screen(); -+ if (d->offscreenWindow) -+ d->offscreenWindow->setScreen(newScreen); -+ if (d->offscreenSurface) -+ d->offscreenSurface->setScreen(newScreen); - #if QT_CONFIG(opengl) -- if (d->context) -- d->context->setScreen(newScreen); -+ if (d->context) -+ d->context->setScreen(newScreen); - #endif -- } - - if (d->useSoftwareRenderer - #if QT_CONFIG(opengl) -@@ -1545,7 +1541,7 @@ bool QQuickWidget::event(QEvent *e) - d->render(true); - } - break; -- -+ } - case QEvent::Show: - case QEvent::Move: - d->updatePosition(); --- -2.35.1 - diff --git a/qt5-qtdeclarative.spec b/qt5-qtdeclarative.spec index e736673..cb2f8b2 100644 --- a/qt5-qtdeclarative.spec +++ b/qt5-qtdeclarative.spec @@ -11,8 +11,8 @@ Summary: Qt5 - QtDeclarative component Name: qt5-%{qt_module} -Version: 5.15.3 -Release: 2%{?dist} +Version: 5.15.4 +Release: 1%{?dist} # See LICENSE.GPL LICENSE.LGPL LGPL_EXCEPTION.txt, for details License: LGPLv2 with exceptions or GPLv3 with exceptions @@ -27,27 +27,24 @@ Source5: qv4global_p-multilib.h ## upstream patches ## repo: https://invent.kde.org/qt/qt/qtdeclarative ## branch: kde/5.15 -## git format-patch v5.15.3-lts-lgpl -Patch1: 0001-Give-a-warning-when-StyledText-encounters-a-non-supp.patch -Patch2: 0002-Add-missing-limits-include-to-fix-build-with-GCC-11.patch -Patch3: 0003-Document-that-StyledText-also-supports-nbsp-and-quot.patch -Patch4: 0004-Support-apos-in-styled-text.patch -Patch5: 0005-Remove-unused-QPointer-QQuickPointerMask.patch -Patch6: 0006-Include-limits-in-Yarr.h-to-fix-build-with-GCC-11.patch -Patch7: 0007-QQuickLoader-Do-not-incubate-if-the-source-arrives-a.patch -Patch8: 0008-QQmlDelegateModel-Refresh-the-view-when-a-column-is-.patch -Patch9: 0009-Fix-sweep-step-for-tainted-QObject-JavaScript-wrappe.patch +## git format-patch v5.15.4-lts-lgpl +Patch1: 0001-Give-a-warning-when-StyledText-encounters-a-non-supp.patch +Patch2: 0002-Add-missing-limits-include-to-fix-build-with-GCC-11.patch +Patch3: 0003-Document-that-StyledText-also-supports-nbsp-and-quot.patch +Patch4: 0004-Support-apos-in-styled-text.patch +Patch5: 0005-Remove-unused-QPointer-QQuickPointerMask.patch +Patch6: 0006-Include-limits-in-Yarr.h-to-fix-build-with-GCC-11.patch +Patch7: 0007-QQuickLoader-Do-not-incubate-if-the-source-arrives-a.patch +Patch8: 0008-QQmlDelegateModel-Refresh-the-view-when-a-column-is-.patch +Patch9: 0009-Fix-sweep-step-for-tainted-QObject-JavaScript-wrappe.patch Patch10: 0010-Fix-distorted-text-with-subpixel-matrix-translation.patch Patch11: 0011-Revert-Fix-for-possible-crash-in-QSGDefaultLayer-gra.patch -Patch12: 0012-QQuickItemAnimation-close-potential-memory-leak.patch -Patch13: 0013-qqmldelegatemodel-Fix-out-of-bounds-cache-removal.patch -Patch14: 0014-QQuickWindow-don-t-leak-old-screenChanged-connection.patch -Patch15: 0015-Fix-TapHandler-so-that-it-actually-registers-a-tap.patch -Patch16: 0016-Revert-Fix-TapHandler-so-that-it-actually-registers-.patch -Patch17: 0017-QQmlJs-FixedPoolArray-fix-UB-precondition-violation-.patch -Patch18: 0018-QQuickTextInput-update-cursor-rectangle-after-paddin.patch -Patch19: 0019-V4-Do-not-call-dtor-of-an-object-we-continue-to-use.patch -Patch20: 0020-Make-sure-QQuickWidget-and-its-offscreen-window-s-sc.patch +Patch12: 0012-Fix-TapHandler-so-that-it-actually-registers-a-tap.patch +Patch13: 0013-Revert-Fix-TapHandler-so-that-it-actually-registers-.patch +Patch14: 0014-QQmlJs-FixedPoolArray-fix-UB-precondition-violation-.patch +Patch15: 0015-V4-Do-not-call-dtor-of-an-object-we-continue-to-use.patch +Patch16: 0016-Make-sure-QQuickWidget-and-its-offscreen-window-s-sc.patch +Patch17: 0017-QQuickItem-Guard-against-cycles-in-nextPrevItemInTab.patch ## upstreamable patches Patch100: %{name}-gcc11.patch @@ -230,6 +227,9 @@ make check -k -C tests ||: %changelog +* Mon May 16 2022 Jan Grulich - 5.15.4-1 +- 5.15.4 + * Mon Mar 07 2022 Jan Grulich - 5.15.3-2 - Disable LTO diff --git a/sources b/sources index 85baed4..4fcca6a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (qtdeclarative-everywhere-opensource-src-5.15.3.tar.xz) = c0f8dba5ba9e211071d64ec9de7395925d97424be899292a83fe961091c6695bfe68395fed4b34a746a69293765122a5ee53c119053f01b5fc511f0dbf577597 +SHA512 (qtdeclarative-everywhere-opensource-src-5.15.4.tar.xz) = 8a4ff61238fde7cc563f9d94b5d1f4fd71ecb95ace447e57d08f71da82400b37c42f4f1ecdcd561116bffa1ed483219e06fb550f91c90842e5a43487bc4706b6