Merge remote-tracking branch 'up/f38' into f38-riscv64
Signed-off-by: David Abdurachmanov <davidlt@rivosinc.com>
This commit is contained in:
commit
b725509b40
1
.gitignore
vendored
1
.gitignore
vendored
@ -13,3 +13,4 @@
|
||||
/qtdeclarative-everywhere-opensource-src-5.15.6.tar.xz
|
||||
/qtdeclarative-everywhere-opensource-src-5.15.7.tar.xz
|
||||
/qtdeclarative-everywhere-opensource-src-5.15.8.tar.xz
|
||||
/qtdeclarative-everywhere-opensource-src-5.15.9.tar.xz
|
||||
|
@ -1,29 +0,0 @@
|
||||
From 3f272e04492cd884deb4e7948e39b749809d5256 Mon Sep 17 00:00:00 2001
|
||||
From: Albert Astals Cid <albert.astals.cid@kdab.com>
|
||||
Date: Fri, 21 May 2021 13:17:15 +0200
|
||||
Subject: [PATCH 01/21] Document that StyledText also supports and
|
||||
"
|
||||
|
||||
Change-Id: I1715f8ae8ec8d0fbaf6dbe2b8663cc169da663cd
|
||||
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
|
||||
(cherry picked from commit 5848c081c094a66e024493fc1e5c2569e06f73b6)
|
||||
---
|
||||
src/quick/items/qquicktext.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp
|
||||
index 6230186933..c1571fc6f5 100644
|
||||
--- a/src/quick/items/qquicktext.cpp
|
||||
+++ b/src/quick/items/qquicktext.cpp
|
||||
@@ -2168,7 +2168,7 @@ void QQuickText::resetMaximumLineCount()
|
||||
<img src="" align="top,middle,bottom" width="" height=""> - inline images
|
||||
<ol type="">, <ul type=""> and <li> - ordered and unordered lists
|
||||
<pre></pre> - preformatted
|
||||
- > < &
|
||||
+ > < & "
|
||||
\endcode
|
||||
|
||||
\c Text.StyledText parser is strict, requiring tags to be correctly nested.
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
From da206ac99b58218a1e51a2e75032647d24cd0fdb Mon Sep 17 00:00:00 2001
|
||||
From adc1d82fbac1f85791977ff42299e1f84f0f8db4 Mon Sep 17 00:00:00 2001
|
||||
From: Albert Astals Cid <albert.astals.cid@kdab.com>
|
||||
Date: Thu, 17 Jun 2021 16:32:28 +0200
|
||||
Subject: [PATCH 03/21] Remove unused QPointer<QQuickPointerMask>
|
||||
Subject: [PATCH 01/19] Remove unused QPointer<QQuickPointerMask>
|
||||
|
||||
Change-Id: I009fa6bbd8599dc3bb2e810176fe20e70ed50851
|
||||
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
|
||||
@ -31,5 +31,5 @@ index fba383e268..0d63618622 100644
|
||||
QPointF targetStartPos;
|
||||
QPointF lastPos;
|
||||
--
|
||||
2.39.0
|
||||
2.40.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
From e61200ff7222c31e73dbc779ba4a70073775cc0c Mon Sep 17 00:00:00 2001
|
||||
From 3784ed7ea1ffe1f4be126b3425841aba44b369d8 Mon Sep 17 00:00:00 2001
|
||||
From: Aleix Pol <aleixpol@kde.org>
|
||||
Date: Thu, 23 Sep 2021 03:43:04 +0200
|
||||
Subject: [PATCH 04/21] QQmlDelegateModel: Refresh the view when a column is
|
||||
Subject: [PATCH 02/19] 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
|
||||
@ -22,7 +22,7 @@ Signed-off-by: Aleix Pol <aleixpol@kde.org>
|
||||
create mode 100644 tests/auto/qml/qqmldelegatemodel/data/redrawUponColumnChange.qml
|
||||
|
||||
diff --git a/src/qmlmodels/qqmldelegatemodel.cpp b/src/qmlmodels/qqmldelegatemodel.cpp
|
||||
index 2079a8ed04..a577cb2351 100644
|
||||
index 523c0df779..bc6b2447af 100644
|
||||
--- a/src/qmlmodels/qqmldelegatemodel.cpp
|
||||
+++ b/src/qmlmodels/qqmldelegatemodel.cpp
|
||||
@@ -389,6 +389,12 @@ void QQmlDelegateModelPrivate::connectToAbstractItemModel()
|
||||
@ -51,7 +51,7 @@ index 2079a8ed04..a577cb2351 100644
|
||||
QObject::disconnect(aim, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
|
||||
q, SLOT(_q_dataChanged(QModelIndex,QModelIndex,QVector<int>)));
|
||||
QObject::disconnect(aim, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)),
|
||||
@@ -1973,6 +1985,38 @@ void QQmlDelegateModel::_q_rowsMoved(
|
||||
@@ -1974,6 +1986,38 @@ void QQmlDelegateModel::_q_rowsMoved(
|
||||
}
|
||||
}
|
||||
|
||||
@ -174,5 +174,5 @@ index 35f1e2c94d..1722447830 100644
|
||||
|
||||
#include "tst_qqmldelegatemodel.moc"
|
||||
--
|
||||
2.39.0
|
||||
2.40.0
|
||||
|
@ -1,44 +0,0 @@
|
||||
From bf4b4f3dfb3534e7919c50faa60a0fe7fbcdacf5 Mon Sep 17 00:00:00 2001
|
||||
From: Albert Astals Cid <albert.astals.cid@kdab.com>
|
||||
Date: Fri, 21 May 2021 13:42:35 +0200
|
||||
Subject: [PATCH 02/21] Support ' in styled text
|
||||
|
||||
Pick-to: 6.1 5.15
|
||||
Change-Id: I4a8db963e52a7899ab1796f9a560e8029cc1c929
|
||||
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
|
||||
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||
(cherry picked from commit 96b528efcba1226d2980828d1255160bdceae4cf)
|
||||
---
|
||||
src/quick/items/qquicktext.cpp | 2 +-
|
||||
src/quick/util/qquickstyledtext.cpp | 2 ++
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp
|
||||
index c1571fc6f5..e823ca1095 100644
|
||||
--- a/src/quick/items/qquicktext.cpp
|
||||
+++ b/src/quick/items/qquicktext.cpp
|
||||
@@ -2168,7 +2168,7 @@ void QQuickText::resetMaximumLineCount()
|
||||
<img src="" align="top,middle,bottom" width="" height=""> - inline images
|
||||
<ol type="">, <ul type=""> and <li> - ordered and unordered lists
|
||||
<pre></pre> - preformatted
|
||||
- > < & "
|
||||
+ > < & " '
|
||||
\endcode
|
||||
|
||||
\c Text.StyledText parser is strict, requiring tags to be correctly nested.
|
||||
diff --git a/src/quick/util/qquickstyledtext.cpp b/src/quick/util/qquickstyledtext.cpp
|
||||
index d531fc9205..a25af90414 100644
|
||||
--- a/src/quick/util/qquickstyledtext.cpp
|
||||
+++ b/src/quick/util/qquickstyledtext.cpp
|
||||
@@ -564,6 +564,8 @@ void QQuickStyledTextPrivate::parseEntity(const QChar *&ch, const QString &textI
|
||||
textOut += QChar(60);
|
||||
else if (entity == QLatin1String("amp"))
|
||||
textOut += QChar(38);
|
||||
+ else if (entity == QLatin1String("apos"))
|
||||
+ textOut += QChar(39);
|
||||
else if (entity == QLatin1String("quot"))
|
||||
textOut += QChar(34);
|
||||
else if (entity == QLatin1String("nbsp"))
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
From b8f474a4dd5fa58edfba73e565499bcdad679291 Mon Sep 17 00:00:00 2001
|
||||
From 18b10527cc14a42a19b5d088845bfd2e96326bbb Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jan=20Arve=20S=C3=A6ther?= <jan-arve.saether@qt.io>
|
||||
Date: Thu, 3 Sep 2020 10:51:01 +0200
|
||||
Subject: [PATCH 06/21] Fix TapHandler so that it actually registers a tap
|
||||
Subject: [PATCH 03/19] Fix TapHandler so that it actually registers a tap
|
||||
|
||||
This bug caused all quick examples that used the
|
||||
shared\LauncherList.qml to be broken.
|
||||
@ -69,5 +69,5 @@ index b51f53b74f..89081b4e84 100644
|
||||
|
||||
void QQuickSinglePointHandler::handlePointerEventImpl(QQuickPointerEvent *event)
|
||||
--
|
||||
2.39.0
|
||||
2.40.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
From de04cfb654a09fe7d0f8454b8a8de9243284e1d2 Mon Sep 17 00:00:00 2001
|
||||
From 2842ffc4e6bc4f6a7578866fbbe58c8ceb1efb16 Mon Sep 17 00:00:00 2001
|
||||
From: Albert Astals Cid <aacid@kde.org>
|
||||
Date: Tue, 16 Nov 2021 22:43:37 +0100
|
||||
Subject: [PATCH 07/21] Revert "Fix TapHandler so that it actually registers a
|
||||
Subject: [PATCH 04/19] Revert "Fix TapHandler so that it actually registers a
|
||||
tap"
|
||||
|
||||
This reverts commit 36e8ccd434f948e4f11a8f9d59139ec072e41ff5.
|
||||
@ -57,5 +57,5 @@ index 89081b4e84..b51f53b74f 100644
|
||||
|
||||
void QQuickSinglePointHandler::handlePointerEventImpl(QQuickPointerEvent *event)
|
||||
--
|
||||
2.39.0
|
||||
2.40.0
|
||||
|
@ -1,119 +0,0 @@
|
||||
From ab781c9f5364ddfab0bfe9626a9dd01bd6bc046e Mon Sep 17 00:00:00 2001
|
||||
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
|
||||
Date: Sun, 10 Oct 2021 21:04:21 +0300
|
||||
Subject: [PATCH 05/21] Fix sweep step for tainted QObject JavaScript wrappers
|
||||
|
||||
Currently, whenever the garbage collector runs, it will destroy all
|
||||
valid tainted wrappers.
|
||||
|
||||
Only null or undefined wrappers will be preserved in the
|
||||
m_multiplyWrappedQObjects map.
|
||||
|
||||
It seems like "!" was overlooked in
|
||||
3b5d37ce3841c4bfdf1c629d33f0e33b881b47fb. Prior to that change, it
|
||||
was "!it.value()->markBit()", so calling erase() in the then branch
|
||||
did make sense. But with "!it.value().isNullOrUndefined()", erase()
|
||||
will be called for every valid wrapper, which is the opposite what we
|
||||
want.
|
||||
|
||||
Pick-to: 5.15 6.2
|
||||
Change-Id: I2bf2630f538af8cbd4bfffcff29d67be6c278265
|
||||
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
|
||||
(cherry picked from commit e6b2f88d892dcf396580a61662f569bf69d6d9d1)
|
||||
---
|
||||
src/qml/memory/qv4mm.cpp | 2 +-
|
||||
tests/auto/qml/qjsengine/tst_qjsengine.cpp | 39 ++++++++++++++++++++++
|
||||
tests/auto/qml/qv4mm/tst_qv4mm.cpp | 6 ++--
|
||||
3 files changed, 43 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/qml/memory/qv4mm.cpp b/src/qml/memory/qv4mm.cpp
|
||||
index 06caf04e5a..da149a67c4 100644
|
||||
--- a/src/qml/memory/qv4mm.cpp
|
||||
+++ b/src/qml/memory/qv4mm.cpp
|
||||
@@ -981,7 +981,7 @@ void MemoryManager::sweep(bool lastSweep, ClassDestroyStatsCallback classCountPt
|
||||
|
||||
if (MultiplyWrappedQObjectMap *multiplyWrappedQObjects = engine->m_multiplyWrappedQObjects) {
|
||||
for (MultiplyWrappedQObjectMap::Iterator it = multiplyWrappedQObjects->begin(); it != multiplyWrappedQObjects->end();) {
|
||||
- if (!it.value().isNullOrUndefined())
|
||||
+ if (it.value().isNullOrUndefined())
|
||||
it = multiplyWrappedQObjects->erase(it);
|
||||
else
|
||||
++it;
|
||||
diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
|
||||
index 3b7d74df63..b75bf820d5 100644
|
||||
--- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp
|
||||
+++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
|
||||
@@ -102,6 +102,7 @@ private slots:
|
||||
void valueConversion_RegularExpression();
|
||||
void castWithMultipleInheritance();
|
||||
void collectGarbage();
|
||||
+ void collectGarbageNestedWrappersTwoEngines();
|
||||
void gcWithNestedDataStructure();
|
||||
void stacktrace();
|
||||
void numberParsing_data();
|
||||
@@ -1809,6 +1810,44 @@ void tst_QJSEngine::collectGarbage()
|
||||
QVERIFY(ptr.isNull());
|
||||
}
|
||||
|
||||
+class TestObjectContainer : public QObject
|
||||
+{
|
||||
+ Q_OBJECT
|
||||
+ Q_PROPERTY(QObject *dummy MEMBER m_dummy CONSTANT)
|
||||
+
|
||||
+public:
|
||||
+ TestObjectContainer() : m_dummy(new QObject(this)) {}
|
||||
+
|
||||
+private:
|
||||
+ QObject *m_dummy;
|
||||
+};
|
||||
+
|
||||
+void tst_QJSEngine::collectGarbageNestedWrappersTwoEngines()
|
||||
+{
|
||||
+ QJSEngine engine1;
|
||||
+ QJSEngine engine2;
|
||||
+
|
||||
+ TestObjectContainer container;
|
||||
+ QQmlEngine::setObjectOwnership(&container, QQmlEngine::CppOwnership);
|
||||
+
|
||||
+ engine1.globalObject().setProperty("foobar", engine1.newQObject(&container));
|
||||
+ engine2.globalObject().setProperty("foobar", engine2.newQObject(&container));
|
||||
+
|
||||
+ engine1.evaluate("foobar.dummy.baz = 42");
|
||||
+ engine2.evaluate("foobar.dummy.baz = 43");
|
||||
+
|
||||
+ QCOMPARE(engine1.evaluate("foobar.dummy.baz").toInt(), 42);
|
||||
+ QCOMPARE(engine2.evaluate("foobar.dummy.baz").toInt(), 43);
|
||||
+
|
||||
+ engine1.collectGarbage();
|
||||
+ engine2.collectGarbage();
|
||||
+
|
||||
+ // The GC should not collect dummy object wrappers neither in engine1 nor engine2, we
|
||||
+ // verify that by checking whether the baz property still has its previous value.
|
||||
+ QCOMPARE(engine1.evaluate("foobar.dummy.baz").toInt(), 42);
|
||||
+ QCOMPARE(engine2.evaluate("foobar.dummy.baz").toInt(), 43);
|
||||
+}
|
||||
+
|
||||
void tst_QJSEngine::gcWithNestedDataStructure()
|
||||
{
|
||||
// The GC must be able to traverse deeply nested objects, otherwise this
|
||||
diff --git a/tests/auto/qml/qv4mm/tst_qv4mm.cpp b/tests/auto/qml/qv4mm/tst_qv4mm.cpp
|
||||
index 5d635aa63b..824fd89e5b 100644
|
||||
--- a/tests/auto/qml/qv4mm/tst_qv4mm.cpp
|
||||
+++ b/tests/auto/qml/qv4mm/tst_qv4mm.cpp
|
||||
@@ -76,10 +76,10 @@ void tst_qv4mm::multiWrappedQObjects()
|
||||
QCOMPARE(engine1.memoryManager->m_pendingFreedObjectWrapperValue.size(), 1);
|
||||
QCOMPARE(engine2.memoryManager->m_pendingFreedObjectWrapperValue.size(), 0);
|
||||
|
||||
- // Moves the additional WeakValue from m_multiplyWrappedQObjects to
|
||||
- // m_pendingFreedObjectWrapperValue. It's still alive after all.
|
||||
+ // The additional WeakValue from m_multiplyWrappedQObjects hasn't been moved
|
||||
+ // to m_pendingFreedObjectWrapperValue yet. It's still alive after all.
|
||||
engine1.memoryManager->runGC();
|
||||
- QCOMPARE(engine1.memoryManager->m_pendingFreedObjectWrapperValue.size(), 2);
|
||||
+ QCOMPARE(engine1.memoryManager->m_pendingFreedObjectWrapperValue.size(), 1);
|
||||
|
||||
// engine2 doesn't own the object as engine1 was the first to wrap it above.
|
||||
// Therefore, no effect here.
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
From d8808a609a81660e9de9abc6b1b71ea01f0d6f40 Mon Sep 17 00:00:00 2001
|
||||
From 2d50aedb262fd387775575f684eb9e2485d84134 Mon Sep 17 00:00:00 2001
|
||||
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
|
||||
Date: Sat, 29 Jan 2022 21:59:33 +0200
|
||||
Subject: [PATCH 10/21] Make sure QQuickWidget and its offscreen window's
|
||||
Subject: [PATCH 05/19] Make sure QQuickWidget and its offscreen window's
|
||||
screens are always in sync
|
||||
|
||||
By default, the offscreen window is placed on the primary screen.
|
||||
@ -80,5 +80,5 @@ index 39780f8de3..223d91f579 100644
|
||||
case QEvent::Move:
|
||||
d->updatePosition();
|
||||
--
|
||||
2.39.0
|
||||
2.40.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 052dba54ae335b42fdcd1c0c68c9fce0031ffe9e Mon Sep 17 00:00:00 2001
|
||||
From 9a3d7bc6cf8eea575e597ff1af03d87f7fbdc9aa Mon Sep 17 00:00:00 2001
|
||||
From: Fabian Kosmale <fabian.kosmale@qt.io>
|
||||
Date: Wed, 4 May 2022 09:10:54 +0200
|
||||
Subject: [PATCH 11/21] QQuickItem: Guard against cycles in
|
||||
Subject: [PATCH 06/19] QQuickItem: Guard against cycles in
|
||||
nextPrevItemInTabFocusChain
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
@ -37,7 +37,7 @@ Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
|
||||
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 75f1457816..9de244ed9e 100644
|
||||
index 33da9762d3..ec55fb2998 100644
|
||||
--- a/src/quick/items/qquickitem.cpp
|
||||
+++ b/src/quick/items/qquickitem.cpp
|
||||
@@ -59,6 +59,7 @@
|
||||
@ -118,5 +118,5 @@ index c8f251dbe1..c8ef36ee68 100644
|
||||
{
|
||||
if (!qt_tab_all_widgets())
|
||||
--
|
||||
2.39.0
|
||||
2.40.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 4884d7f5a3dbfddd865b594db51eeb4272565f76 Mon Sep 17 00:00:00 2001
|
||||
From c257eb6a0eeb159c670c9cf6b37d3009ec8879e5 Mon Sep 17 00:00:00 2001
|
||||
From: Fushan Wen <qydwhotmail@gmail.com>
|
||||
Date: Tue, 1 Nov 2022 22:35:24 +0800
|
||||
Subject: [PATCH 15/21] Don't convert QByteArray in `startDrag`
|
||||
Subject: [PATCH 07/19] Don't convert QByteArray in `startDrag`
|
||||
|
||||
QMimeData::setData expects the provided data to contain the correctly
|
||||
encoded QByteArray, so if the variant contains a QByteArray, then take
|
||||
@ -56,5 +56,5 @@ index 8321fcfeed..3b50370355 100644
|
||||
drag->setMimeData(mimeData);
|
||||
if (pixmapLoader.isReady()) {
|
||||
--
|
||||
2.39.0
|
||||
2.40.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 2574ff9d5c6e72d01dca283e66436cd90a64324d Mon Sep 17 00:00:00 2001
|
||||
From cbb5f2d37a07b75f9d340fd1e1f34a6d1e078eba Mon Sep 17 00:00:00 2001
|
||||
From: Hannah von Reth <vonreth@kde.org>
|
||||
Date: Sat, 5 Nov 2022 18:48:41 +0100
|
||||
Subject: [PATCH 16/21] Fix build after
|
||||
Subject: [PATCH 08/19] Fix build after
|
||||
95290f66b806a307b8da1f72f8fc2c69801933d0
|
||||
|
||||
---
|
||||
@ -22,5 +22,5 @@ index 3b50370355..383078b3b9 100644
|
||||
else
|
||||
mimeData->setData(it.key(), it.value().toString().toUtf8());
|
||||
--
|
||||
2.39.0
|
||||
2.40.0
|
||||
|
@ -1,36 +0,0 @@
|
||||
From 99ada3c3d329b6d7136b0425841dcaa654c9c05b Mon Sep 17 00:00:00 2001
|
||||
From: Marc Mutz <marc.mutz@qt.io>
|
||||
Date: Tue, 21 Dec 2021 09:20:17 +0100
|
||||
Subject: [PATCH 08/21] 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 <lars.knoll@qt.io>
|
||||
(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<T>::isComplex) {
|
||||
for (int i = 0; i < count; ++i)
|
||||
new (data + i) T(vector.at(i));
|
||||
- } else {
|
||||
+ } else if (count) {
|
||||
memcpy(data, static_cast<const void*>(vector.constData()), count * sizeof(T));
|
||||
}
|
||||
}
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 6d1dd8925f160d6ad02ea646eac638675bdf9f1c Mon Sep 17 00:00:00 2001
|
||||
From 3f7ac5540c8796ec2bb2b595ca6648035a0f8b18 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= <morten.sorvig@qt.io>
|
||||
Date: Fri, 7 May 2021 10:07:50 +0200
|
||||
Subject: [PATCH 17/21] Implement accessibility for QQuickWidget
|
||||
Subject: [PATCH 09/19] Implement accessibility for QQuickWidget
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
@ -46,7 +46,7 @@ Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
|
||||
create mode 100644 src/quickwidgets/qaccessiblequickwidgetfactory_p.h
|
||||
|
||||
diff --git a/src/quick/accessible/qaccessiblequickitem.cpp b/src/quick/accessible/qaccessiblequickitem.cpp
|
||||
index 85719fdc80..eb3df4d4cd 100644
|
||||
index ae1954ae8d..0692ce634d 100644
|
||||
--- a/src/quick/accessible/qaccessiblequickitem.cpp
|
||||
+++ b/src/quick/accessible/qaccessiblequickitem.cpp
|
||||
@@ -46,6 +46,7 @@
|
||||
@ -102,7 +102,7 @@ index 85719fdc80..eb3df4d4cd 100644
|
||||
} else {
|
||||
while (parent && !parent->d_func()->isAccessible)
|
||||
parent = parent->parentItem();
|
||||
@@ -188,7 +197,7 @@ QAccessible::State QAccessibleQuickItem::state() const
|
||||
@@ -193,7 +202,7 @@ QAccessible::State QAccessibleQuickItem::state() const
|
||||
QRect viewRect_ = viewRect();
|
||||
QRect itemRect = rect();
|
||||
|
||||
@ -561,5 +561,5 @@ index 2438e577ae..f46deb54ac 100644
|
||||
|
||||
load(qt_module)
|
||||
--
|
||||
2.39.0
|
||||
2.40.0
|
||||
|
@ -1,51 +0,0 @@
|
||||
From b964ba12bf118afbbf42cd9e4e7b4903ad107060 Mon Sep 17 00:00:00 2001
|
||||
From: Ulf Hermann <ulf.hermann@qt.io>
|
||||
Date: Thu, 3 Feb 2022 10:02:06 +0100
|
||||
Subject: [PATCH 09/21] 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 <andrei.golubev@qt.io>
|
||||
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
|
||||
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
|
||||
(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 e57cdd8278..94613598af 100644
|
||||
--- a/src/qml/jsruntime/qv4qobjectwrapper.cpp
|
||||
+++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp
|
||||
@@ -1145,8 +1145,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);
|
||||
@@ -1176,7 +1175,7 @@ void QObjectWrapper::destroyObject(bool lastCall)
|
||||
}
|
||||
}
|
||||
|
||||
- h->~Data();
|
||||
+ h->destroy();
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 99c990d55802c1ea782ca609ccd2bcdf39fb786f Mon Sep 17 00:00:00 2001
|
||||
From bdb3af04019b9134d6e815f4fe54317db63d0152 Mon Sep 17 00:00:00 2001
|
||||
From: Fushan Wen <qydwhotmail@gmail.com>
|
||||
Date: Sat, 5 Nov 2022 01:44:30 +0800
|
||||
Subject: [PATCH 18/21] Send ObjectShow event for visible components after
|
||||
Subject: [PATCH 10/19] Send ObjectShow event for visible components after
|
||||
initialized
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
@ -24,7 +24,7 @@ Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp
|
||||
index 9de244ed9e..462147adbd 100644
|
||||
index ec55fb2998..499fb61d1b 100644
|
||||
--- a/src/quick/items/qquickitem.cpp
|
||||
+++ b/src/quick/items/qquickitem.cpp
|
||||
@@ -5125,6 +5125,13 @@ void QQuickItem::componentComplete()
|
||||
@ -42,5 +42,5 @@ index 9de244ed9e..462147adbd 100644
|
||||
|
||||
QQuickStateGroup *QQuickItemPrivate::_states()
|
||||
--
|
||||
2.39.0
|
||||
2.40.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
From b91f07532b02f68161ec525bd44501d91ad19b38 Mon Sep 17 00:00:00 2001
|
||||
From 19afcf36b92dc36e83b613e4b9ee383f6beb02dc Mon Sep 17 00:00:00 2001
|
||||
From: Volker Hilsheimer <volker.hilsheimer@qt.io>
|
||||
Date: Wed, 9 Nov 2022 15:34:11 +0100
|
||||
Subject: [PATCH 19/21] QQuickItem: avoid emitting signals during destruction
|
||||
Subject: [PATCH 11/19] QQuickItem: avoid emitting signals during destruction
|
||||
|
||||
If a QQuickItem is in the QQuickItem destructor, then it is both unsafe
|
||||
and unnecessary to emit property change notifications. Connected code
|
||||
@ -29,7 +29,7 @@ Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
||||
2 files changed, 14 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp
|
||||
index 462147adbd..4cf73ff73d 100644
|
||||
index 499fb61d1b..5ee2a440a3 100644
|
||||
--- a/src/quick/items/qquickitem.cpp
|
||||
+++ b/src/quick/items/qquickitem.cpp
|
||||
@@ -2327,6 +2327,7 @@ QQuickItem::QQuickItem(QQuickItemPrivate &dd, QQuickItem *parent)
|
||||
@ -109,5 +109,5 @@ index 841d91bb40..ade8fb61f2 100644
|
||||
enum DirtyType {
|
||||
TransformOrigin = 0x00000001,
|
||||
--
|
||||
2.39.0
|
||||
2.40.0
|
||||
|
@ -1,43 +0,0 @@
|
||||
From f9faa4cfa0dbbac12cdf79e56a02b9aa0022018c Mon Sep 17 00:00:00 2001
|
||||
From: Marc Mutz <marc.mutz@kdab.com>
|
||||
Date: Tue, 16 Jul 2019 11:23:37 +0200
|
||||
Subject: [PATCH 12/21] QSGOpenGLDistanceFieldGlyphCache: fix multiplication
|
||||
result truncation
|
||||
|
||||
The type of the expression int * int is int, so truncation has already
|
||||
happened when the result is assigned to a qint64.
|
||||
|
||||
Fix by casting one of the multiplicants to qint64 before performing
|
||||
the multiplication. This multiplication cannot overflow, because int
|
||||
is 32-bit on all supported platforms.
|
||||
|
||||
The addition of 'size' to the pointer will still truncate the result,
|
||||
on 32bit platforms, but that check is in itself UB. A follow-up commit
|
||||
will fix the check, and with it the last truncation to 32bit.
|
||||
|
||||
Coverity-Id: 218769
|
||||
Pick-to: 6.3 6.2 5.15
|
||||
Change-Id: I0d71950695b9743db8c96d825e68bb1e9c47de02
|
||||
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
|
||||
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
|
||||
(cherry picked from commit cacfc1dbb9719c0ef55cff69dad0921ce1405438)
|
||||
---
|
||||
src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp b/src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp
|
||||
index eb4db0f85e..2c9868b335 100644
|
||||
--- a/src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp
|
||||
+++ b/src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp
|
||||
@@ -512,7 +512,7 @@ bool QSGRhiDistanceFieldGlyphCache::loadPregeneratedCache(const QRawFont &font)
|
||||
|
||||
int width = texInfo->allocatedArea.width();
|
||||
int height = texInfo->allocatedArea.height();
|
||||
- qint64 size = width * height;
|
||||
+ qint64 size = qint64(width) * height;
|
||||
if (reinterpret_cast<const char *>(textureData + size) > qtdfTableEnd) {
|
||||
qWarning("qtdf table too small in font '%s'.",
|
||||
qPrintable(font.familyName()));
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 1fb12800a8907680b821a8e8e29c5b428cbb64b6 Mon Sep 17 00:00:00 2001
|
||||
From 5ed173f4ba070bca6c9ec3335b84cc322885b01d Mon Sep 17 00:00:00 2001
|
||||
From: Harald Sitter <sitter@kde.org>
|
||||
Date: Mon, 28 Nov 2022 14:59:33 +0100
|
||||
Subject: [PATCH 20/21] a11y: track item enabled state
|
||||
Subject: [PATCH 12/19] a11y: track item enabled state
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
@ -18,10 +18,10 @@ Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
|
||||
2 files changed, 13 insertions(+)
|
||||
|
||||
diff --git a/src/quick/accessible/qaccessiblequickitem.cpp b/src/quick/accessible/qaccessiblequickitem.cpp
|
||||
index eb3df4d4cd..78e2ab302c 100644
|
||||
index 0692ce634d..a8df58d450 100644
|
||||
--- a/src/quick/accessible/qaccessiblequickitem.cpp
|
||||
+++ b/src/quick/accessible/qaccessiblequickitem.cpp
|
||||
@@ -210,6 +210,10 @@ QAccessible::State QAccessibleQuickItem::state() const
|
||||
@@ -215,6 +215,10 @@ QAccessible::State QAccessibleQuickItem::state() const
|
||||
if (role() == QAccessible::EditableText)
|
||||
if (auto ti = qobject_cast<QQuickTextInput *>(item()))
|
||||
state.passwordEdit = ti->echoMode() != QQuickTextInput::Normal;
|
||||
@ -33,7 +33,7 @@ index eb3df4d4cd..78e2ab302c 100644
|
||||
}
|
||||
|
||||
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp
|
||||
index 4cf73ff73d..dec0ae19ae 100644
|
||||
index 5ee2a440a3..c370d6e5c3 100644
|
||||
--- a/src/quick/items/qquickitem.cpp
|
||||
+++ b/src/quick/items/qquickitem.cpp
|
||||
@@ -6174,6 +6174,15 @@ void QQuickItemPrivate::setEffectiveEnableRecur(QQuickItem *scope, bool newEffec
|
||||
@ -53,5 +53,5 @@ index 4cf73ff73d..dec0ae19ae 100644
|
||||
}
|
||||
|
||||
--
|
||||
2.39.0
|
||||
2.40.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 8defe7bfcae2ac5cb6dc25bfe3678124b09cf6f9 Mon Sep 17 00:00:00 2001
|
||||
From a8fa6c930597b633367777044f4c0328012f6bd5 Mon Sep 17 00:00:00 2001
|
||||
From: Fabian Kosmale <fabian.kosmale@qt.io>
|
||||
Date: Tue, 1 Jun 2021 16:40:44 +0200
|
||||
Subject: [PATCH 21/21] Make QaccessibleQuickWidget private API
|
||||
Subject: [PATCH 13/19] Make QaccessibleQuickWidget private API
|
||||
|
||||
Its base class is private API, so it should be private API, too.
|
||||
|
||||
@ -83,5 +83,5 @@ index f46deb54ac..85d156b8a3 100644
|
||||
|
||||
SOURCES += \
|
||||
--
|
||||
2.39.0
|
||||
2.40.0
|
||||
|
@ -1,68 +0,0 @@
|
||||
From 6d844f0250d97acdf66fd0d9cdabd26588e72333 Mon Sep 17 00:00:00 2001
|
||||
From: Marc Mutz <marc.mutz@kdab.com>
|
||||
Date: Tue, 16 Jul 2019 11:31:01 +0200
|
||||
Subject: [PATCH 13/21] QSGOpenGLDistanceFieldGlyphCache: fix UB (ordering of
|
||||
pointers not from the same array)
|
||||
|
||||
The code performed out of bounds checks by adding the size of the
|
||||
buffer to a pointer and comparing the result to the the
|
||||
one-past-the-end pointer of the buffer.
|
||||
|
||||
This is UB, for three reasons:
|
||||
|
||||
- in one case, a qint64 is added to a pointer, silently truncating the
|
||||
result on 32bit platforms
|
||||
|
||||
- if the buffer overflow is large, the pointer value may wrap around,
|
||||
yielding a result that is numerically less than the end pointer, but
|
||||
still out-of-bounds.
|
||||
|
||||
- pointer order is only defined within a C array, plus one past the
|
||||
end. On failure, pointers outside that range are compared.
|
||||
|
||||
Fix by comparing distance(it, end) with the required size for the
|
||||
chunk to be written instead.
|
||||
|
||||
Pick-to: 6.3 6.2 5.15
|
||||
Change-Id: I356bb8c8a65a93b8b1c1eb7bac381dd64bea719e
|
||||
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
|
||||
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
|
||||
(cherry picked from commit 8d9bd6b381bfc759d575954801b683354ad6a790)
|
||||
---
|
||||
src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp b/src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp
|
||||
index 2c9868b335..2325a2665b 100644
|
||||
--- a/src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp
|
||||
+++ b/src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp
|
||||
@@ -446,7 +446,7 @@ bool QSGRhiDistanceFieldGlyphCache::loadPregeneratedCache(const QRawFont &font)
|
||||
|
||||
const char *textureRecord = allocatorData;
|
||||
for (int i = 0; i < textureCount; ++i, textureRecord += Qtdf::TextureRecordSize) {
|
||||
- if (textureRecord + Qtdf::TextureRecordSize > qtdfTableEnd) {
|
||||
+ if (qtdfTableEnd - textureRecord < Qtdf::TextureRecordSize) {
|
||||
qWarning("qtdf table too small in font '%s'.",
|
||||
qPrintable(font.familyName()));
|
||||
return false;
|
||||
@@ -462,7 +462,7 @@ bool QSGRhiDistanceFieldGlyphCache::loadPregeneratedCache(const QRawFont &font)
|
||||
|
||||
const char *glyphRecord = textureRecord;
|
||||
for (quint32 i = 0; i < glyphCount; ++i, glyphRecord += Qtdf::GlyphRecordSize) {
|
||||
- if (glyphRecord + Qtdf::GlyphRecordSize > qtdfTableEnd) {
|
||||
+ if (qtdfTableEnd - glyphRecord < Qtdf:: GlyphRecordSize) {
|
||||
qWarning("qtdf table too small in font '%s'.",
|
||||
qPrintable(font.familyName()));
|
||||
return false;
|
||||
@@ -513,7 +513,7 @@ bool QSGRhiDistanceFieldGlyphCache::loadPregeneratedCache(const QRawFont &font)
|
||||
int width = texInfo->allocatedArea.width();
|
||||
int height = texInfo->allocatedArea.height();
|
||||
qint64 size = qint64(width) * height;
|
||||
- if (reinterpret_cast<const char *>(textureData + size) > qtdfTableEnd) {
|
||||
+ if (qtdfTableEnd - reinterpret_cast<const char *>(textureData) < size) {
|
||||
qWarning("qtdf table too small in font '%s'.",
|
||||
qPrintable(font.familyName()));
|
||||
return false;
|
||||
--
|
||||
2.39.0
|
||||
|
113
0014-Qml-Don-t-crash-when-as-casting-to-type-with-errors.patch
Normal file
113
0014-Qml-Don-t-crash-when-as-casting-to-type-with-errors.patch
Normal file
@ -0,0 +1,113 @@
|
||||
From 7be5422134167fe6d9fd44ef683f407bbda1bce7 Mon Sep 17 00:00:00 2001
|
||||
From: Ulf Hermann <ulf.hermann@qt.io>
|
||||
Date: Tue, 30 Nov 2021 14:39:48 +0100
|
||||
Subject: [PATCH 14/19] Qml: Don't crash when as-casting to type with errors
|
||||
|
||||
Such types don't have a compilation unit, but we still know their names.
|
||||
|
||||
Pick-to: 6.2
|
||||
Fixes: QTBUG-98792
|
||||
Change-Id: I2db8dea3a5a02ec1492f7f7a054fd3ad4c6ad69a
|
||||
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
|
||||
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
||||
(cherry picked from commit e0cd201e91ae64b9c03e0128cd17656b00611fbb)
|
||||
---
|
||||
src/qml/qml/qqmltypewrapper.cpp | 6 ++++--
|
||||
src/qml/types/qqmlconnections.cpp | 2 +-
|
||||
tests/auto/qml/qqmllanguage/data/Broken.qml | 5 +++++
|
||||
tests/auto/qml/qqmllanguage/data/asBroken.qml | 6 ++++++
|
||||
tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp | 16 ++++++++++++++++
|
||||
5 files changed, 32 insertions(+), 3 deletions(-)
|
||||
create mode 100644 tests/auto/qml/qqmllanguage/data/Broken.qml
|
||||
create mode 100644 tests/auto/qml/qqmllanguage/data/asBroken.qml
|
||||
|
||||
diff --git a/src/qml/qml/qqmltypewrapper.cpp b/src/qml/qml/qqmltypewrapper.cpp
|
||||
index 175de8b936..a6ba4b8cb3 100644
|
||||
--- a/src/qml/qml/qqmltypewrapper.cpp
|
||||
+++ b/src/qml/qml/qqmltypewrapper.cpp
|
||||
@@ -419,8 +419,10 @@ ReturnedValue QQmlTypeWrapper::virtualInstanceOf(const Object *typeObject, const
|
||||
return Encode(false);
|
||||
|
||||
QQmlRefPointer<QQmlTypeData> td = qenginepriv->typeLoader.getType(typeWrapper->d()->type().sourceUrl());
|
||||
- ExecutableCompilationUnit *cu = td->compilationUnit();
|
||||
- myQmlType = qenginepriv->metaObjectForType(cu->metaTypeId);
|
||||
+ if (ExecutableCompilationUnit *cu = td->compilationUnit())
|
||||
+ myQmlType = qenginepriv->metaObjectForType(cu->metaTypeId);
|
||||
+ else
|
||||
+ return Encode(false); // It seems myQmlType has some errors, so we could not compile it.
|
||||
} else {
|
||||
myQmlType = qenginepriv->metaObjectForType(myTypeId);
|
||||
}
|
||||
diff --git a/src/qml/types/qqmlconnections.cpp b/src/qml/types/qqmlconnections.cpp
|
||||
index 29ed62cd39..aba930dfe1 100644
|
||||
--- a/src/qml/types/qqmlconnections.cpp
|
||||
+++ b/src/qml/types/qqmlconnections.cpp
|
||||
@@ -338,7 +338,7 @@ void QQmlConnections::connectSignalsToMethods()
|
||||
&& propName.at(2).isUpper()) {
|
||||
qmlWarning(this) << tr("Detected function \"%1\" in Connections element. "
|
||||
"This is probably intended to be a signal handler but no "
|
||||
- "signal of the target matches the name.").arg(propName);
|
||||
+ "signal of the \"%2\" target matches the name.").arg(propName).arg(target->metaObject()->className());
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/tests/auto/qml/qqmllanguage/data/Broken.qml b/tests/auto/qml/qqmllanguage/data/Broken.qml
|
||||
new file mode 100644
|
||||
index 0000000000..e24d9112a8
|
||||
--- /dev/null
|
||||
+++ b/tests/auto/qml/qqmllanguage/data/Broken.qml
|
||||
@@ -0,0 +1,5 @@
|
||||
+import QtQml 2.15
|
||||
+
|
||||
+QtObject {
|
||||
+ notThere: 5
|
||||
+}
|
||||
diff --git a/tests/auto/qml/qqmllanguage/data/asBroken.qml b/tests/auto/qml/qqmllanguage/data/asBroken.qml
|
||||
new file mode 100644
|
||||
index 0000000000..bd88d14c76
|
||||
--- /dev/null
|
||||
+++ b/tests/auto/qml/qqmllanguage/data/asBroken.qml
|
||||
@@ -0,0 +1,6 @@
|
||||
+import QtQml 2.15
|
||||
+
|
||||
+QtObject {
|
||||
+ id: self
|
||||
+ property var selfAsBroken: self as Broken
|
||||
+}
|
||||
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
|
||||
index bffb62c59e..97cc64991f 100644
|
||||
--- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
|
||||
+++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
|
||||
@@ -336,6 +336,7 @@ private slots:
|
||||
void bareInlineComponent();
|
||||
|
||||
void hangOnWarning();
|
||||
+ void objectAsBroken();
|
||||
|
||||
void ambiguousContainingType();
|
||||
|
||||
@@ -5876,6 +5877,21 @@ void tst_qqmllanguage::ambiguousContainingType()
|
||||
}
|
||||
}
|
||||
|
||||
+void tst_qqmllanguage::objectAsBroken()
|
||||
+{
|
||||
+ QQmlEngine engine;
|
||||
+ QQmlComponent c(&engine, testFileUrl("asBroken.qml"));
|
||||
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
|
||||
+ QScopedPointer<QObject> o(c.create());
|
||||
+ QVERIFY(!o.isNull());
|
||||
+ QVariant selfAsBroken = o->property("selfAsBroken");
|
||||
+ QVERIFY(selfAsBroken.isValid());
|
||||
+ // QCOMPARE(selfAsBroken.metaType(), QMetaType::fromType<std::nullptr_t>());
|
||||
+
|
||||
+ QQmlComponent b(&engine, testFileUrl("Broken.qml"));
|
||||
+ QVERIFY(b.isError());
|
||||
+}
|
||||
+
|
||||
QTEST_MAIN(tst_qqmllanguage)
|
||||
|
||||
#include "tst_qqmllanguage.moc"
|
||||
--
|
||||
2.40.0
|
||||
|
@ -1,38 +0,0 @@
|
||||
From 5f183c1a7b2afbe50b4071e6a862c1a6d53de7fb Mon Sep 17 00:00:00 2001
|
||||
From: Tony Leinonen <tony.leinonen@qt.io>
|
||||
Date: Thu, 21 Oct 2021 14:44:02 +0300
|
||||
Subject: [PATCH 14/21] Reset currentChanges if currentChanges is active when
|
||||
refilling listView
|
||||
|
||||
currentIndex was not getting updated because itemViewChangeSet was left
|
||||
active from previous interaction. Clear the changes if they are still
|
||||
active on refill.
|
||||
|
||||
Task-number: QTBUG-92809
|
||||
Pick-to: 6.2 5.15
|
||||
Change-Id: I81558a5e0bfe0f880851fff85370bd5be60a5391
|
||||
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
||||
(cherry picked from commit 2d8033a4ffb9ca60adee29d375491d7ed2a82747)
|
||||
|
||||
* asturmlechner 2021-11-09: Other part of 2d8033a4 is in qtquickcontrols2
|
||||
but only consists of tests.
|
||||
---
|
||||
src/quick/items/qquickitemview.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp
|
||||
index 010a0152e1..f8ad168a17 100644
|
||||
--- a/src/quick/items/qquickitemview.cpp
|
||||
+++ b/src/quick/items/qquickitemview.cpp
|
||||
@@ -1785,7 +1785,7 @@ void QQuickItemViewPrivate::refill(qreal from, qreal to)
|
||||
|
||||
do {
|
||||
bufferPause.stop();
|
||||
- if (currentChanges.hasPendingChanges() || bufferedChanges.hasPendingChanges()) {
|
||||
+ if (currentChanges.hasPendingChanges() || bufferedChanges.hasPendingChanges() || currentChanges.active) {
|
||||
currentChanges.reset();
|
||||
bufferedChanges.reset();
|
||||
releaseVisibleItems(reusableFlag);
|
||||
--
|
||||
2.39.0
|
||||
|
54
0015-Fix-missing-glyphs-when-using-NativeRendering.patch
Normal file
54
0015-Fix-missing-glyphs-when-using-NativeRendering.patch
Normal file
@ -0,0 +1,54 @@
|
||||
From d54b978c0cba2bf75e145c9e1b00d2a9ab495d70 Mon Sep 17 00:00:00 2001
|
||||
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||
Date: Mon, 19 Dec 2022 10:05:33 +0100
|
||||
Subject: [PATCH 15/19] Fix missing glyphs when using NativeRendering
|
||||
|
||||
When we look up glyphs with subpixel positions in the glyph cache,
|
||||
we use the calculated subpixel position (from a set of predefined
|
||||
subpixel positions) as key. In some very rare cases, we could end
|
||||
up with different subpixel positions when looking up an on-screen
|
||||
position than when we entered it into the cache, due to numerical
|
||||
differences when doing the calculation.
|
||||
|
||||
The reason for this was that when entering the glyph into the
|
||||
cache, we used the 16.6 fixed point representation, whereas when
|
||||
looking up, we used the unmodified float. In some cases, the
|
||||
converted fixed point approximation might snap to a different
|
||||
predefined subpixel position than the floating point equivalent.
|
||||
|
||||
To avoid this, we reuse the converted fixed point positions when
|
||||
looking up the glyphs in the cache.
|
||||
|
||||
[ChangeLog][Text] Fixed an issue where text using NativeRendering
|
||||
would sometimes be missing glyphs.
|
||||
|
||||
Pick-to: 5.15 6.2 6.4 6.5
|
||||
Fixes: QTBUG-108713
|
||||
Change-Id: Iecc264eb3d27e875c24257eaefcfb18a1a5fb5be
|
||||
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
|
||||
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
|
||||
(cherry picked from commit 4bad329985b75090c68a70cceee7edadc172d7ab)
|
||||
---
|
||||
src/quick/scenegraph/qsgdefaultglyphnode_p.cpp | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/quick/scenegraph/qsgdefaultglyphnode_p.cpp b/src/quick/scenegraph/qsgdefaultglyphnode_p.cpp
|
||||
index f912da5799..fd128aa06e 100644
|
||||
--- a/src/quick/scenegraph/qsgdefaultglyphnode_p.cpp
|
||||
+++ b/src/quick/scenegraph/qsgdefaultglyphnode_p.cpp
|
||||
@@ -839,9 +839,11 @@ void QSGTextMaskMaterial::populate(const QPointF &p,
|
||||
bool supportsSubPixelPositions = fontD->fontEngine->supportsSubPixelPositions();
|
||||
for (int i=0; i<glyphIndexes.size(); ++i) {
|
||||
QPointF glyphPosition = glyphPositions.at(i) + position;
|
||||
+ QFixedPoint fixedPointPosition = fixedPointPositions.at(i);
|
||||
+
|
||||
QFixed subPixelPosition;
|
||||
if (supportsSubPixelPositions)
|
||||
- subPixelPosition = fontD->fontEngine->subPixelPositionForX(QFixed::fromReal(glyphPosition.x()));
|
||||
+ subPixelPosition = fontD->fontEngine->subPixelPositionForX(QFixed::fromReal(fixedPointPosition.x.toReal() * glyphCacheScaleX));
|
||||
|
||||
QTextureGlyphCache::GlyphAndSubPixelPosition glyph(glyphIndexes.at(i), subPixelPosition);
|
||||
const QTextureGlyphCache::Coord &c = cache->coords.value(glyph);
|
||||
--
|
||||
2.40.0
|
||||
|
@ -0,0 +1,32 @@
|
||||
From 70b44dd18b9727e9aae857297265a751700a297e Mon Sep 17 00:00:00 2001
|
||||
From: Fushan Wen <qydwhotmail@gmail.com>
|
||||
Date: Tue, 10 Jan 2023 20:42:04 +0800
|
||||
Subject: [PATCH 16/19] Revert "Fix missing glyphs when using NativeRendering"
|
||||
|
||||
This reverts commit da5e53b649f50cd9cdd89dadbba16f05e4070be2.
|
||||
|
||||
It breaks fonts on Wayland when global scale > 100%.
|
||||
---
|
||||
src/quick/scenegraph/qsgdefaultglyphnode_p.cpp | 4 +---
|
||||
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/quick/scenegraph/qsgdefaultglyphnode_p.cpp b/src/quick/scenegraph/qsgdefaultglyphnode_p.cpp
|
||||
index fd128aa06e..f912da5799 100644
|
||||
--- a/src/quick/scenegraph/qsgdefaultglyphnode_p.cpp
|
||||
+++ b/src/quick/scenegraph/qsgdefaultglyphnode_p.cpp
|
||||
@@ -839,11 +839,9 @@ void QSGTextMaskMaterial::populate(const QPointF &p,
|
||||
bool supportsSubPixelPositions = fontD->fontEngine->supportsSubPixelPositions();
|
||||
for (int i=0; i<glyphIndexes.size(); ++i) {
|
||||
QPointF glyphPosition = glyphPositions.at(i) + position;
|
||||
- QFixedPoint fixedPointPosition = fixedPointPositions.at(i);
|
||||
-
|
||||
QFixed subPixelPosition;
|
||||
if (supportsSubPixelPositions)
|
||||
- subPixelPosition = fontD->fontEngine->subPixelPositionForX(QFixed::fromReal(fixedPointPosition.x.toReal() * glyphCacheScaleX));
|
||||
+ subPixelPosition = fontD->fontEngine->subPixelPositionForX(QFixed::fromReal(glyphPosition.x()));
|
||||
|
||||
QTextureGlyphCache::GlyphAndSubPixelPosition glyph(glyphIndexes.at(i), subPixelPosition);
|
||||
const QTextureGlyphCache::Coord &c = cache->coords.value(glyph);
|
||||
--
|
||||
2.40.0
|
||||
|
@ -0,0 +1,57 @@
|
||||
From c1e41d061329cc886a56477c8c2fd0e81add7780 Mon Sep 17 00:00:00 2001
|
||||
From: Jaeyoon Jung <jaeyoon.jung@lge.com>
|
||||
Date: Fri, 19 Feb 2021 08:11:57 +0900
|
||||
Subject: [PATCH 17/19] QQmlImportDatabase: Make sure the newly added import
|
||||
path be first
|
||||
|
||||
If it already exists in the import list, move it to the first place.
|
||||
This is as per the description of QQmlEngine::addImportPath:
|
||||
| The newly added path will be first in the importPathList().
|
||||
|
||||
Change-Id: I782d355c46ada2a46cff72e63326208f39028e01
|
||||
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
|
||||
(cherry picked from commit 3e413803c698d21f398daf0450c8f501204eb167)
|
||||
---
|
||||
src/qml/qml/qqmlimport.cpp | 9 ++++++---
|
||||
tests/auto/qml/qqmlimport/tst_qqmlimport.cpp | 5 +++++
|
||||
2 files changed, 11 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/qml/qml/qqmlimport.cpp b/src/qml/qml/qqmlimport.cpp
|
||||
index 10c6c41338..39bfcdc999 100644
|
||||
--- a/src/qml/qml/qqmlimport.cpp
|
||||
+++ b/src/qml/qml/qqmlimport.cpp
|
||||
@@ -2120,9 +2120,12 @@ void QQmlImportDatabase::addImportPath(const QString& path)
|
||||
cPath.replace(Backslash, Slash);
|
||||
}
|
||||
|
||||
- if (!cPath.isEmpty()
|
||||
- && !fileImportPath.contains(cPath))
|
||||
- fileImportPath.prepend(cPath);
|
||||
+ if (!cPath.isEmpty()) {
|
||||
+ if (fileImportPath.contains(cPath))
|
||||
+ fileImportPath.move(fileImportPath.indexOf(cPath), 0);
|
||||
+ else
|
||||
+ fileImportPath.prepend(cPath);
|
||||
+ }
|
||||
}
|
||||
|
||||
/*!
|
||||
diff --git a/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp b/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp
|
||||
index 9c865b3f73..1f788f7a7f 100644
|
||||
--- a/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp
|
||||
+++ b/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp
|
||||
@@ -154,6 +154,11 @@ void tst_QQmlImport::importPathOrder()
|
||||
engine.addImportPath(QT_QMLTEST_DATADIR);
|
||||
expectedImportPaths.prepend(QT_QMLTEST_DATADIR);
|
||||
QCOMPARE(expectedImportPaths, engine.importPathList());
|
||||
+
|
||||
+ // Add qml2Imports again to make it the first of the list
|
||||
+ engine.addImportPath(qml2Imports);
|
||||
+ expectedImportPaths.move(expectedImportPaths.indexOf(qml2Imports), 0);
|
||||
+ QCOMPARE(expectedImportPaths, engine.importPathList());
|
||||
}
|
||||
|
||||
Q_DECLARE_METATYPE(QQmlImports::ImportVersion)
|
||||
--
|
||||
2.40.0
|
||||
|
102
0018-QQuickState-when-handle-QJSValue-properties-correctl.patch
Normal file
102
0018-QQuickState-when-handle-QJSValue-properties-correctl.patch
Normal file
@ -0,0 +1,102 @@
|
||||
From 0e1bed3c3e27d44d86d6f68a8b93b96a4821575c Mon Sep 17 00:00:00 2001
|
||||
From: Fabian Kosmale <fabian.kosmale@qt.io>
|
||||
Date: Wed, 20 Jul 2022 11:44:43 +0200
|
||||
Subject: [PATCH 18/19] QQuickState::when: handle QJSValue properties correctly
|
||||
|
||||
If one assigns a binding whose evaluation results in a QJSValue, care
|
||||
must be take to correctly convert it into a bool. Instead of directly
|
||||
using QVariant::value<bool>, one needs to first extract the QJSValue,
|
||||
and only convert it to bool afterwards.
|
||||
This is necessary due to the custom binding evaluation we're doing to
|
||||
avoid state oscillation.
|
||||
Amends a8c729d83979fb0b9939044d246e73b1d578e65b.
|
||||
|
||||
Fixes: QTBUG-105000
|
||||
Pick-to: 6.4 6.3 6.2 5.15
|
||||
Change-Id: I4b093b48edecf9e0f09d2b54d10c2ff527f24ac3
|
||||
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
|
||||
(cherry picked from commit 2c31d25a44b1221c151681e1bb68ef78618e0166)
|
||||
---
|
||||
src/quick/util/qquickstategroup.cpp | 10 ++++++++--
|
||||
.../quick/qquickstates/data/jsValueWhen.qml | 18 ++++++++++++++++++
|
||||
.../quick/qquickstates/tst_qquickstates.cpp | 11 +++++++++++
|
||||
3 files changed, 37 insertions(+), 2 deletions(-)
|
||||
create mode 100644 tests/auto/quick/qquickstates/data/jsValueWhen.qml
|
||||
|
||||
diff --git a/src/quick/util/qquickstategroup.cpp b/src/quick/util/qquickstategroup.cpp
|
||||
index 7cb3138618..f732b1eb4a 100644
|
||||
--- a/src/quick/util/qquickstategroup.cpp
|
||||
+++ b/src/quick/util/qquickstategroup.cpp
|
||||
@@ -381,8 +381,14 @@ bool QQuickStateGroupPrivate::updateAutoState()
|
||||
const auto potentialWhenBinding = QQmlPropertyPrivate::binding(whenProp);
|
||||
// if there is a binding, the value in when might not be up-to-date at this point
|
||||
// so we manually reevaluate the binding
|
||||
- if (auto abstractBinding = dynamic_cast<QQmlBinding *>(potentialWhenBinding))
|
||||
- whenValue = abstractBinding->evaluate().toBool();
|
||||
+ if (auto abstractBinding = dynamic_cast<QQmlBinding *>(potentialWhenBinding)) {
|
||||
+ QVariant evalResult = abstractBinding->evaluate();
|
||||
+ if (evalResult.userType() == qMetaTypeId<QJSValue>())
|
||||
+ whenValue = evalResult.value<QJSValue>().toBool();
|
||||
+ else
|
||||
+ whenValue = evalResult.toBool();
|
||||
+ }
|
||||
+
|
||||
if (whenValue) {
|
||||
if (stateChangeDebug())
|
||||
qWarning() << "Setting auto state due to expression";
|
||||
diff --git a/tests/auto/quick/qquickstates/data/jsValueWhen.qml b/tests/auto/quick/qquickstates/data/jsValueWhen.qml
|
||||
new file mode 100644
|
||||
index 0000000000..6d5eb1600c
|
||||
--- /dev/null
|
||||
+++ b/tests/auto/quick/qquickstates/data/jsValueWhen.qml
|
||||
@@ -0,0 +1,18 @@
|
||||
+import QtQuick 2.15
|
||||
+
|
||||
+Item {
|
||||
+ id: root
|
||||
+ property var prop: null
|
||||
+ property bool works: false
|
||||
+ states: [
|
||||
+ State {
|
||||
+ name: "mystate"
|
||||
+ when: root.prop
|
||||
+ PropertyChanges {
|
||||
+ target: root
|
||||
+ works: "works"
|
||||
+ }
|
||||
+ }
|
||||
+ ]
|
||||
+ Component.onCompleted: root.prop = new Object
|
||||
+}
|
||||
diff --git a/tests/auto/quick/qquickstates/tst_qquickstates.cpp b/tests/auto/quick/qquickstates/tst_qquickstates.cpp
|
||||
index aa55b42935..26e86672b0 100644
|
||||
--- a/tests/auto/quick/qquickstates/tst_qquickstates.cpp
|
||||
+++ b/tests/auto/quick/qquickstates/tst_qquickstates.cpp
|
||||
@@ -188,6 +188,7 @@ private slots:
|
||||
void revertListMemoryLeak();
|
||||
void duplicateStateName();
|
||||
void trivialWhen();
|
||||
+ void jsValueWhen();
|
||||
void noStateOsciallation();
|
||||
void parentChangeCorrectReversal();
|
||||
void revertNullObjectBinding();
|
||||
@@ -1734,6 +1735,16 @@ void tst_qquickstates::trivialWhen()
|
||||
QVERIFY(c.create());
|
||||
}
|
||||
|
||||
+void tst_qquickstates::jsValueWhen()
|
||||
+{
|
||||
+ QQmlEngine engine;
|
||||
+
|
||||
+ QQmlComponent c(&engine, testFileUrl("jsValueWhen.qml"));
|
||||
+ QScopedPointer<QObject> root(c.create());
|
||||
+ QVERIFY(root);
|
||||
+ QVERIFY(root->property("works").toBool());
|
||||
+}
|
||||
+
|
||||
void tst_qquickstates::noStateOsciallation()
|
||||
{
|
||||
QQmlEngine engine;
|
||||
--
|
||||
2.40.0
|
||||
|
162
0019-Models-Avoid-crashes-when-deleting-cache-items.patch
Normal file
162
0019-Models-Avoid-crashes-when-deleting-cache-items.patch
Normal file
@ -0,0 +1,162 @@
|
||||
From 89bf481b9b14f038c5e16421a7fce6dc6523785f Mon Sep 17 00:00:00 2001
|
||||
From: Ulf Hermann <ulf.hermann@qt.io>
|
||||
Date: Wed, 29 Mar 2023 16:36:03 +0200
|
||||
Subject: [PATCH 19/19] Models: Avoid crashes when deleting cache items
|
||||
|
||||
Pick-to: 6.5 6.2 5.15
|
||||
Fixes: QTBUG-91425
|
||||
Change-Id: I58cf9ee29922f83fc6621f771b80ed557b31f106
|
||||
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
|
||||
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
|
||||
(cherry picked from commit 0cfdecba54e4f40468c4c9a8a6668cc1bc0eff65)
|
||||
|
||||
* asturmlechner 2023-04-08: Resolve conflict with dev branch commit
|
||||
c2d490a2385ea6f389340a296acaac0fa198c8b9 (qAsConst to std::as_const)
|
||||
---
|
||||
src/qmlmodels/qqmldelegatemodel.cpp | 23 ++++++---
|
||||
.../qml/qqmldelegatemodel/data/deleteRace.qml | 50 +++++++++++++++++++
|
||||
.../tst_qqmldelegatemodel.cpp | 12 +++++
|
||||
3 files changed, 78 insertions(+), 7 deletions(-)
|
||||
create mode 100644 tests/auto/qml/qqmldelegatemodel/data/deleteRace.qml
|
||||
|
||||
diff --git a/src/qmlmodels/qqmldelegatemodel.cpp b/src/qmlmodels/qqmldelegatemodel.cpp
|
||||
index bc6b2447af..551e0ede95 100644
|
||||
--- a/src/qmlmodels/qqmldelegatemodel.cpp
|
||||
+++ b/src/qmlmodels/qqmldelegatemodel.cpp
|
||||
@@ -1883,10 +1883,15 @@ void QQmlDelegateModelPrivate::emitChanges()
|
||||
for (int i = 1; i < m_groupCount; ++i)
|
||||
QQmlDelegateModelGroupPrivate::get(m_groups[i])->emitModelUpdated(reset);
|
||||
|
||||
- auto cacheCopy = m_cache; // deliberate; emitChanges may alter m_cache
|
||||
- for (QQmlDelegateModelItem *cacheItem : qAsConst(cacheCopy)) {
|
||||
- if (cacheItem->attached)
|
||||
- cacheItem->attached->emitChanges();
|
||||
+ // emitChanges may alter m_cache and delete items
|
||||
+ QVarLengthArray<QPointer<QQmlDelegateModelAttached>> attachedObjects;
|
||||
+ attachedObjects.reserve(m_cache.length());
|
||||
+ for (const QQmlDelegateModelItem *cacheItem : qAsConst(m_cache))
|
||||
+ attachedObjects.append(cacheItem->attached);
|
||||
+
|
||||
+ for (const QPointer<QQmlDelegateModelAttached> &attached : qAsConst(attachedObjects)) {
|
||||
+ if (attached && attached->m_cacheItem)
|
||||
+ attached->emitChanges();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2707,20 +2712,24 @@ void QQmlDelegateModelAttached::emitChanges()
|
||||
m_previousGroups = m_cacheItem->groups;
|
||||
|
||||
int indexChanges = 0;
|
||||
- for (int i = 1; i < m_cacheItem->metaType->groupCount; ++i) {
|
||||
+ const int groupCount = m_cacheItem->metaType->groupCount;
|
||||
+ for (int i = 1; i < groupCount; ++i) {
|
||||
if (m_previousIndex[i] != m_currentIndex[i]) {
|
||||
m_previousIndex[i] = m_currentIndex[i];
|
||||
indexChanges |= (1 << i);
|
||||
}
|
||||
}
|
||||
|
||||
+ // Don't access m_cacheItem anymore once we've started sending signals.
|
||||
+ // We don't own it and someone might delete it.
|
||||
+
|
||||
int notifierId = 0;
|
||||
const QMetaObject *meta = metaObject();
|
||||
- for (int i = 1; i < m_cacheItem->metaType->groupCount; ++i, ++notifierId) {
|
||||
+ for (int i = 1; i < groupCount; ++i, ++notifierId) {
|
||||
if (groupChanges & (1 << i))
|
||||
QMetaObject::activate(this, meta, notifierId, nullptr);
|
||||
}
|
||||
- for (int i = 1; i < m_cacheItem->metaType->groupCount; ++i, ++notifierId) {
|
||||
+ for (int i = 1; i < groupCount; ++i, ++notifierId) {
|
||||
if (indexChanges & (1 << i))
|
||||
QMetaObject::activate(this, meta, notifierId, nullptr);
|
||||
}
|
||||
diff --git a/tests/auto/qml/qqmldelegatemodel/data/deleteRace.qml b/tests/auto/qml/qqmldelegatemodel/data/deleteRace.qml
|
||||
new file mode 100644
|
||||
index 0000000000..23874970e7
|
||||
--- /dev/null
|
||||
+++ b/tests/auto/qml/qqmldelegatemodel/data/deleteRace.qml
|
||||
@@ -0,0 +1,50 @@
|
||||
+import QtQuick 2.15
|
||||
+import QtQml.Models 2.15
|
||||
+
|
||||
+Item {
|
||||
+ DelegateModel {
|
||||
+ id: delegateModel
|
||||
+ model: ListModel {
|
||||
+ id: sourceModel
|
||||
+
|
||||
+ ListElement { title: "foo" }
|
||||
+ ListElement { title: "bar" }
|
||||
+
|
||||
+ function clear() {
|
||||
+ if (count > 0)
|
||||
+ remove(0, count);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ groups: [
|
||||
+ DelegateModelGroup { name: "selectedItems" }
|
||||
+ ]
|
||||
+
|
||||
+ delegate: Text {
|
||||
+ height: DelegateModel.inSelectedItems ? implicitHeight * 2 : implicitHeight
|
||||
+ Component.onCompleted: {
|
||||
+ if (index === 0)
|
||||
+ DelegateModel.inSelectedItems = true;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ Component.onCompleted: {
|
||||
+ items.create(0)
|
||||
+ items.create(1)
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ ListView {
|
||||
+ anchors.fill: parent
|
||||
+ model: delegateModel
|
||||
+ }
|
||||
+
|
||||
+ Timer {
|
||||
+ running: true
|
||||
+ interval: 10
|
||||
+ onTriggered: sourceModel.clear()
|
||||
+ }
|
||||
+
|
||||
+ property int count: delegateModel.items.count
|
||||
+}
|
||||
+
|
||||
diff --git a/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp b/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
|
||||
index 1722447830..f473cff75f 100644
|
||||
--- a/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
|
||||
+++ b/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
|
||||
@@ -50,6 +50,7 @@ private slots:
|
||||
void qtbug_86017();
|
||||
void contextAccessedByHandler();
|
||||
void redrawUponColumnChange();
|
||||
+ void deleteRace();
|
||||
};
|
||||
|
||||
class AbstractItemModel : public QAbstractItemModel
|
||||
@@ -213,6 +214,17 @@ void tst_QQmlDelegateModel::redrawUponColumnChange()
|
||||
QCOMPARE(item->property("text").toString(), "Coconut");
|
||||
}
|
||||
|
||||
+void tst_QQmlDelegateModel::deleteRace()
|
||||
+{
|
||||
+ QQmlEngine engine;
|
||||
+ QQmlComponent c(&engine, testFileUrl("deleteRace.qml"));
|
||||
+ QVERIFY2(c.isReady(), qPrintable(c.errorString()));
|
||||
+ QScopedPointer<QObject> o(c.create());
|
||||
+ QVERIFY(!o.isNull());
|
||||
+ QTRY_COMPARE(o->property("count").toInt(), 2);
|
||||
+ QTRY_COMPARE(o->property("count").toInt(), 0);
|
||||
+}
|
||||
+
|
||||
QTEST_MAIN(tst_QQmlDelegateModel)
|
||||
|
||||
#include "tst_qqmldelegatemodel.moc"
|
||||
--
|
||||
2.40.0
|
||||
|
@ -11,8 +11,8 @@
|
||||
|
||||
Summary: Qt5 - QtDeclarative component
|
||||
Name: qt5-%{qt_module}
|
||||
Version: 5.15.8
|
||||
Release: 4.0.riscv64%{?dist}
|
||||
Version: 5.15.9
|
||||
Release: 1.0.riscv64%{?dist}
|
||||
|
||||
# See LICENSE.GPL LICENSE.LGPL LGPL_EXCEPTION.txt, for details
|
||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||
@ -27,28 +27,26 @@ Source5: qv4global_p-multilib.h
|
||||
## upstream patches
|
||||
## repo: https://invent.kde.org/qt/qt/qtdeclarative
|
||||
## branch: kde/5.15
|
||||
## git format-patch v5.15.8-lts-lgpl
|
||||
Patch1: 0001-Document-that-StyledText-also-supports-nbsp-and-quot.patch
|
||||
Patch2: 0002-Support-apos-in-styled-text.patch
|
||||
Patch3: 0003-Remove-unused-QPointer-QQuickPointerMask.patch
|
||||
Patch4: 0004-QQmlDelegateModel-Refresh-the-view-when-a-column-is-.patch
|
||||
Patch5: 0005-Fix-sweep-step-for-tainted-QObject-JavaScript-wrappe.patch
|
||||
Patch6: 0006-Fix-TapHandler-so-that-it-actually-registers-a-tap.patch
|
||||
Patch7: 0007-Revert-Fix-TapHandler-so-that-it-actually-registers-.patch
|
||||
Patch8: 0008-QQmlJs-FixedPoolArray-fix-UB-precondition-violation-.patch
|
||||
Patch9: 0009-V4-Do-not-call-dtor-of-an-object-we-continue-to-use.patch
|
||||
Patch10: 0010-Make-sure-QQuickWidget-and-its-offscreen-window-s-sc.patch
|
||||
Patch11: 0011-QQuickItem-Guard-against-cycles-in-nextPrevItemInTab.patch
|
||||
Patch12: 0012-QSGOpenGLDistanceFieldGlyphCache-fix-multiplication-.patch
|
||||
Patch13: 0013-QSGOpenGLDistanceFieldGlyphCache-fix-UB-ordering-of-.patch
|
||||
Patch14: 0014-Reset-currentChanges-if-currentChanges-is-active-whe.patch
|
||||
Patch15: 0015-Don-t-convert-QByteArray-in-startDrag.patch
|
||||
Patch16: 0016-Fix-build-after-95290f66b806a307b8da1f72f8fc2c698019.patch
|
||||
Patch17: 0017-Implement-accessibility-for-QQuickWidget.patch
|
||||
Patch18: 0018-Send-ObjectShow-event-for-visible-components-after-i.patch
|
||||
Patch19: 0019-QQuickItem-avoid-emitting-signals-during-destruction.patch
|
||||
Patch20: 0020-a11y-track-item-enabled-state.patch
|
||||
Patch21: 0021-Make-QaccessibleQuickWidget-private-API.patch
|
||||
## git format-patch v5.15.9-lts-lgpl
|
||||
Patch1: 0001-Remove-unused-QPointer-QQuickPointerMask.patch
|
||||
Patch2: 0002-QQmlDelegateModel-Refresh-the-view-when-a-column-is-.patch
|
||||
Patch3: 0003-Fix-TapHandler-so-that-it-actually-registers-a-tap.patch
|
||||
Patch4: 0004-Revert-Fix-TapHandler-so-that-it-actually-registers-.patch
|
||||
Patch5: 0005-Make-sure-QQuickWidget-and-its-offscreen-window-s-sc.patch
|
||||
Patch6: 0006-QQuickItem-Guard-against-cycles-in-nextPrevItemInTab.patch
|
||||
Patch7: 0007-Don-t-convert-QByteArray-in-startDrag.patch
|
||||
Patch8: 0008-Fix-build-after-95290f66b806a307b8da1f72f8fc2c698019.patch
|
||||
Patch9: 0009-Implement-accessibility-for-QQuickWidget.patch
|
||||
Patch10: 0010-Send-ObjectShow-event-for-visible-components-after-i.patch
|
||||
Patch11: 0011-QQuickItem-avoid-emitting-signals-during-destruction.patch
|
||||
Patch12: 0012-a11y-track-item-enabled-state.patch
|
||||
Patch13: 0013-Make-QaccessibleQuickWidget-private-API.patch
|
||||
Patch14: 0014-Qml-Don-t-crash-when-as-casting-to-type-with-errors.patch
|
||||
Patch15: 0015-Fix-missing-glyphs-when-using-NativeRendering.patch
|
||||
Patch16: 0016-Revert-Fix-missing-glyphs-when-using-NativeRendering.patch
|
||||
Patch17: 0017-QQmlImportDatabase-Make-sure-the-newly-added-import-.patch
|
||||
Patch18: 0018-QQuickState-when-handle-QJSValue-properties-correctl.patch
|
||||
Patch19: 0019-Models-Avoid-crashes-when-deleting-cache-items.patch
|
||||
|
||||
|
||||
## upstreamable patches
|
||||
@ -242,9 +240,12 @@ make check -k -C tests ||:
|
||||
|
||||
|
||||
%changelog
|
||||
* Thu Mar 29 2023 David Abudrachmanov <davidlt@rivosinc.com> - 5.15.8-4.0.riscv64
|
||||
* Sat May 13 2023 David Abudrachmanov <davidlt@rivosinc.com> - 5.15.9-1.0.riscv64
|
||||
- Link to libatomic on riscv64
|
||||
|
||||
* Tue Apr 11 2023 Jan Grulich <jgrulich@redhat.com> - 5.15.9-1
|
||||
- 5.15.9
|
||||
|
||||
* Wed Mar 15 2023 Neal Gompa <ngompa@fedoraproject.org> - 5.15.8-4
|
||||
- Backport fix for crashes in V4 JIT (#2177696)
|
||||
|
||||
|
3
sources
3
sources
@ -1,2 +1 @@
|
||||
SHA512 (qtdeclarative-everywhere-opensource-src-5.15.6.tar.xz) = a4824b6ec2de5e78819b726850767db6d4280208d6cc985219f4c33b6b0dcd6194557f32b577df97b0596d157190aa9c00e99bf6879554936a356fa7afe8a7d5
|
||||
SHA512 (qtdeclarative-everywhere-opensource-src-5.15.8.tar.xz) = c611cc1d25b7eea1da3e5932d253d024459044d8fff6a31066033ea5867dd20aeb183b2d2ba8a2ca71cf263fc1921126509212dd43ab680134e7a9df8d937d73
|
||||
SHA512 (qtdeclarative-everywhere-opensource-src-5.15.9.tar.xz) = ada3e32f42270899d92c46f0c0b8cd78028cf2e658ac60b3745c804ec494fb1fc6f31a670668074433b3e702f81524415ef132a757ca80151eb13d0a19352af7
|
||||
|
Loading…
Reference in New Issue
Block a user