Accepting request 1208423 from KDE:Qt6
OBS-URL: https://build.opensuse.org/request/show/1208423 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/qt6-declarative?expand=0&rev=41
This commit is contained in:
commit
8e297971a8
@ -0,0 +1,45 @@
|
||||
From e6e3da4de8fac7f52eb2591cb95a04ab413f8ace Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Olivier=20De=20Canni=C3=A8re?= <olivier.decanniere@qt.io>
|
||||
Date: Wed, 9 Oct 2024 09:41:27 +0200
|
||||
Subject: [PATCH] Compiler: Wrap raw string literals in QStringLiteral in
|
||||
generated code
|
||||
|
||||
Amends e7146cd98700c29802214a39a4cefd9db146c97a
|
||||
|
||||
Fixes: QTBUG-129797
|
||||
Change-Id: I5dc48412cf29bd2de877dd681ea309a6e74d75c5
|
||||
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
|
||||
(cherry picked from commit d63c560ec4ce79c1bb24e1a01a20de41706dd039)
|
||||
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
||||
---
|
||||
src/qmlcompiler/qqmljscodegenerator.cpp | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/qmlcompiler/qqmljscodegenerator.cpp b/src/qmlcompiler/qqmljscodegenerator.cpp
|
||||
index 807168ca09..e5622fe6f9 100644
|
||||
--- a/src/qmlcompiler/qqmljscodegenerator.cpp
|
||||
+++ b/src/qmlcompiler/qqmljscodegenerator.cpp
|
||||
@@ -77,16 +77,16 @@ QString QQmlJSCodeGenerator::compositeListMetaType(const QString &elementName) c
|
||||
{
|
||||
return u"QQmlPrivate::compositeListMetaType(aotContext->compilationUnit, "_s
|
||||
+ (m_jsUnitGenerator->hasStringId(elementName)
|
||||
- ? QString::number(m_jsUnitGenerator->getStringId(elementName))
|
||||
- : u'"' + elementName + u'"') + u")"_s;
|
||||
+ ? QString::number(m_jsUnitGenerator->getStringId(elementName)) + u')'
|
||||
+ : u"QStringLiteral(\"%1\"))"_s.arg(elementName));
|
||||
}
|
||||
|
||||
QString QQmlJSCodeGenerator::compositeMetaType(const QString &elementName) const
|
||||
{
|
||||
return u"QQmlPrivate::compositeMetaType(aotContext->compilationUnit, "_s
|
||||
+ (m_jsUnitGenerator->hasStringId(elementName)
|
||||
- ? QString::number(m_jsUnitGenerator->getStringId(elementName))
|
||||
- : u'"' + elementName + u'"') + u")"_s;
|
||||
+ ? QString::number(m_jsUnitGenerator->getStringId(elementName)) + u')'
|
||||
+ : u"QStringLiteral(\"%1\"))"_s.arg(elementName));
|
||||
}
|
||||
|
||||
QString QQmlJSCodeGenerator::metaObject(const QQmlJSScope::ConstPtr &objectType)
|
||||
--
|
||||
2.47.0
|
||||
|
420
0001-Revert-QQmlDelegateModel-fix-delegates-not-being-cre.patch
Normal file
420
0001-Revert-QQmlDelegateModel-fix-delegates-not-being-cre.patch
Normal file
@ -0,0 +1,420 @@
|
||||
From 3330731d0cb221477ab3d856db032126403ae6a0 Mon Sep 17 00:00:00 2001
|
||||
From: Mitch Curtis <mitch.curtis@qt.io>
|
||||
Date: Tue, 24 Sep 2024 08:18:14 +0800
|
||||
Subject: [PATCH 1/2] Revert "QQmlDelegateModel: fix delegates not being
|
||||
created in certain cases"
|
||||
|
||||
This reverts commit 6561344dd2d1ba69abe6edec4fe340b256da9e13. It needs
|
||||
to be fixed in a different way.
|
||||
|
||||
Fixes: QTBUG-127340
|
||||
Pick-to: 6.7 6.5
|
||||
Change-Id: I8503b22a5257e0fb5ee11a1bdf83d3dcab4a600a
|
||||
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
||||
(cherry picked from commit 281f620ceea03e7a222d796ae0cca917a9778368)
|
||||
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
||||
---
|
||||
src/qmlmodels/qqmldelegatemodel.cpp | 61 +++-----
|
||||
src/qmlmodels/qqmldelegatemodel_p_p.h | 2 -
|
||||
.../auto/qml/qqmldelegatemodel/CMakeLists.txt | 1 -
|
||||
.../auto/qml/qqmldelegatemodel/data/reset.qml | 28 ----
|
||||
.../data/resetInQAIMConstructor.qml | 28 ----
|
||||
.../tst_qqmldelegatemodel.cpp | 135 ++----------------
|
||||
6 files changed, 29 insertions(+), 226 deletions(-)
|
||||
delete mode 100644 tests/auto/qml/qqmldelegatemodel/data/reset.qml
|
||||
delete mode 100644 tests/auto/qml/qqmldelegatemodel/data/resetInQAIMConstructor.qml
|
||||
|
||||
diff --git a/src/qmlmodels/qqmldelegatemodel.cpp b/src/qmlmodels/qqmldelegatemodel.cpp
|
||||
index 9af58d7a22..7cfa662aa6 100644
|
||||
--- a/src/qmlmodels/qqmldelegatemodel.cpp
|
||||
+++ b/src/qmlmodels/qqmldelegatemodel.cpp
|
||||
@@ -172,7 +172,6 @@ QQmlDelegateModelPrivate::QQmlDelegateModelPrivate(QQmlContext *ctxt)
|
||||
, m_transaction(false)
|
||||
, m_incubatorCleanupScheduled(false)
|
||||
, m_waitingToFetchMore(false)
|
||||
- , m_maybeResetRoleNames(false)
|
||||
, m_cacheItems(nullptr)
|
||||
, m_items(nullptr)
|
||||
, m_persistedItems(nullptr)
|
||||
@@ -366,7 +365,6 @@ void QQmlDelegateModelPrivate::connectToAbstractItemModel()
|
||||
QObject::connect(aim, &QAbstractItemModel::dataChanged, q, &QQmlDelegateModel::_q_dataChanged);
|
||||
QObject::connect(aim, &QAbstractItemModel::rowsMoved, q, &QQmlDelegateModel::_q_rowsMoved);
|
||||
QObject::connect(aim, &QAbstractItemModel::modelAboutToBeReset, q, &QQmlDelegateModel::_q_modelAboutToBeReset);
|
||||
- QObject::connect(aim, &QAbstractItemModel::modelReset, q, &QQmlDelegateModel::handleModelReset);
|
||||
QObject::connect(aim, &QAbstractItemModel::layoutChanged, q, &QQmlDelegateModel::_q_layoutChanged);
|
||||
}
|
||||
|
||||
@@ -387,7 +385,6 @@ void QQmlDelegateModelPrivate::disconnectFromAbstractItemModel()
|
||||
QObject::disconnect(aim, &QAbstractItemModel::dataChanged, q, &QQmlDelegateModel::_q_dataChanged);
|
||||
QObject::disconnect(aim, &QAbstractItemModel::rowsMoved, q, &QQmlDelegateModel::_q_rowsMoved);
|
||||
QObject::disconnect(aim, &QAbstractItemModel::modelAboutToBeReset, q, &QQmlDelegateModel::_q_modelAboutToBeReset);
|
||||
- QObject::disconnect(aim, &QAbstractItemModel::modelReset, q, &QQmlDelegateModel::handleModelReset);
|
||||
QObject::disconnect(aim, &QAbstractItemModel::layoutChanged, q, &QQmlDelegateModel::_q_layoutChanged);
|
||||
}
|
||||
|
||||
@@ -1898,28 +1895,25 @@ void QQmlDelegateModel::_q_modelAboutToBeReset()
|
||||
Q_D(QQmlDelegateModel);
|
||||
if (!d->m_adaptorModel.adaptsAim())
|
||||
return;
|
||||
-
|
||||
- /*
|
||||
- roleNames are generally guaranteed to be stable (given that QAIM has no
|
||||
- change signal for them), except that resetting the model is allowed to
|
||||
- invalidate them (QTBUG-32132). DelegateModel must take this into account by
|
||||
- snapshotting the current roleNames before the model is reset.
|
||||
- Afterwards, if we detect that roleNames has changed, we throw the
|
||||
- current model set up away and rebuild everything from scratch – it is
|
||||
- unlikely that a more efficient implementation would be worth it.
|
||||
-
|
||||
- If we detect no changes, we simply use the existing logic to handle the
|
||||
- model reset.
|
||||
-
|
||||
- This (role name resetting) logic relies on the fact that
|
||||
- modelAboutToBeReset must be followed by a modelReset signal before any
|
||||
- further modelAboutToBeReset can occur. However, it's possible for user
|
||||
- code to begin the reset before connectToAbstractItemModel is called
|
||||
- (QTBUG-125053), in which case we don't attempt to reset the role names.
|
||||
- */
|
||||
- Q_ASSERT(!d->m_maybeResetRoleNames);
|
||||
- d->m_maybeResetRoleNames = true;
|
||||
- d->m_roleNamesBeforeReset = d->m_adaptorModel.aim()->roleNames();
|
||||
+ auto aim = d->m_adaptorModel.aim();
|
||||
+ auto oldRoleNames = aim->roleNames();
|
||||
+ // this relies on the fact that modelAboutToBeReset must be followed
|
||||
+ // by a modelReset signal before any further modelAboutToBeReset can occur
|
||||
+ QObject::connect(aim, &QAbstractItemModel::modelReset, this, [this, d, oldRoleNames, aim](){
|
||||
+ if (!d->m_adaptorModel.adaptsAim() || d->m_adaptorModel.aim() != aim)
|
||||
+ return;
|
||||
+ if (oldRoleNames == aim->roleNames()) {
|
||||
+ // if the rolenames stayed the same (most common case), then we don't have
|
||||
+ // to throw away all the setup that we did
|
||||
+ handleModelReset();
|
||||
+ } else {
|
||||
+ // If they did change, we give up and just start from scratch via setMode
|
||||
+ setModel(QVariant::fromValue(model()));
|
||||
+ // but we still have to call handleModelReset, otherwise views will
|
||||
+ // not refresh
|
||||
+ handleModelReset();
|
||||
+ }
|
||||
+ }, Qt::SingleShotConnection);
|
||||
}
|
||||
|
||||
void QQmlDelegateModel::handleModelReset()
|
||||
@@ -1929,23 +1923,6 @@ void QQmlDelegateModel::handleModelReset()
|
||||
return;
|
||||
|
||||
int oldCount = d->m_count;
|
||||
-
|
||||
- if (d->m_maybeResetRoleNames) {
|
||||
- auto aim = d->m_adaptorModel.aim();
|
||||
- if (!d->m_adaptorModel.adaptsAim() || d->m_adaptorModel.aim() != aim)
|
||||
- return;
|
||||
-
|
||||
- // If the role names stayed the same (most common case), then we don't have
|
||||
- // to throw away all the setup that we did.
|
||||
- // If they did change, we give up and just start from scratch via setModel.
|
||||
- // We do this before handling the reset to ensure that views refresh.
|
||||
- if (aim->roleNames() != d->m_roleNamesBeforeReset)
|
||||
- setModel(QVariant::fromValue(model()));
|
||||
-
|
||||
- d->m_maybeResetRoleNames = false;
|
||||
- d->m_roleNamesBeforeReset.clear();
|
||||
- }
|
||||
-
|
||||
d->m_adaptorModel.rootIndex = QModelIndex();
|
||||
|
||||
if (d->m_complete) {
|
||||
diff --git a/src/qmlmodels/qqmldelegatemodel_p_p.h b/src/qmlmodels/qqmldelegatemodel_p_p.h
|
||||
index bae8fc8a23..3c7ab9281d 100644
|
||||
--- a/src/qmlmodels/qqmldelegatemodel_p_p.h
|
||||
+++ b/src/qmlmodels/qqmldelegatemodel_p_p.h
|
||||
@@ -334,7 +334,6 @@ public:
|
||||
QQmlReusableDelegateModelItemsPool m_reusableItemsPool;
|
||||
QList<QQDMIncubationTask *> m_finishedIncubating;
|
||||
QList<QByteArray> m_watchedRoles;
|
||||
- QHash<int, QByteArray> m_roleNamesBeforeReset;
|
||||
|
||||
QString m_filterGroup;
|
||||
|
||||
@@ -348,7 +347,6 @@ public:
|
||||
bool m_transaction : 1;
|
||||
bool m_incubatorCleanupScheduled : 1;
|
||||
bool m_waitingToFetchMore : 1;
|
||||
- bool m_maybeResetRoleNames : 1;
|
||||
|
||||
union {
|
||||
struct {
|
||||
diff --git a/tests/auto/qml/qqmldelegatemodel/CMakeLists.txt b/tests/auto/qml/qqmldelegatemodel/CMakeLists.txt
|
||||
index 966f5229df..8d8a90e0a7 100644
|
||||
--- a/tests/auto/qml/qqmldelegatemodel/CMakeLists.txt
|
||||
+++ b/tests/auto/qml/qqmldelegatemodel/CMakeLists.txt
|
||||
@@ -29,7 +29,6 @@ qt_internal_add_test(tst_qqmldelegatemodel
|
||||
Qt::QmlModelsPrivate
|
||||
Qt::QmlPrivate
|
||||
Qt::Quick
|
||||
- Qt::QuickPrivate
|
||||
Qt::QuickTestUtilsPrivate
|
||||
TESTDATA ${test_data}
|
||||
)
|
||||
diff --git a/tests/auto/qml/qqmldelegatemodel/data/reset.qml b/tests/auto/qml/qqmldelegatemodel/data/reset.qml
|
||||
deleted file mode 100644
|
||||
index 0fcd5e8afa..0000000000
|
||||
--- a/tests/auto/qml/qqmldelegatemodel/data/reset.qml
|
||||
+++ /dev/null
|
||||
@@ -1,28 +0,0 @@
|
||||
-import QtQuick
|
||||
-import Test
|
||||
-
|
||||
-Window {
|
||||
- id: root
|
||||
- width: 200
|
||||
- height: 200
|
||||
-
|
||||
- property alias listView: listView
|
||||
-
|
||||
- ResettableModel {
|
||||
- id: resetModel
|
||||
- }
|
||||
-
|
||||
- ListView {
|
||||
- id: listView
|
||||
- anchors.fill: parent
|
||||
- model: resetModel
|
||||
-
|
||||
- delegate: Rectangle {
|
||||
- implicitWidth: 100
|
||||
- implicitHeight: 50
|
||||
- color: "olivedrab"
|
||||
-
|
||||
- required property string display
|
||||
- }
|
||||
- }
|
||||
-}
|
||||
diff --git a/tests/auto/qml/qqmldelegatemodel/data/resetInQAIMConstructor.qml b/tests/auto/qml/qqmldelegatemodel/data/resetInQAIMConstructor.qml
|
||||
deleted file mode 100644
|
||||
index cb1f226737..0000000000
|
||||
--- a/tests/auto/qml/qqmldelegatemodel/data/resetInQAIMConstructor.qml
|
||||
+++ /dev/null
|
||||
@@ -1,28 +0,0 @@
|
||||
-import QtQuick
|
||||
-import Test
|
||||
-
|
||||
-Window {
|
||||
- id: root
|
||||
- width: 200
|
||||
- height: 200
|
||||
-
|
||||
- property alias listView: listView
|
||||
-
|
||||
- ResetInConstructorModel {
|
||||
- id: resetInConstructorModel
|
||||
- }
|
||||
-
|
||||
- ListView {
|
||||
- id: listView
|
||||
- anchors.fill: parent
|
||||
- model: resetInConstructorModel
|
||||
-
|
||||
- delegate: Rectangle {
|
||||
- implicitWidth: 100
|
||||
- implicitHeight: 50
|
||||
- color: "olivedrab"
|
||||
-
|
||||
- required property string display
|
||||
- }
|
||||
- }
|
||||
-}
|
||||
diff --git a/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp b/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
|
||||
index d9f8b7aeba..2cacda5513 100644
|
||||
--- a/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
|
||||
+++ b/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
|
||||
@@ -4,7 +4,6 @@
|
||||
#include <QtTest/qtest.h>
|
||||
#include <QtCore/qjsonobject.h>
|
||||
#include <QtCore/QConcatenateTablesProxyModel>
|
||||
-#include <QtCore/qtimer.h>
|
||||
#include <QtGui/QStandardItemModel>
|
||||
#include <QtQml/qqmlcomponent.h>
|
||||
#include <QtQml/qqmlapplicationengine.h>
|
||||
@@ -12,17 +11,11 @@
|
||||
#include <QtQmlModels/private/qqmllistmodel_p.h>
|
||||
#include <QtQuick/qquickview.h>
|
||||
#include <QtQuick/qquickitem.h>
|
||||
-#include <QtQuick/private/qquickitemview_p_p.h>
|
||||
-#include <QtQuick/private/qquicklistview_p.h>
|
||||
-#include <QtQuickTest/quicktest.h>
|
||||
#include <QtQuickTestUtils/private/qmlutils_p.h>
|
||||
-#include <QtQuickTestUtils/private/visualtestutils_p.h>
|
||||
#include <QtTest/QSignalSpy>
|
||||
|
||||
#include <forward_list>
|
||||
|
||||
-using namespace QQuickVisualTestUtils;
|
||||
-
|
||||
class tst_QQmlDelegateModel : public QQmlDataTest
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -32,8 +25,6 @@ public:
|
||||
|
||||
private slots:
|
||||
void resettingRolesRespected();
|
||||
- void resetInQAIMConstructor();
|
||||
- void reset();
|
||||
void valueWithoutCallingObjectFirst_data();
|
||||
void valueWithoutCallingObjectFirst();
|
||||
void qtbug_86017();
|
||||
@@ -53,9 +44,16 @@ private slots:
|
||||
void viewUpdatedOnDelegateChoiceAffectingRoleChange();
|
||||
};
|
||||
|
||||
-class BaseAbstractItemModel : public QAbstractItemModel
|
||||
+class AbstractItemModel : public QAbstractItemModel
|
||||
{
|
||||
+ Q_OBJECT
|
||||
public:
|
||||
+ AbstractItemModel()
|
||||
+ {
|
||||
+ for (int i = 0; i < 3; ++i)
|
||||
+ mValues.append(QString::fromLatin1("Item %1").arg(i));
|
||||
+ }
|
||||
+
|
||||
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override
|
||||
{
|
||||
if (parent.isValid())
|
||||
@@ -93,21 +91,10 @@ public:
|
||||
return mValues.at(index.row());
|
||||
}
|
||||
|
||||
-protected:
|
||||
+private:
|
||||
QVector<QString> mValues;
|
||||
};
|
||||
|
||||
-class AbstractItemModel : public BaseAbstractItemModel
|
||||
-{
|
||||
- Q_OBJECT
|
||||
-public:
|
||||
- AbstractItemModel()
|
||||
- {
|
||||
- for (int i = 0; i < 3; ++i)
|
||||
- mValues.append(QString::fromLatin1("Item %1").arg(i));
|
||||
- }
|
||||
-};
|
||||
-
|
||||
tst_QQmlDelegateModel::tst_QQmlDelegateModel()
|
||||
: QQmlDataTest(QT_QMLTEST_DATADIR)
|
||||
{
|
||||
@@ -166,109 +153,7 @@ void tst_QQmlDelegateModel::resettingRolesRespected()
|
||||
QObject *root = engine.rootObjects().constFirst();
|
||||
QVERIFY(!root->property("success").toBool());
|
||||
model->change();
|
||||
- QTRY_VERIFY_WITH_TIMEOUT(root->property("success").toBool(), 100);
|
||||
-}
|
||||
-
|
||||
-class ResetInConstructorModel : public BaseAbstractItemModel
|
||||
-{
|
||||
- Q_OBJECT
|
||||
- QML_ELEMENT
|
||||
-
|
||||
-public:
|
||||
- ResetInConstructorModel()
|
||||
- {
|
||||
- beginResetModel();
|
||||
- QTimer::singleShot(0, this, &ResetInConstructorModel::finishReset);
|
||||
- }
|
||||
-
|
||||
-private:
|
||||
- void finishReset()
|
||||
- {
|
||||
- mValues.append("First");
|
||||
- endResetModel();
|
||||
- }
|
||||
-};
|
||||
-
|
||||
-void tst_QQmlDelegateModel::resetInQAIMConstructor()
|
||||
-{
|
||||
- qmlRegisterTypesAndRevisions<ResetInConstructorModel>("Test", 1);
|
||||
-
|
||||
- QQuickApplicationHelper helper(this, "resetInQAIMConstructor.qml");
|
||||
- QVERIFY2(helper.ready, helper.failureMessage());
|
||||
- QQuickWindow *window = helper.window;
|
||||
- window->show();
|
||||
- QVERIFY(QTest::qWaitForWindowExposed(window));
|
||||
-
|
||||
- auto *listView = window->property("listView").value<QQuickListView *>();
|
||||
- QVERIFY(listView);
|
||||
- QTRY_VERIFY_WITH_TIMEOUT(listView->itemAtIndex(0), 100);
|
||||
- QQuickItem *firstDelegateItem = listView->itemAtIndex(0);
|
||||
- QVERIFY(firstDelegateItem);
|
||||
- QCOMPARE(firstDelegateItem->property("display").toString(), "First");
|
||||
-}
|
||||
-
|
||||
-class ResettableModel : public BaseAbstractItemModel
|
||||
-{
|
||||
- Q_OBJECT
|
||||
- QML_ELEMENT
|
||||
-
|
||||
-public:
|
||||
- ResettableModel()
|
||||
- {
|
||||
- mValues.append("First");
|
||||
- }
|
||||
-
|
||||
- void callBeginResetModel()
|
||||
- {
|
||||
- beginResetModel();
|
||||
- mValues.clear();
|
||||
- }
|
||||
-
|
||||
- void appendData()
|
||||
- {
|
||||
- mValues.append(QString::fromLatin1("Item %1").arg(mValues.size()));
|
||||
- }
|
||||
-
|
||||
- void callEndResetModel()
|
||||
- {
|
||||
- endResetModel();
|
||||
- }
|
||||
-};
|
||||
-
|
||||
-// Tests that everything works as expected when calling beginResetModel/endResetModel
|
||||
-// after the QAIM subclass constructor has run.
|
||||
-void tst_QQmlDelegateModel::reset()
|
||||
-{
|
||||
- qmlRegisterTypesAndRevisions<ResettableModel>("Test", 1);
|
||||
-
|
||||
- QQuickApplicationHelper helper(this, "reset.qml");
|
||||
- QVERIFY2(helper.ready, helper.failureMessage());
|
||||
- QQuickWindow *window = helper.window;
|
||||
- window->show();
|
||||
- QVERIFY(QTest::qWaitForWindowExposed(window));
|
||||
-
|
||||
- auto *listView = window->property("listView").value<QQuickListView *>();
|
||||
- QVERIFY(listView);
|
||||
- QQuickItem *firstDelegateItem = listView->itemAtIndex(0);
|
||||
- QVERIFY(firstDelegateItem);
|
||||
- QCOMPARE(firstDelegateItem->property("display").toString(), "First");
|
||||
-
|
||||
- const auto delegateModel = QQuickItemViewPrivate::get(listView)->model;
|
||||
- QSignalSpy rootIndexChangedSpy(delegateModel, SIGNAL(rootIndexChanged()));
|
||||
- QVERIFY(rootIndexChangedSpy.isValid());
|
||||
-
|
||||
- auto *model = listView->model().value<ResettableModel *>();
|
||||
- model->callBeginResetModel();
|
||||
- model->appendData();
|
||||
- model->callEndResetModel();
|
||||
- // This is verifies that handleModelReset isn't called
|
||||
- // more than once during this process, since it unconditionally emits rootIndexChanged.
|
||||
- QCOMPARE(rootIndexChangedSpy.count(), 1);
|
||||
-
|
||||
- QTRY_VERIFY_WITH_TIMEOUT(listView->itemAtIndex(0), 100);
|
||||
- firstDelegateItem = listView->itemAtIndex(0);
|
||||
- QVERIFY(firstDelegateItem);
|
||||
- QCOMPARE(firstDelegateItem->property("display").toString(), "Item 0");
|
||||
+ QTRY_VERIFY(root->property("success").toBool());
|
||||
}
|
||||
|
||||
void tst_QQmlDelegateModel::valueWithoutCallingObjectFirst_data()
|
||||
--
|
||||
2.46.1
|
||||
|
473
0002-QQmlDelegateModel-fix-delegates-not-being-created-in.patch
Normal file
473
0002-QQmlDelegateModel-fix-delegates-not-being-created-in.patch
Normal file
@ -0,0 +1,473 @@
|
||||
From 2aefbca84d2f3dca2c2697f13710b6907c0c7e59 Mon Sep 17 00:00:00 2001
|
||||
From: Mitch Curtis <mitch.curtis@qt.io>
|
||||
Date: Tue, 24 Sep 2024 10:22:12 +0800
|
||||
Subject: [PATCH 2/2] QQmlDelegateModel: fix delegates not being created in
|
||||
certain cases v2
|
||||
|
||||
Since 837c2f18cd223707e7cedb213257b0158ea07146, we connect to
|
||||
modelAboutToBeReset rather than modelReset so that we can handle role
|
||||
name changes. _q_modelAboutToBeReset now connects modelReset to
|
||||
handleModelReset with a single shot connection instead.
|
||||
|
||||
However, it's possible for user code to begin the reset before
|
||||
connectToAbstractItemModel is called (QTBUG-125053), in which case we
|
||||
connect to modelReset too late and handleModelReset is never called,
|
||||
resulting in delegates not being created in certain cases.
|
||||
|
||||
So, we check at the earliest point we can if the model is in the
|
||||
process of being reset, and if so, connect modelReset to
|
||||
handleModelReset.
|
||||
|
||||
This is a less intrusive alternative to
|
||||
6561344dd2d1ba69abe6edec4fe340b256da9e13, which caused regressions and
|
||||
was reverted.
|
||||
|
||||
Fixes: QTBUG-125053
|
||||
Task-number: QTBUG-127340
|
||||
Pick-to: 6.7 6.5
|
||||
Change-Id: I2bfe192ed61eddaa481de4b1e14b1fa5d07a51c1
|
||||
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
||||
(cherry picked from commit 4bb16ce2c8ea94f768991593a581c8838d48f3a3)
|
||||
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
||||
---
|
||||
src/qmlmodels/qqmldelegatemodel.cpp | 17 ++
|
||||
.../auto/qml/qqmldelegatemodel/CMakeLists.txt | 1 +
|
||||
...yModelWithDelayedSourceModelInListView.qml | 30 +++
|
||||
.../auto/qml/qqmldelegatemodel/data/reset.qml | 28 +++
|
||||
.../data/resetInQAIMConstructor.qml | 28 +++
|
||||
.../tst_qqmldelegatemodel.cpp | 210 +++++++++++++++++-
|
||||
6 files changed, 304 insertions(+), 10 deletions(-)
|
||||
create mode 100644 tests/auto/qml/qqmldelegatemodel/data/proxyModelWithDelayedSourceModelInListView.qml
|
||||
create mode 100644 tests/auto/qml/qqmldelegatemodel/data/reset.qml
|
||||
create mode 100644 tests/auto/qml/qqmldelegatemodel/data/resetInQAIMConstructor.qml
|
||||
|
||||
diff --git a/src/qmlmodels/qqmldelegatemodel.cpp b/src/qmlmodels/qqmldelegatemodel.cpp
|
||||
index 7cfa662aa6..f8de5cba82 100644
|
||||
--- a/src/qmlmodels/qqmldelegatemodel.cpp
|
||||
+++ b/src/qmlmodels/qqmldelegatemodel.cpp
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
#include "qqmldelegatemodel_p_p.h"
|
||||
|
||||
+#include <QtCore/private/qabstractitemmodel_p.h>
|
||||
+
|
||||
#include <QtQml/qqmlinfo.h>
|
||||
|
||||
#include <private/qqmlabstractdelegatecomponent_p.h>
|
||||
@@ -409,6 +411,21 @@ void QQmlDelegateModel::setModel(const QVariant &model)
|
||||
_q_itemsInserted(0, d->adaptorModelCount());
|
||||
d->requestMoreIfNecessary();
|
||||
}
|
||||
+
|
||||
+ // Since 837c2f18cd223707e7cedb213257b0158ea07146, we connect to modelAboutToBeReset
|
||||
+ // rather than modelReset so that we can handle role name changes. _q_modelAboutToBeReset
|
||||
+ // now connects modelReset to handleModelReset with a single shot connection instead.
|
||||
+ // However, it's possible for user code to begin the reset before connectToAbstractItemModel is called
|
||||
+ // (QTBUG-125053), in which case we connect to modelReset too late and handleModelReset is never called,
|
||||
+ // resulting in delegates not being created in certain cases.
|
||||
+ // So, we check at the earliest point we can if the model is in the process of being reset,
|
||||
+ // and if so, connect modelReset to handleModelReset.
|
||||
+ if (d->m_adaptorModel.adaptsAim()) {
|
||||
+ auto *aim = d->m_adaptorModel.aim();
|
||||
+ auto *aimPrivate = QAbstractItemModelPrivate::get(aim);
|
||||
+ if (aimPrivate->resetting)
|
||||
+ QObject::connect(aim, &QAbstractItemModel::modelReset, this, &QQmlDelegateModel::handleModelReset, Qt::SingleShotConnection);
|
||||
+ }
|
||||
}
|
||||
|
||||
/*!
|
||||
diff --git a/tests/auto/qml/qqmldelegatemodel/CMakeLists.txt b/tests/auto/qml/qqmldelegatemodel/CMakeLists.txt
|
||||
index 8d8a90e0a7..966f5229df 100644
|
||||
--- a/tests/auto/qml/qqmldelegatemodel/CMakeLists.txt
|
||||
+++ b/tests/auto/qml/qqmldelegatemodel/CMakeLists.txt
|
||||
@@ -29,6 +29,7 @@ qt_internal_add_test(tst_qqmldelegatemodel
|
||||
Qt::QmlModelsPrivate
|
||||
Qt::QmlPrivate
|
||||
Qt::Quick
|
||||
+ Qt::QuickPrivate
|
||||
Qt::QuickTestUtilsPrivate
|
||||
TESTDATA ${test_data}
|
||||
)
|
||||
diff --git a/tests/auto/qml/qqmldelegatemodel/data/proxyModelWithDelayedSourceModelInListView.qml b/tests/auto/qml/qqmldelegatemodel/data/proxyModelWithDelayedSourceModelInListView.qml
|
||||
new file mode 100644
|
||||
index 0000000000..b6733bd38c
|
||||
--- /dev/null
|
||||
+++ b/tests/auto/qml/qqmldelegatemodel/data/proxyModelWithDelayedSourceModelInListView.qml
|
||||
@@ -0,0 +1,30 @@
|
||||
+import QtQuick
|
||||
+import Test
|
||||
+
|
||||
+Window {
|
||||
+ id: root
|
||||
+ title: listView.count
|
||||
+
|
||||
+ property alias listView: listView
|
||||
+ property ProxySourceModel connectionModel: null
|
||||
+
|
||||
+ Component {
|
||||
+ id: modelComponent
|
||||
+ ProxySourceModel {}
|
||||
+ }
|
||||
+
|
||||
+ ListView {
|
||||
+ id: listView
|
||||
+ anchors.fill: parent
|
||||
+
|
||||
+ delegate: Text {
|
||||
+ text: model.Name
|
||||
+ }
|
||||
+
|
||||
+ model: ProxyModel {
|
||||
+ sourceModel: root.connectionModel
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ Component.onCompleted: root.connectionModel = modelComponent.createObject(root)
|
||||
+}
|
||||
diff --git a/tests/auto/qml/qqmldelegatemodel/data/reset.qml b/tests/auto/qml/qqmldelegatemodel/data/reset.qml
|
||||
new file mode 100644
|
||||
index 0000000000..0fcd5e8afa
|
||||
--- /dev/null
|
||||
+++ b/tests/auto/qml/qqmldelegatemodel/data/reset.qml
|
||||
@@ -0,0 +1,28 @@
|
||||
+import QtQuick
|
||||
+import Test
|
||||
+
|
||||
+Window {
|
||||
+ id: root
|
||||
+ width: 200
|
||||
+ height: 200
|
||||
+
|
||||
+ property alias listView: listView
|
||||
+
|
||||
+ ResettableModel {
|
||||
+ id: resetModel
|
||||
+ }
|
||||
+
|
||||
+ ListView {
|
||||
+ id: listView
|
||||
+ anchors.fill: parent
|
||||
+ model: resetModel
|
||||
+
|
||||
+ delegate: Rectangle {
|
||||
+ implicitWidth: 100
|
||||
+ implicitHeight: 50
|
||||
+ color: "olivedrab"
|
||||
+
|
||||
+ required property string display
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
diff --git a/tests/auto/qml/qqmldelegatemodel/data/resetInQAIMConstructor.qml b/tests/auto/qml/qqmldelegatemodel/data/resetInQAIMConstructor.qml
|
||||
new file mode 100644
|
||||
index 0000000000..cb1f226737
|
||||
--- /dev/null
|
||||
+++ b/tests/auto/qml/qqmldelegatemodel/data/resetInQAIMConstructor.qml
|
||||
@@ -0,0 +1,28 @@
|
||||
+import QtQuick
|
||||
+import Test
|
||||
+
|
||||
+Window {
|
||||
+ id: root
|
||||
+ width: 200
|
||||
+ height: 200
|
||||
+
|
||||
+ property alias listView: listView
|
||||
+
|
||||
+ ResetInConstructorModel {
|
||||
+ id: resetInConstructorModel
|
||||
+ }
|
||||
+
|
||||
+ ListView {
|
||||
+ id: listView
|
||||
+ anchors.fill: parent
|
||||
+ model: resetInConstructorModel
|
||||
+
|
||||
+ delegate: Rectangle {
|
||||
+ implicitWidth: 100
|
||||
+ implicitHeight: 50
|
||||
+ color: "olivedrab"
|
||||
+
|
||||
+ required property string display
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
diff --git a/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp b/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
|
||||
index 2cacda5513..3f08d8fc85 100644
|
||||
--- a/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
|
||||
+++ b/tests/auto/qml/qqmldelegatemodel/tst_qqmldelegatemodel.cpp
|
||||
@@ -3,7 +3,9 @@
|
||||
|
||||
#include <QtTest/qtest.h>
|
||||
#include <QtCore/qjsonobject.h>
|
||||
+#include <QtCore/qsortfilterproxymodel.h>
|
||||
#include <QtCore/QConcatenateTablesProxyModel>
|
||||
+#include <QtCore/qtimer.h>
|
||||
#include <QtGui/QStandardItemModel>
|
||||
#include <QtQml/qqmlcomponent.h>
|
||||
#include <QtQml/qqmlapplicationengine.h>
|
||||
@@ -11,11 +13,17 @@
|
||||
#include <QtQmlModels/private/qqmllistmodel_p.h>
|
||||
#include <QtQuick/qquickview.h>
|
||||
#include <QtQuick/qquickitem.h>
|
||||
+#include <QtQuick/private/qquickitemview_p_p.h>
|
||||
+#include <QtQuick/private/qquicklistview_p.h>
|
||||
+#include <QtQuickTest/quicktest.h>
|
||||
#include <QtQuickTestUtils/private/qmlutils_p.h>
|
||||
+#include <QtQuickTestUtils/private/visualtestutils_p.h>
|
||||
#include <QtTest/QSignalSpy>
|
||||
|
||||
#include <forward_list>
|
||||
|
||||
+using namespace QQuickVisualTestUtils;
|
||||
+
|
||||
class tst_QQmlDelegateModel : public QQmlDataTest
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -25,6 +33,8 @@ public:
|
||||
|
||||
private slots:
|
||||
void resettingRolesRespected();
|
||||
+ void resetInQAIMConstructor();
|
||||
+ void reset();
|
||||
void valueWithoutCallingObjectFirst_data();
|
||||
void valueWithoutCallingObjectFirst();
|
||||
void qtbug_86017();
|
||||
@@ -42,18 +52,12 @@ private slots:
|
||||
void doNotUnrefObjectUnderConstruction();
|
||||
void clearCacheDuringInsertion();
|
||||
void viewUpdatedOnDelegateChoiceAffectingRoleChange();
|
||||
+ void proxyModelWithDelayedSourceModelInListView();
|
||||
};
|
||||
|
||||
-class AbstractItemModel : public QAbstractItemModel
|
||||
+class BaseAbstractItemModel : public QAbstractItemModel
|
||||
{
|
||||
- Q_OBJECT
|
||||
public:
|
||||
- AbstractItemModel()
|
||||
- {
|
||||
- for (int i = 0; i < 3; ++i)
|
||||
- mValues.append(QString::fromLatin1("Item %1").arg(i));
|
||||
- }
|
||||
-
|
||||
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override
|
||||
{
|
||||
if (parent.isValid())
|
||||
@@ -91,10 +95,21 @@ public:
|
||||
return mValues.at(index.row());
|
||||
}
|
||||
|
||||
-private:
|
||||
+protected:
|
||||
QVector<QString> mValues;
|
||||
};
|
||||
|
||||
+class AbstractItemModel : public BaseAbstractItemModel
|
||||
+{
|
||||
+ Q_OBJECT
|
||||
+public:
|
||||
+ AbstractItemModel()
|
||||
+ {
|
||||
+ for (int i = 0; i < 3; ++i)
|
||||
+ mValues.append(QString::fromLatin1("Item %1").arg(i));
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
tst_QQmlDelegateModel::tst_QQmlDelegateModel()
|
||||
: QQmlDataTest(QT_QMLTEST_DATADIR)
|
||||
{
|
||||
@@ -153,7 +168,109 @@ void tst_QQmlDelegateModel::resettingRolesRespected()
|
||||
QObject *root = engine.rootObjects().constFirst();
|
||||
QVERIFY(!root->property("success").toBool());
|
||||
model->change();
|
||||
- QTRY_VERIFY(root->property("success").toBool());
|
||||
+ QTRY_VERIFY_WITH_TIMEOUT(root->property("success").toBool(), 100);
|
||||
+}
|
||||
+
|
||||
+class ResetInConstructorModel : public BaseAbstractItemModel
|
||||
+{
|
||||
+ Q_OBJECT
|
||||
+ QML_ELEMENT
|
||||
+
|
||||
+public:
|
||||
+ ResetInConstructorModel()
|
||||
+ {
|
||||
+ beginResetModel();
|
||||
+ QTimer::singleShot(0, this, &ResetInConstructorModel::finishReset);
|
||||
+ }
|
||||
+
|
||||
+private:
|
||||
+ void finishReset()
|
||||
+ {
|
||||
+ mValues.append("First");
|
||||
+ endResetModel();
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+void tst_QQmlDelegateModel::resetInQAIMConstructor()
|
||||
+{
|
||||
+ qmlRegisterTypesAndRevisions<ResetInConstructorModel>("Test", 1);
|
||||
+
|
||||
+ QQuickApplicationHelper helper(this, "resetInQAIMConstructor.qml");
|
||||
+ QVERIFY2(helper.ready, helper.failureMessage());
|
||||
+ QQuickWindow *window = helper.window;
|
||||
+ window->show();
|
||||
+ QVERIFY(QTest::qWaitForWindowExposed(window));
|
||||
+
|
||||
+ auto *listView = window->property("listView").value<QQuickListView *>();
|
||||
+ QVERIFY(listView);
|
||||
+ QTRY_VERIFY_WITH_TIMEOUT(listView->itemAtIndex(0), 100);
|
||||
+ QQuickItem *firstDelegateItem = listView->itemAtIndex(0);
|
||||
+ QVERIFY(firstDelegateItem);
|
||||
+ QCOMPARE(firstDelegateItem->property("display").toString(), "First");
|
||||
+}
|
||||
+
|
||||
+class ResettableModel : public BaseAbstractItemModel
|
||||
+{
|
||||
+ Q_OBJECT
|
||||
+ QML_ELEMENT
|
||||
+
|
||||
+public:
|
||||
+ ResettableModel()
|
||||
+ {
|
||||
+ mValues.append("First");
|
||||
+ }
|
||||
+
|
||||
+ void callBeginResetModel()
|
||||
+ {
|
||||
+ beginResetModel();
|
||||
+ mValues.clear();
|
||||
+ }
|
||||
+
|
||||
+ void appendData()
|
||||
+ {
|
||||
+ mValues.append(QString::fromLatin1("Item %1").arg(mValues.size()));
|
||||
+ }
|
||||
+
|
||||
+ void callEndResetModel()
|
||||
+ {
|
||||
+ endResetModel();
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+// Tests that everything works as expected when calling beginResetModel/endResetModel
|
||||
+// after the QAIM subclass constructor has run.
|
||||
+void tst_QQmlDelegateModel::reset()
|
||||
+{
|
||||
+ qmlRegisterTypesAndRevisions<ResettableModel>("Test", 1);
|
||||
+
|
||||
+ QQuickApplicationHelper helper(this, "reset.qml");
|
||||
+ QVERIFY2(helper.ready, helper.failureMessage());
|
||||
+ QQuickWindow *window = helper.window;
|
||||
+ window->show();
|
||||
+ QVERIFY(QTest::qWaitForWindowExposed(window));
|
||||
+
|
||||
+ auto *listView = window->property("listView").value<QQuickListView *>();
|
||||
+ QVERIFY(listView);
|
||||
+ QQuickItem *firstDelegateItem = listView->itemAtIndex(0);
|
||||
+ QVERIFY(firstDelegateItem);
|
||||
+ QCOMPARE(firstDelegateItem->property("display").toString(), "First");
|
||||
+
|
||||
+ const auto delegateModel = QQuickItemViewPrivate::get(listView)->model;
|
||||
+ QSignalSpy rootIndexChangedSpy(delegateModel, SIGNAL(rootIndexChanged()));
|
||||
+ QVERIFY(rootIndexChangedSpy.isValid());
|
||||
+
|
||||
+ auto *model = listView->model().value<ResettableModel *>();
|
||||
+ model->callBeginResetModel();
|
||||
+ model->appendData();
|
||||
+ model->callEndResetModel();
|
||||
+ // This is verifies that handleModelReset isn't called
|
||||
+ // more than once during this process, since it unconditionally emits rootIndexChanged.
|
||||
+ QCOMPARE(rootIndexChangedSpy.count(), 1);
|
||||
+
|
||||
+ QTRY_VERIFY_WITH_TIMEOUT(listView->itemAtIndex(0), 100);
|
||||
+ firstDelegateItem = listView->itemAtIndex(0);
|
||||
+ QVERIFY(firstDelegateItem);
|
||||
+ QCOMPARE(firstDelegateItem->property("display").toString(), "Item 0");
|
||||
}
|
||||
|
||||
void tst_QQmlDelegateModel::valueWithoutCallingObjectFirst_data()
|
||||
@@ -616,6 +733,79 @@ void tst_QQmlDelegateModel::viewUpdatedOnDelegateChoiceAffectingRoleChange()
|
||||
QVERIFY(returnedValue);
|
||||
}
|
||||
|
||||
+class ProxySourceModel : public QAbstractListModel
|
||||
+{
|
||||
+ Q_OBJECT
|
||||
+ QML_ELEMENT
|
||||
+public:
|
||||
+ explicit ProxySourceModel(QObject *parent = nullptr)
|
||||
+ : QAbstractListModel(parent)
|
||||
+ {
|
||||
+ for (int i = 0; i < rows; ++i) {
|
||||
+ beginInsertRows(QModelIndex(), i, i);
|
||||
+ endInsertRows();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ ~ProxySourceModel() override = default;
|
||||
+
|
||||
+ int rowCount(const QModelIndex &) const override
|
||||
+ {
|
||||
+ return rows;
|
||||
+ }
|
||||
+
|
||||
+ QVariant data(const QModelIndex &, int ) const override
|
||||
+ {
|
||||
+ return "Hello";
|
||||
+ }
|
||||
+
|
||||
+ QHash<int, QByteArray> roleNames() const override
|
||||
+ {
|
||||
+ QHash<int, QByteArray> roles = QAbstractListModel::roleNames();
|
||||
+ roles[Qt::UserRole + 1] = "Name";
|
||||
+
|
||||
+ return roles;
|
||||
+ }
|
||||
+
|
||||
+ static const int rows = 1;
|
||||
+};
|
||||
+
|
||||
+class ProxyModel : public QSortFilterProxyModel
|
||||
+{
|
||||
+ Q_OBJECT
|
||||
+ QML_ELEMENT
|
||||
+ Q_PROPERTY(QAbstractItemModel *sourceModel READ sourceModel WRITE setSourceModel)
|
||||
+
|
||||
+public:
|
||||
+ explicit ProxyModel(QObject *parent = nullptr)
|
||||
+ : QSortFilterProxyModel(parent)
|
||||
+ {
|
||||
+ }
|
||||
+
|
||||
+ ~ProxyModel() override = default;
|
||||
+};
|
||||
+
|
||||
+// Checks that the correct amount of delegates are created when using a proxy
|
||||
+// model whose source model is set after a delay.
|
||||
+void tst_QQmlDelegateModel::proxyModelWithDelayedSourceModelInListView()
|
||||
+{
|
||||
+ QTest::failOnWarning();
|
||||
+
|
||||
+ qmlRegisterTypesAndRevisions<ProxySourceModel>("Test", 1);
|
||||
+ qmlRegisterTypesAndRevisions<ProxyModel>("Test", 1);
|
||||
+
|
||||
+ QQuickApplicationHelper helper(this, "proxyModelWithDelayedSourceModelInListView.qml");
|
||||
+ QVERIFY2(helper.ready, helper.failureMessage());
|
||||
+ QQuickWindow *window = helper.window;
|
||||
+ window->show();
|
||||
+ QVERIFY(QTest::qWaitForWindowExposed(window));
|
||||
+
|
||||
+ auto *listView = window->property("listView").value<QQuickListView *>();
|
||||
+ QVERIFY(listView);
|
||||
+ const auto delegateModel = QQuickItemViewPrivate::get(listView)->model;
|
||||
+ QTRY_COMPARE(listView->count(), 1);
|
||||
+}
|
||||
+
|
||||
QTEST_MAIN(tst_QQmlDelegateModel)
|
||||
|
||||
#include "tst_qqmldelegatemodel.moc"
|
||||
--
|
||||
2.46.1
|
||||
|
14
_constraints
14
_constraints
@ -2,10 +2,20 @@
|
||||
<constraints>
|
||||
<hardware>
|
||||
<disk>
|
||||
<size unit="G">20</size>
|
||||
<size unit="G">25</size>
|
||||
</disk>
|
||||
<processors>4</processors>
|
||||
</hardware>
|
||||
<overwrite>
|
||||
<conditions>
|
||||
<arch>s390x</arch>
|
||||
</conditions>
|
||||
<hardware>
|
||||
<memory>
|
||||
<size unit="G">9</size>
|
||||
</memory>
|
||||
</hardware>
|
||||
</overwrite>
|
||||
<overwrite>
|
||||
<conditions>
|
||||
<arch>ppc64</arch>
|
||||
@ -35,7 +45,7 @@
|
||||
</conditions>
|
||||
<hardware>
|
||||
<disk>
|
||||
<size unit="G">2</size>
|
||||
<size unit="G">3</size>
|
||||
</disk>
|
||||
<memory>
|
||||
<size unit="G">2</size>
|
||||
|
@ -1,3 +1,31 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 15 09:37:16 UTC 2024 - Antonio Larrosa <alarrosa@suse.com>
|
||||
|
||||
- Update memory constraints for s390x and use %limit_build
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 15 07:52:36 UTC 2024 - Christophe Marin <christophe@krop.fr>
|
||||
|
||||
- Update disk constraints
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Oct 9 16:52:34 UTC 2024 - Christophe Marin <christophe@krop.fr>
|
||||
|
||||
- Add upstream change to fix compilation failures (kde#494281, QTBUG-129797)
|
||||
* 0001-Compiler-Wrap-raw-string-literals-in-QStringLiteral-.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 8 10:17:37 UTC 2024 - Christophe Marin <christophe@krop.fr>
|
||||
|
||||
- Update to 6.8.0:
|
||||
* https://www.qt.io/blog/qt-6.8-released
|
||||
- Add upstream changes:
|
||||
* 0001-Revert-QQmlDelegateModel-fix-delegates-not-being-cre.patch
|
||||
* 0002-QQmlDelegateModel-fix-delegates-not-being-created-in.patch
|
||||
(kde#493116, QTBUG-127340)
|
||||
- Merge some -devel and -private-devel packages that only have
|
||||
private API.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sat Sep 28 08:22:56 UTC 2024 - Christophe Marin <christophe@krop.fr>
|
||||
|
||||
|
1321
qt6-declarative.spec
1321
qt6-declarative.spec
File diff suppressed because it is too large
Load Diff
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:937b70e441abf5bc4e50d44d26610e2714a28514acf3885cd36116cd610b9875
|
||||
size 35663596
|
3
qtdeclarative-everywhere-src-6.8.0.tar.xz
Normal file
3
qtdeclarative-everywhere-src-6.8.0.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3b41a36b42e919a3aa0da1f71107591504200f41707bee2ad8e8d4f99b5644c2
|
||||
size 37029068
|
Loading…
Reference in New Issue
Block a user