[SCM] qtdeclarative packaging branch, ubuntu, updated. ubuntu/5.5.1-2ubuntu3-10-g11f0ddc

Timo Jyrinki timo at moszumanska.debian.org
Fri Feb 5 14:29:12 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/qt/qtdeclarative.git;a=commitdiff;h=e745c4f

The following commit has been merged in the ubuntu branch:
commit e745c4fdf706458915d35bb57cead6f98bcd8b3c
Author: Timo Jyrinki <timo.jyrinki at canonical.com>
Date:   Tue Feb 2 12:54:07 2016 +0000

    debian/patches/Don-t-check-for-revisions-when-assigning-to-grouped-.patch:
    
    * debian/patches/Don-t-check-for-revisions-when-assigning-to-grouped-.patch:
      - Fix versioning (LP: #1389721)
---
 debian/changelog                                   |   7 +
 ...-for-revisions-when-assigning-to-grouped-.patch | 209 +++++++++++++++++++++
 debian/patches/series                              |   1 +
 3 files changed, 217 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 9e15dda..11302be 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+qtdeclarative-opensource-src (5.5.1-2ubuntu5) UNRELEASED; urgency=medium
+
+  * debian/patches/Don-t-check-for-revisions-when-assigning-to-grouped-.patch:
+    - Fix versioning (LP: #1389721)
+
+ -- Timo Jyrinki <timo-jyrinki at ubuntu.com>  Mon, 01 Feb 2016 14:39:12 +0000
+
 qtdeclarative-opensource-src (5.5.1-2ubuntu4) xenial; urgency=medium
 
   * debian/patches/Add-isTabFence-private-flag.patch:
diff --git a/debian/patches/Don-t-check-for-revisions-when-assigning-to-grouped-.patch b/debian/patches/Don-t-check-for-revisions-when-assigning-to-grouped-.patch
new file mode 100644
index 0000000..54a5071
--- /dev/null
+++ b/debian/patches/Don-t-check-for-revisions-when-assigning-to-grouped-.patch
@@ -0,0 +1,209 @@
+From e9a6c1d4e30d6adb2190d52bebb7fecd2b539e82 Mon Sep 17 00:00:00 2001
+From: Lars Knoll <lars.knoll at theqtcompany.com>
+Date: Tue, 19 Jan 2016 15:37:26 +0100
+Subject: [PATCH] Don't check for revisions when assigning to grouped
+ properties
+
+This leads to wrong behavior in some cases, where we reject
+valid revisions, and there is probably no case, where this could
+lead to a conflict for the user of the API.
+
+Change-Id: I1614332cf4c07c6a227551612331dd69b2ae71f3
+Task-number: QTBUG-40043
+Reviewed-by: Simon Hausmann <simon.hausmann at theqtcompany.com>
+---
+ src/qml/compiler/qqmlirbuilder.cpp                      | 12 ++++++------
+ src/qml/compiler/qqmlirbuilder_p.h                      |  9 +++++++--
+ src/qml/compiler/qqmltypecompiler.cpp                   |  5 +++--
+ .../qml/qqmlecmascript/data/metaobjectRevision5.qml     | 12 ++++++++++++
+ tests/auto/qml/qqmlecmascript/testtypes.cpp             |  1 +
+ tests/auto/qml/qqmlecmascript/testtypes.h               | 17 +++++++++++++++++
+ tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp    |  9 +++++++++
+ 7 files changed, 55 insertions(+), 10 deletions(-)
+ create mode 100644 tests/auto/qml/qqmlecmascript/data/metaobjectRevision5.qml
+
+diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp
+index 16c4cb2..791355a 100644
+--- a/src/qml/compiler/qqmlirbuilder.cpp
++++ b/src/qml/compiler/qqmlirbuilder.cpp
+@@ -1875,17 +1875,17 @@ QV4::IR::Expr *JSCodeGen::fallbackNameLookup(const QString &name, int line, int
+ 
+ #ifndef V4_BOOTSTRAP
+ 
+-QQmlPropertyData *PropertyResolver::property(const QString &name, bool *notInRevision, QObject *object, QQmlContextData *context)
++QQmlPropertyData *PropertyResolver::property(const QString &name, bool *notInRevision, RevisionCheck check)
+ {
+     if (notInRevision) *notInRevision = false;
+ 
+-    QQmlPropertyData *d = cache->property(name, object, context);
++    QQmlPropertyData *d = cache->property(name, 0, 0);
+ 
+     // Find the first property
+     while (d && d->isFunction())
+         d = cache->overrideData(d);
+ 
+-    if (d && !cache->isAllowedInRevision(d)) {
++    if (check != IgnoreRevision && d && !cache->isAllowedInRevision(d)) {
+         if (notInRevision) *notInRevision = true;
+         return 0;
+     } else {
+@@ -1894,11 +1894,11 @@ QQmlPropertyData *PropertyResolver::property(const QString &name, bool *notInRev
+ }
+ 
+ 
+-QQmlPropertyData *PropertyResolver::signal(const QString &name, bool *notInRevision, QObject *object, QQmlContextData *context)
++QQmlPropertyData *PropertyResolver::signal(const QString &name, bool *notInRevision)
+ {
+     if (notInRevision) *notInRevision = false;
+ 
+-    QQmlPropertyData *d = cache->property(name, object, context);
++    QQmlPropertyData *d = cache->property(name, 0, 0);
+     if (notInRevision) *notInRevision = false;
+ 
+     while (d && !(d->isFunction()))
+@@ -1914,7 +1914,7 @@ QQmlPropertyData *PropertyResolver::signal(const QString &name, bool *notInRevis
+     if (name.endsWith(QStringLiteral("Changed"))) {
+         QString propName = name.mid(0, name.length() - static_cast<int>(strlen("Changed")));
+ 
+-        d = property(propName, notInRevision, object, context);
++        d = property(propName, notInRevision);
+         if (d)
+             return cache->signal(d->notifyIndex);
+     }
+diff --git a/src/qml/compiler/qqmlirbuilder_p.h b/src/qml/compiler/qqmlirbuilder_p.h
+index 9a659f4..633a4cc 100644
+--- a/src/qml/compiler/qqmlirbuilder_p.h
++++ b/src/qml/compiler/qqmlirbuilder_p.h
+@@ -460,10 +460,15 @@ struct Q_QML_EXPORT PropertyResolver
+         return cache->property(index);
+     }
+ 
+-    QQmlPropertyData *property(const QString &name, bool *notInRevision = 0, QObject *object = 0, QQmlContextData *context = 0);
++    enum RevisionCheck {
++        CheckRevision,
++        IgnoreRevision
++    };
++
++    QQmlPropertyData *property(const QString &name, bool *notInRevision = 0, RevisionCheck check = CheckRevision);
+ 
+     // This code must match the semantics of QQmlPropertyPrivate::findSignalByName
+-    QQmlPropertyData *signal(const QString &name, bool *notInRevision, QObject *object = 0, QQmlContextData *context = 0);
++    QQmlPropertyData *signal(const QString &name, bool *notInRevision);
+ 
+     QQmlPropertyCache *cache;
+ };
+diff --git a/src/qml/compiler/qqmltypecompiler.cpp b/src/qml/compiler/qqmltypecompiler.cpp
+index cde7a2a..6fd15d1 100644
+--- a/src/qml/compiler/qqmltypecompiler.cpp
++++ b/src/qml/compiler/qqmltypecompiler.cpp
+@@ -1859,6 +1859,7 @@ bool QQmlPropertyValidator::validateObject(int objectIndex, const QV4::CompiledD
+         }
+ 
+         bool bindingToDefaultProperty = false;
++        bool isGroupProperty = instantiatingBinding && instantiatingBinding->type == QV4::CompiledData::Binding::Type_GroupProperty;
+ 
+         bool notInRevision = false;
+         QQmlPropertyData *pd = 0;
+@@ -1867,7 +1868,7 @@ bool QQmlPropertyValidator::validateObject(int objectIndex, const QV4::CompiledD
+                 || binding->flags & QV4::CompiledData::Binding::IsSignalHandlerObject)
+                 pd = propertyResolver.signal(name, &notInRevision);
+             else
+-                pd = propertyResolver.property(name, &notInRevision);
++                pd = propertyResolver.property(name, &notInRevision, isGroupProperty ? QmlIR::PropertyResolver::IgnoreRevision : QmlIR::PropertyResolver::CheckRevision);
+ 
+             if (notInRevision) {
+                 QString typeName = stringAt(obj->inheritedTypeNameIndex);
+@@ -1879,7 +1880,7 @@ bool QQmlPropertyValidator::validateObject(int objectIndex, const QV4::CompiledD
+                 }
+             }
+         } else {
+-           if (instantiatingBinding && instantiatingBinding->type == QV4::CompiledData::Binding::Type_GroupProperty)
++           if (isGroupProperty)
+                COMPILE_EXCEPTION(binding, tr("Cannot assign a value directly to a grouped property"));
+ 
+            pd = defaultProperty;
+diff --git a/tests/auto/qml/qqmlecmascript/data/metaobjectRevision5.qml b/tests/auto/qml/qqmlecmascript/data/metaobjectRevision5.qml
+new file mode 100644
+index 0000000..0493a7c
+--- /dev/null
++++ b/tests/auto/qml/qqmlecmascript/data/metaobjectRevision5.qml
+@@ -0,0 +1,12 @@
++import Qt.test 1.1
++import QtQuick 2.0
++
++MyItemUsingRevisionedObject {
++    property real test
++
++    revisioned.prop1: 10
++    revisioned.prop2: 1
++
++    Component.onCompleted: test = revisioned.prop1 + revisioned.prop2
++}
++
+diff --git a/tests/auto/qml/qqmlecmascript/testtypes.cpp b/tests/auto/qml/qqmlecmascript/testtypes.cpp
+index 285158a..b9e088d 100644
+--- a/tests/auto/qml/qqmlecmascript/testtypes.cpp
++++ b/tests/auto/qml/qqmlecmascript/testtypes.cpp
+@@ -452,6 +452,7 @@ void registerTypes()
+     qmlRegisterType<MyRevisionedSubclass>("Qt.test",1,0,"MyRevisionedSubclass");
+     // MyRevisionedSubclass 1.1 uses MyRevisionedClass revision 1
+     qmlRegisterType<MyRevisionedSubclass,1>("Qt.test",1,1,"MyRevisionedSubclass");
++    qmlRegisterType<MyItemUsingRevisionedObject>("Qt.test", 1, 0, "MyItemUsingRevisionedObject");
+ 
+ #ifndef QT_NO_WIDGETS
+     qmlRegisterExtendedType<QWidget,QWidgetDeclarativeUI>("Qt.test",1,0,"QWidget");
+diff --git a/tests/auto/qml/qqmlecmascript/testtypes.h b/tests/auto/qml/qqmlecmascript/testtypes.h
+index eb4a314..5603356 100644
+--- a/tests/auto/qml/qqmlecmascript/testtypes.h
++++ b/tests/auto/qml/qqmlecmascript/testtypes.h
+@@ -1084,10 +1084,27 @@ protected:
+     qreal m_p4;
+ };
+ 
++
++class MyItemUsingRevisionedObject : public QObject
++{
++    Q_OBJECT
++    Q_PROPERTY(MyRevisionedClass *revisioned READ revisioned)
++
++public:
++    MyItemUsingRevisionedObject() {
++        m_revisioned = new MyRevisionedClass;
++    }
++
++    MyRevisionedClass *revisioned() const { return m_revisioned; }
++private:
++    MyRevisionedClass *m_revisioned;
++};
++
+ QML_DECLARE_TYPE(MyRevisionedBaseClassRegistered)
+ QML_DECLARE_TYPE(MyRevisionedBaseClassUnregistered)
+ QML_DECLARE_TYPE(MyRevisionedClass)
+ QML_DECLARE_TYPE(MyRevisionedSubclass)
++QML_DECLARE_TYPE(MyItemUsingRevisionedObject)
+ Q_DECLARE_METATYPE(MyQmlObject::MyType)
+ 
+ 
+diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
+index b30dfcb..a208bf5 100644
+--- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
++++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
+@@ -6578,6 +6578,15 @@ void tst_qqmlecmascript::revision()
+         QCOMPARE(object->property("test").toReal(), 11.);
+         delete object;
+     }
++
++    {
++        QQmlComponent component(&engine, testFileUrl("metaobjectRevision5.qml"));
++
++        QObject *object = component.create();
++        QVERIFY(object != 0);
++        QCOMPARE(object->property("test").toReal(), 11.);
++        delete object;
++    }
+ }
+ 
+ void tst_qqmlecmascript::realToInt()
+-- 
+2.7.0
+
diff --git a/debian/patches/series b/debian/patches/series
index 806ff0a..ae621bd 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -11,6 +11,7 @@ MultiPointTouchArea-Fixed-released-duplication-on-mo.patch
 Add-isTabFence-private-flag.patch
 QQuickItem-fix-an-infinite-loop-nextItemInFocusChain.patch
 QQuickItem-fix-another-infinite-loop-in-nextItemInFo.patch
+Don-t-check-for-revisions-when-assigning-to-grouped-.patch
 
 # Debian patches
 check_system_double-conversion.patch

-- 
qtdeclarative packaging



More information about the pkg-kde-commits mailing list