- Update Qt 5.7.0
This commit is contained in:
parent
62ead324c8
commit
a2d56a5f72
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,3 +4,4 @@
|
|||||||
/qtdeclarative-opensource-src-5.6.0-rc.tar.xz
|
/qtdeclarative-opensource-src-5.6.0-rc.tar.xz
|
||||||
/qtdeclarative-opensource-src-5.6.0.tar.xz
|
/qtdeclarative-opensource-src-5.6.0.tar.xz
|
||||||
/qtdeclarative-opensource-src-5.6.1.tar.xz
|
/qtdeclarative-opensource-src-5.6.1.tar.xz
|
||||||
|
/qtdeclarative-opensource-src-5.7.0.tar.xz
|
||||||
|
@ -1,99 +0,0 @@
|
|||||||
From 6371b208a9e55845090dcd34234e314c6587c105 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
|
||||||
Date: Tue, 17 May 2016 15:18:12 +0200
|
|
||||||
Subject: [PATCH 07/40] Revert "Remove this piece of code"
|
|
||||||
|
|
||||||
This reverts commit bad007360a0f6fba304d8f4c99826a1250fd886c.
|
|
||||||
|
|
||||||
The lookup in the global object is necessary to detect whether we've seen any
|
|
||||||
unresolved properties. This is used for the optimization of skipping binding
|
|
||||||
refresh updates when a context property changes.
|
|
||||||
|
|
||||||
Task-number: QTBUG-53431
|
|
||||||
Change-Id: Idb39a32e4b58b915496bbb9d8a098dc17a6f688a
|
|
||||||
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
|
|
||||||
---
|
|
||||||
src/qml/qml/qqmlcontextwrapper.cpp | 13 +++++++++++--
|
|
||||||
tests/auto/qml/qqmlcontext/data/qtbug_53431.qml | 7 +++++++
|
|
||||||
tests/auto/qml/qqmlcontext/tst_qqmlcontext.cpp | 14 ++++++++++++++
|
|
||||||
3 files changed, 32 insertions(+), 2 deletions(-)
|
|
||||||
create mode 100644 tests/auto/qml/qqmlcontext/data/qtbug_53431.qml
|
|
||||||
|
|
||||||
diff --git a/src/qml/qml/qqmlcontextwrapper.cpp b/src/qml/qml/qqmlcontextwrapper.cpp
|
|
||||||
index 0d84c3b..e3770a7 100644
|
|
||||||
--- a/src/qml/qml/qqmlcontextwrapper.cpp
|
|
||||||
+++ b/src/qml/qml/qqmlcontextwrapper.cpp
|
|
||||||
@@ -99,14 +99,23 @@ ReturnedValue QmlContextWrapper::get(const Managed *m, String *name, bool *hasPr
|
|
||||||
QV4::ExecutionEngine *v4 = resource->engine();
|
|
||||||
QV4::Scope scope(v4);
|
|
||||||
|
|
||||||
+ // In V8 the JS global object would come _before_ the QML global object,
|
|
||||||
+ // so simulate that here.
|
|
||||||
+ bool hasProp;
|
|
||||||
+ QV4::ScopedValue result(scope, v4->globalObject->get(name, &hasProp));
|
|
||||||
+ if (hasProp) {
|
|
||||||
+ if (hasProperty)
|
|
||||||
+ *hasProperty = hasProp;
|
|
||||||
+ return result->asReturnedValue();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (resource->d()->isNullWrapper)
|
|
||||||
return Object::get(m, name, hasProperty);
|
|
||||||
|
|
||||||
if (v4->callingQmlContext() != resource->d()->context)
|
|
||||||
return Object::get(m, name, hasProperty);
|
|
||||||
|
|
||||||
- bool hasProp;
|
|
||||||
- QV4::ScopedValue result(scope, Object::get(m, name, &hasProp));
|
|
||||||
+ result = Object::get(m, name, &hasProp);
|
|
||||||
if (hasProp) {
|
|
||||||
if (hasProperty)
|
|
||||||
*hasProperty = hasProp;
|
|
||||||
diff --git a/tests/auto/qml/qqmlcontext/data/qtbug_53431.qml b/tests/auto/qml/qqmlcontext/data/qtbug_53431.qml
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..2ceee2b
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/tests/auto/qml/qqmlcontext/data/qtbug_53431.qml
|
|
||||||
@@ -0,0 +1,7 @@
|
|
||||||
+import QtQml 2.0
|
|
||||||
+QtObject {
|
|
||||||
+ property int value: {
|
|
||||||
+ console.log("lookup in global object")
|
|
||||||
+ return 1
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
diff --git a/tests/auto/qml/qqmlcontext/tst_qqmlcontext.cpp b/tests/auto/qml/qqmlcontext/tst_qqmlcontext.cpp
|
|
||||||
index 18ef7ac..d338e6f 100644
|
|
||||||
--- a/tests/auto/qml/qqmlcontext/tst_qqmlcontext.cpp
|
|
||||||
+++ b/tests/auto/qml/qqmlcontext/tst_qqmlcontext.cpp
|
|
||||||
@@ -61,6 +61,7 @@ private slots:
|
|
||||||
void refreshExpressions();
|
|
||||||
void refreshExpressionsCrash();
|
|
||||||
void refreshExpressionsRootContext();
|
|
||||||
+ void skipExpressionRefresh_qtbug_53431();
|
|
||||||
|
|
||||||
void qtbug_22535();
|
|
||||||
void evalAfterInvalidate();
|
|
||||||
@@ -642,6 +643,19 @@ void tst_qqmlcontext::refreshExpressionsRootContext()
|
|
||||||
delete o1;
|
|
||||||
}
|
|
||||||
|
|
||||||
+void tst_qqmlcontext::skipExpressionRefresh_qtbug_53431()
|
|
||||||
+{
|
|
||||||
+ QQmlEngine engine;
|
|
||||||
+ QQmlComponent component(&engine, testFileUrl("qtbug_53431.qml"));
|
|
||||||
+ QScopedPointer<QObject> object(component.create(0));
|
|
||||||
+ QVERIFY(!object.isNull());
|
|
||||||
+ QCOMPARE(object->property("value").toInt(), 1);
|
|
||||||
+ object->setProperty("value", 10);
|
|
||||||
+ QCOMPARE(object->property("value").toInt(), 10);
|
|
||||||
+ engine.rootContext()->setContextProperty("randomContextProperty", 42);
|
|
||||||
+ QCOMPARE(object->property("value").toInt(), 10);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void tst_qqmlcontext::qtbug_22535()
|
|
||||||
{
|
|
||||||
QQmlEngine engine;
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,67 +0,0 @@
|
|||||||
From 82b0b31fe47a6a54c500f2cbea45b37fc28f3bee Mon Sep 17 00:00:00 2001
|
|
||||||
From: Filipe Azevedo <filipe.azevedo@kdab.com>
|
|
||||||
Date: Mon, 2 May 2016 13:11:26 +0200
|
|
||||||
Subject: [PATCH 10/40] Fix crash for unknown QQmlListModel roles in debug
|
|
||||||
builds
|
|
||||||
|
|
||||||
If a role is unknown, trying to access it will crash in getExistingRole.
|
|
||||||
Fixed that and now return QVariant() for unknown roles.
|
|
||||||
|
|
||||||
Change-Id: Iad5c1292a4faee893fbc5a69984cf776aca85d70
|
|
||||||
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
|
|
||||||
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
|
|
||||||
---
|
|
||||||
src/qml/types/qqmllistmodel.cpp | 2 ++
|
|
||||||
tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp | 16 ++++++++++++++++
|
|
||||||
2 files changed, 18 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/qml/types/qqmllistmodel.cpp b/src/qml/types/qqmllistmodel.cpp
|
|
||||||
index 4b0aa47..3d71621 100644
|
|
||||||
--- a/src/qml/types/qqmllistmodel.cpp
|
|
||||||
+++ b/src/qml/types/qqmllistmodel.cpp
|
|
||||||
@@ -392,6 +392,8 @@ void ListModel::updateCacheIndices()
|
|
||||||
|
|
||||||
QVariant ListModel::getProperty(int elementIndex, int roleIndex, const QQmlListModel *owner, QV4::ExecutionEngine *eng)
|
|
||||||
{
|
|
||||||
+ if (roleIndex >= m_layout->roleCount())
|
|
||||||
+ return QVariant();
|
|
||||||
ListElement *e = elements[elementIndex];
|
|
||||||
const ListLayout::Role &r = m_layout->getExistingRole(roleIndex);
|
|
||||||
return e->getProperty(r, owner, eng);
|
|
||||||
diff --git a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp
|
|
||||||
index d26c1c5..6b1dece 100644
|
|
||||||
--- a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp
|
|
||||||
+++ b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp
|
|
||||||
@@ -110,6 +110,7 @@ private slots:
|
|
||||||
void get_nested();
|
|
||||||
void get_nested_data();
|
|
||||||
void crash_model_with_multiple_roles();
|
|
||||||
+ void crash_model_with_unknown_roles();
|
|
||||||
void set_model_cache();
|
|
||||||
void property_changes();
|
|
||||||
void property_changes_data();
|
|
||||||
@@ -968,6 +969,21 @@ void tst_qqmllistmodel::crash_model_with_multiple_roles()
|
|
||||||
delete rootItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
+void tst_qqmllistmodel::crash_model_with_unknown_roles()
|
|
||||||
+{
|
|
||||||
+ QQmlEngine eng;
|
|
||||||
+ QQmlComponent component(&eng, testFileUrl("multipleroles.qml"));
|
|
||||||
+ QScopedPointer<QObject> rootItem(component.create());
|
|
||||||
+ QVERIFY(component.errorString().isEmpty());
|
|
||||||
+ QVERIFY(rootItem != 0);
|
|
||||||
+ QQmlListModel *model = rootItem->findChild<QQmlListModel*>("listModel");
|
|
||||||
+ QVERIFY(model != 0);
|
|
||||||
+
|
|
||||||
+ // used to cause a crash in debug builds
|
|
||||||
+ model->index(0, 0, QModelIndex()).data(Qt::DisplayRole);
|
|
||||||
+ model->index(0, 0, QModelIndex()).data(Qt::UserRole);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
//QTBUG-15190
|
|
||||||
void tst_qqmllistmodel::set_model_cache()
|
|
||||||
{
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
|||||||
From 40a80ec9d712d8c40ebd6a6373322c3332ff5b50 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
|
|
||||||
Date: Mon, 23 May 2016 16:01:44 +0200
|
|
||||||
Subject: [PATCH 11/40] Avoid Canvas crashes with qtquickcompiler
|
|
||||||
|
|
||||||
Change-Id: Ic87052308706b8ef71e2f27837abfbaea57c43cc
|
|
||||||
Task-number: QTBUG-49692
|
|
||||||
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
|
||||||
---
|
|
||||||
src/quick/items/context2d/qquickcanvasitem.cpp | 10 +++++++---
|
|
||||||
1 file changed, 7 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/quick/items/context2d/qquickcanvasitem.cpp b/src/quick/items/context2d/qquickcanvasitem.cpp
|
|
||||||
index 9fb49f9..47ac2c4 100644
|
|
||||||
--- a/src/quick/items/context2d/qquickcanvasitem.cpp
|
|
||||||
+++ b/src/quick/items/context2d/qquickcanvasitem.cpp
|
|
||||||
@@ -675,10 +675,14 @@ void QQuickCanvasItem::itemChange(QQuickItem::ItemChange change, const QQuickIte
|
|
||||||
QSGRenderContext *context = QQuickWindowPrivate::get(d->window)->context;
|
|
||||||
|
|
||||||
// Rendering to FramebufferObject needs a valid OpenGL context.
|
|
||||||
- if (context != 0 && (d->renderTarget != FramebufferObject || context->isValid()))
|
|
||||||
- sceneGraphInitialized();
|
|
||||||
- else
|
|
||||||
+ if (context != 0 && (d->renderTarget != FramebufferObject || context->isValid())) {
|
|
||||||
+ // Defer the call. In some (arguably incorrect) cases we get here due
|
|
||||||
+ // to ItemSceneChange with the user-supplied property values not yet
|
|
||||||
+ // set. Work this around by a deferred invoke. (QTBUG-49692)
|
|
||||||
+ QMetaObject::invokeMethod(this, "sceneGraphInitialized", Qt::QueuedConnection);
|
|
||||||
+ } else {
|
|
||||||
connect(d->window, SIGNAL(sceneGraphInitialized()), SLOT(sceneGraphInitialized()));
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
void QQuickCanvasItem::updatePolish()
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,155 +0,0 @@
|
|||||||
From 7dcda224fe73cb51a29e8946afd641a989d7209a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon Hausmann <simon.hausmann@qt.io>
|
|
||||||
Date: Wed, 25 May 2016 16:22:44 +0200
|
|
||||||
Subject: [PATCH 16/40] Fix crash with SignalTransition
|
|
||||||
|
|
||||||
Don't crash when using SignalTransition with a signal object instead of the
|
|
||||||
slot used to emit the signal. A signal object is just as good.
|
|
||||||
|
|
||||||
Task-number: QTBUG-53596
|
|
||||||
Change-Id: I8a419d16ec0c257c9a798a83ee5bad338794cdd2
|
|
||||||
Reviewed-by: Michael Brasser <michael.brasser@live.com>
|
|
||||||
---
|
|
||||||
src/imports/statemachine/signaltransition.cpp | 26 ++++++--
|
|
||||||
src/qml/jsruntime/qv4qobjectwrapper_p.h | 2 +-
|
|
||||||
.../qmltest/statemachine/tst_signaltransition.qml | 76 ++++++++++++++++++++++
|
|
||||||
3 files changed, 96 insertions(+), 8 deletions(-)
|
|
||||||
create mode 100644 tests/auto/qmltest/statemachine/tst_signaltransition.qml
|
|
||||||
|
|
||||||
diff --git a/src/imports/statemachine/signaltransition.cpp b/src/imports/statemachine/signaltransition.cpp
|
|
||||||
index 33ee11c..4f6c769 100644
|
|
||||||
--- a/src/imports/statemachine/signaltransition.cpp
|
|
||||||
+++ b/src/imports/statemachine/signaltransition.cpp
|
|
||||||
@@ -105,15 +105,27 @@ void SignalTransition::setSignal(const QJSValue &signal)
|
|
||||||
QV4::ExecutionEngine *jsEngine = QV8Engine::getV4(QQmlEngine::contextForObject(this)->engine());
|
|
||||||
QV4::Scope scope(jsEngine);
|
|
||||||
|
|
||||||
- QV4::Scoped<QV4::QObjectMethod> qobjectSignal(scope, QJSValuePrivate::convertedToValue(jsEngine, m_signal));
|
|
||||||
- Q_ASSERT(qobjectSignal);
|
|
||||||
-
|
|
||||||
- QObject *sender = qobjectSignal->object();
|
|
||||||
- Q_ASSERT(sender);
|
|
||||||
- QMetaMethod metaMethod = sender->metaObject()->method(qobjectSignal->methodIndex());
|
|
||||||
+ QObject *sender;
|
|
||||||
+ QMetaMethod signalMethod;
|
|
||||||
+
|
|
||||||
+ QV4::ScopedValue value(scope, QJSValuePrivate::convertedToValue(jsEngine, m_signal));
|
|
||||||
+
|
|
||||||
+ // Did we get the "slot" that can be used to invoke the signal?
|
|
||||||
+ if (QV4::QObjectMethod *signalSlot = value->as<QV4::QObjectMethod>()) {
|
|
||||||
+ sender = signalSlot->object();
|
|
||||||
+ Q_ASSERT(sender);
|
|
||||||
+ signalMethod = sender->metaObject()->method(signalSlot->methodIndex());
|
|
||||||
+ } else if (QV4::QmlSignalHandler *signalObject = value->as<QV4::QmlSignalHandler>()) { // or did we get the signal object (the one with the connect()/disconnect() functions) ?
|
|
||||||
+ sender = signalObject->object();
|
|
||||||
+ Q_ASSERT(sender);
|
|
||||||
+ signalMethod = sender->metaObject()->method(signalObject->signalIndex());
|
|
||||||
+ } else {
|
|
||||||
+ qmlInfo(this) << tr("Specified signal does not exist.");
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
QSignalTransition::setSenderObject(sender);
|
|
||||||
- QSignalTransition::setSignal(metaMethod.methodSignature());
|
|
||||||
+ QSignalTransition::setSignal(signalMethod.methodSignature());
|
|
||||||
|
|
||||||
connectTriggered();
|
|
||||||
}
|
|
||||||
diff --git a/src/qml/jsruntime/qv4qobjectwrapper_p.h b/src/qml/jsruntime/qv4qobjectwrapper_p.h
|
|
||||||
index 1126013..0fc39b2 100644
|
|
||||||
--- a/src/qml/jsruntime/qv4qobjectwrapper_p.h
|
|
||||||
+++ b/src/qml/jsruntime/qv4qobjectwrapper_p.h
|
|
||||||
@@ -166,7 +166,7 @@ struct Q_QML_EXPORT QObjectMethod : public QV4::FunctionObject
|
|
||||||
static void markObjects(Heap::Base *that, QV4::ExecutionEngine *e);
|
|
||||||
};
|
|
||||||
|
|
||||||
-struct QmlSignalHandler : public QV4::Object
|
|
||||||
+struct Q_QML_EXPORT QmlSignalHandler : public QV4::Object
|
|
||||||
{
|
|
||||||
V4_OBJECT2(QmlSignalHandler, QV4::Object)
|
|
||||||
V4_PROTOTYPE(signalHandlerPrototype)
|
|
||||||
diff --git a/tests/auto/qmltest/statemachine/tst_signaltransition.qml b/tests/auto/qmltest/statemachine/tst_signaltransition.qml
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..0e35207
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/tests/auto/qmltest/statemachine/tst_signaltransition.qml
|
|
||||||
@@ -0,0 +1,76 @@
|
|
||||||
+/****************************************************************************
|
|
||||||
+**
|
|
||||||
+** Copyright (C) 2014 Ford Motor Company
|
|
||||||
+** Copyright (C) 2016 The Qt Company
|
|
||||||
+** Contact: https://www.qt.io/licensing/
|
|
||||||
+**
|
|
||||||
+** This file is part of the test suite module of the Qt Toolkit.
|
|
||||||
+**
|
|
||||||
+** $QT_BEGIN_LICENSE:LGPL21$
|
|
||||||
+** Commercial License Usage
|
|
||||||
+** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
+** accordance with the commercial license agreement provided with the
|
|
||||||
+** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
+** a written agreement between you and The Qt Company. For licensing terms
|
|
||||||
+** and conditions see http://www.qt.io/terms-conditions. For further
|
|
||||||
+** information use the contact form at http://www.qt.io/contact-us.
|
|
||||||
+**
|
|
||||||
+** GNU Lesser General Public License Usage
|
|
||||||
+** Alternatively, this file may be used under the terms of the GNU Lesser
|
|
||||||
+** General Public License version 2.1 or version 3 as published by the Free
|
|
||||||
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
|
||||||
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
|
||||||
+** following information to ensure the GNU Lesser General Public License
|
|
||||||
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
|
||||||
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
+**
|
|
||||||
+** As a special exception, The Qt Company gives you certain additional
|
|
||||||
+** rights. These rights are described in The Qt Company LGPL Exception
|
|
||||||
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
|
||||||
+**
|
|
||||||
+** $QT_END_LICENSE$
|
|
||||||
+**
|
|
||||||
+****************************************************************************/
|
|
||||||
+
|
|
||||||
+import QtTest 1.1
|
|
||||||
+import QtQml.StateMachine 1.0
|
|
||||||
+
|
|
||||||
+TestCase {
|
|
||||||
+ id: testCase
|
|
||||||
+ StateMachine {
|
|
||||||
+ id: machine
|
|
||||||
+ initialState: startState
|
|
||||||
+ State {
|
|
||||||
+ id: startState
|
|
||||||
+ SignalTransition {
|
|
||||||
+ id: signalTrans
|
|
||||||
+ signal: testCase.onMysignal
|
|
||||||
+ targetState: finalState
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ FinalState {
|
|
||||||
+ id: finalState
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ SignalSpy {
|
|
||||||
+ id: finalStateActive
|
|
||||||
+ target: finalState
|
|
||||||
+ signalName: "activeChanged"
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ signal mysignal()
|
|
||||||
+
|
|
||||||
+ name: "testSignalTransition"
|
|
||||||
+ function test_signalTransition()
|
|
||||||
+ {
|
|
||||||
+ // Start statemachine, should not have reached finalState yet.
|
|
||||||
+ machine.start()
|
|
||||||
+ tryCompare(finalStateActive, "count", 0)
|
|
||||||
+ tryCompare(machine, "running", true)
|
|
||||||
+
|
|
||||||
+ testCase.mysignal()
|
|
||||||
+ tryCompare(finalStateActive, "count", 1)
|
|
||||||
+ tryCompare(machine, "running", false)
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,141 +0,0 @@
|
|||||||
From 7039db4885a143f8f1d363c9b71665e9160d3d55 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Filippo Cucchetto <filippocucchetto@gmail.com>
|
|
||||||
Date: Thu, 2 Jun 2016 21:49:37 +0200
|
|
||||||
Subject: [PATCH 24/40] Revert removal of "Fixed MouseArea threshold with
|
|
||||||
preventStealing"
|
|
||||||
|
|
||||||
This reverts commit 9c8dab537819f0d999e680490c2d125b8836cbbb
|
|
||||||
where commit e1400b5b4d8311769ad3b9f631479ee2b0271197 was removed
|
|
||||||
due to the breakage of QtLocation tests.
|
|
||||||
|
|
||||||
After some hours of debugging it seems that the problem in QtLocation
|
|
||||||
was due to filtering of mouse move events in QDeclarativeGeoMapItemBase.
|
|
||||||
See QTBUG-52075
|
|
||||||
|
|
||||||
Task-number: QTBUG-52534
|
|
||||||
Change-Id: I00f002c1d6f60f74a148b5a6ac2b9f63e93718a9
|
|
||||||
Reviewed-by: Paolo Angelelli <paolo.angelelli@theqtcompany.com>
|
|
||||||
Reviewed-by: Michal Klocek <michal.klocek@theqtcompany.com>
|
|
||||||
---
|
|
||||||
src/quick/items/qquickmousearea.cpp | 21 +++++++++++++--------
|
|
||||||
src/quick/items/qquickmousearea_p_p.h | 1 +
|
|
||||||
.../quick/qquickmousearea/tst_qquickmousearea.cpp | 11 +++++++++++
|
|
||||||
3 files changed, 25 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/quick/items/qquickmousearea.cpp b/src/quick/items/qquickmousearea.cpp
|
|
||||||
index ef053ab..d66e55a 100644
|
|
||||||
--- a/src/quick/items/qquickmousearea.cpp
|
|
||||||
+++ b/src/quick/items/qquickmousearea.cpp
|
|
||||||
@@ -52,7 +52,7 @@ DEFINE_BOOL_CONFIG_OPTION(qmlVisualTouchDebugging, QML_VISUAL_TOUCH_DEBUGGING)
|
|
||||||
QQuickMouseAreaPrivate::QQuickMouseAreaPrivate()
|
|
||||||
: enabled(true), scrollGestureEnabled(true), hovered(false), longPress(false),
|
|
||||||
moved(false), stealMouse(false), doubleClick(false), preventStealing(false),
|
|
||||||
- propagateComposedEvents(false), pressed(0)
|
|
||||||
+ propagateComposedEvents(false), overThreshold(false), pressed(0)
|
|
||||||
#ifndef QT_NO_DRAGANDDROP
|
|
||||||
, drag(0)
|
|
||||||
#endif
|
|
||||||
@@ -715,7 +715,7 @@ void QQuickMouseArea::mouseMoveEvent(QMouseEvent *event)
|
|
||||||
curLocalPos = event->windowPos();
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (keepMouseGrab() && d->stealMouse && !d->drag->active())
|
|
||||||
+ if (keepMouseGrab() && d->stealMouse && d->overThreshold && !d->drag->active())
|
|
||||||
d->drag->setActive(true);
|
|
||||||
|
|
||||||
QPointF startPos = d->drag->target()->parentItem()
|
|
||||||
@@ -741,16 +741,19 @@ void QQuickMouseArea::mouseMoveEvent(QMouseEvent *event)
|
|
||||||
if (d->drag->active())
|
|
||||||
d->drag->target()->setPosition(dragPos);
|
|
||||||
|
|
||||||
- if (!keepMouseGrab()
|
|
||||||
- && (QQuickWindowPrivate::dragOverThreshold(dragPos.x() - startPos.x(), Qt::XAxis, event, d->drag->threshold())
|
|
||||||
- || QQuickWindowPrivate::dragOverThreshold(dragPos.y() - startPos.y(), Qt::YAxis, event, d->drag->threshold()))) {
|
|
||||||
- setKeepMouseGrab(true);
|
|
||||||
- d->stealMouse = true;
|
|
||||||
-
|
|
||||||
+ if (!d->overThreshold && (QQuickWindowPrivate::dragOverThreshold(dragPos.x() - startPos.x(), Qt::XAxis, event, d->drag->threshold())
|
|
||||||
+ || QQuickWindowPrivate::dragOverThreshold(dragPos.y() - startPos.y(), Qt::YAxis, event, d->drag->threshold())))
|
|
||||||
+ {
|
|
||||||
+ d->overThreshold = true;
|
|
||||||
if (d->drag->smoothed())
|
|
||||||
d->startScene = event->windowPos();
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (!keepMouseGrab() && d->overThreshold) {
|
|
||||||
+ setKeepMouseGrab(true);
|
|
||||||
+ d->stealMouse = true;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
d->moved = true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
@@ -767,6 +770,7 @@ void QQuickMouseArea::mouseReleaseEvent(QMouseEvent *event)
|
|
||||||
{
|
|
||||||
Q_D(QQuickMouseArea);
|
|
||||||
d->stealMouse = false;
|
|
||||||
+ d->overThreshold = false;
|
|
||||||
if (!d->enabled && !d->pressed) {
|
|
||||||
QQuickItem::mouseReleaseEvent(event);
|
|
||||||
} else {
|
|
||||||
@@ -875,6 +879,7 @@ void QQuickMouseArea::ungrabMouse()
|
|
||||||
d->pressed = 0;
|
|
||||||
d->stealMouse = false;
|
|
||||||
d->doubleClick = false;
|
|
||||||
+ d->overThreshold = false;
|
|
||||||
setKeepMouseGrab(false);
|
|
||||||
|
|
||||||
#ifndef QT_NO_DRAGANDDROP
|
|
||||||
diff --git a/src/quick/items/qquickmousearea_p_p.h b/src/quick/items/qquickmousearea_p_p.h
|
|
||||||
index 014729b..f63c5f6 100644
|
|
||||||
--- a/src/quick/items/qquickmousearea_p_p.h
|
|
||||||
+++ b/src/quick/items/qquickmousearea_p_p.h
|
|
||||||
@@ -86,6 +86,7 @@ public:
|
|
||||||
bool doubleClick : 1;
|
|
||||||
bool preventStealing : 1;
|
|
||||||
bool propagateComposedEvents : 1;
|
|
||||||
+ bool overThreshold : 1;
|
|
||||||
Qt::MouseButtons pressed;
|
|
||||||
#ifndef QT_NO_DRAGANDDROP
|
|
||||||
QQuickDrag *drag;
|
|
||||||
diff --git a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
|
|
||||||
index 82c053d..9cdfd21 100644
|
|
||||||
--- a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
|
|
||||||
+++ b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
|
|
||||||
@@ -79,6 +79,7 @@ private slots:
|
|
||||||
void dragging_data() { acceptedButton_data(); }
|
|
||||||
void dragging();
|
|
||||||
void dragSmoothed();
|
|
||||||
+ void dragThreshold_data();
|
|
||||||
void dragThreshold();
|
|
||||||
void invalidDrag_data() { rejectedButton_data(); }
|
|
||||||
void invalidDrag();
|
|
||||||
@@ -375,8 +376,17 @@ void tst_QQuickMouseArea::dragSmoothed()
|
|
||||||
QTest::mouseRelease(&window, Qt::LeftButton, 0, QPoint(100, 122));
|
|
||||||
}
|
|
||||||
|
|
||||||
+void tst_QQuickMouseArea::dragThreshold_data()
|
|
||||||
+{
|
|
||||||
+ QTest::addColumn<bool>("preventStealing");
|
|
||||||
+ QTest::newRow("without preventStealing") << false;
|
|
||||||
+ QTest::newRow("with preventStealing") << true;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void tst_QQuickMouseArea::dragThreshold()
|
|
||||||
{
|
|
||||||
+ QFETCH(bool, preventStealing);
|
|
||||||
+
|
|
||||||
QQuickView window;
|
|
||||||
QByteArray errorMessage;
|
|
||||||
QVERIFY2(initView(window, testFileUrl("dragging.qml"), true, &errorMessage), errorMessage.constData());
|
|
||||||
@@ -386,6 +396,7 @@ void tst_QQuickMouseArea::dragThreshold()
|
|
||||||
QVERIFY(window.rootObject() != 0);
|
|
||||||
|
|
||||||
QQuickMouseArea *mouseRegion = window.rootObject()->findChild<QQuickMouseArea*>("mouseregion");
|
|
||||||
+ mouseRegion->setPreventStealing(preventStealing);
|
|
||||||
QQuickDrag *drag = mouseRegion->drag();
|
|
||||||
|
|
||||||
drag->setThreshold(5);
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,75 +0,0 @@
|
|||||||
From 6d54a59bd725ba83e758236c5ff0fc7855109dac Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon Hausmann <simon.hausmann@qt.io>
|
|
||||||
Date: Thu, 2 Jun 2016 15:57:41 +0200
|
|
||||||
Subject: [PATCH 27/40] Fix crash when using with statement with an expression
|
|
||||||
that throws
|
|
||||||
|
|
||||||
We need to evaluate the expression for the "with" statement that is supposed to
|
|
||||||
define the new scope _before_ opening up the scope, otherwise - when the
|
|
||||||
evaluation of the expression throws an exception - we'll try to pop the "with"
|
|
||||||
scope we couldn't open in the first place.
|
|
||||||
|
|
||||||
[ChangeLog][QtQml] Fix crash when using the "with" statement with an expression
|
|
||||||
that throws an exception.
|
|
||||||
|
|
||||||
Task-number: QTBUG-53794
|
|
||||||
Change-Id: I7733f5a4c5d844916302b9a91c789a0f6b421e8a
|
|
||||||
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
||||||
---
|
|
||||||
src/qml/compiler/qv4codegen.cpp | 5 +++--
|
|
||||||
tests/auto/qml/qjsengine/tst_qjsengine.cpp | 9 +++++++++
|
|
||||||
2 files changed, 12 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/qml/compiler/qv4codegen.cpp b/src/qml/compiler/qv4codegen.cpp
|
|
||||||
index ea82d07..c14163a 100644
|
|
||||||
--- a/src/qml/compiler/qv4codegen.cpp
|
|
||||||
+++ b/src/qml/compiler/qv4codegen.cpp
|
|
||||||
@@ -2718,6 +2718,9 @@ bool Codegen::visit(WithStatement *ast)
|
|
||||||
|
|
||||||
_function->hasWith = true;
|
|
||||||
|
|
||||||
+ const int withObject = _block->newTemp();
|
|
||||||
+ _block->MOVE(_block->TEMP(withObject), *expression(ast->expression));
|
|
||||||
+
|
|
||||||
// need an exception handler for with to cleanup the with scope
|
|
||||||
IR::BasicBlock *withExceptionHandler = _function->newBasicBlock(exceptionHandler());
|
|
||||||
withExceptionHandler->EXP(withExceptionHandler->CALL(withExceptionHandler->NAME(IR::Name::builtin_pop_scope, 0, 0), 0));
|
|
||||||
@@ -2732,8 +2735,6 @@ bool Codegen::visit(WithStatement *ast)
|
|
||||||
|
|
||||||
_block->JUMP(withBlock);
|
|
||||||
_block = withBlock;
|
|
||||||
- int withObject = _block->newTemp();
|
|
||||||
- _block->MOVE(_block->TEMP(withObject), *expression(ast->expression));
|
|
||||||
IR::ExprList *args = _function->New<IR::ExprList>();
|
|
||||||
args->init(_block->TEMP(withObject));
|
|
||||||
_block->EXP(_block->CALL(_block->NAME(IR::Name::builtin_push_with_scope, 0, 0), args));
|
|
||||||
diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
|
|
||||||
index 9a0865c..8594aec 100644
|
|
||||||
--- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp
|
|
||||||
+++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
|
|
||||||
@@ -193,6 +193,8 @@ private slots:
|
|
||||||
|
|
||||||
void v4FunctionWithoutQML();
|
|
||||||
|
|
||||||
+ void withNoContext();
|
|
||||||
+
|
|
||||||
signals:
|
|
||||||
void testSignal();
|
|
||||||
};
|
|
||||||
@@ -3840,6 +3842,13 @@ void tst_QJSEngine::v4FunctionWithoutQML()
|
|
||||||
QVERIFY(obj.called);
|
|
||||||
}
|
|
||||||
|
|
||||||
+void tst_QJSEngine::withNoContext()
|
|
||||||
+{
|
|
||||||
+ // Don't crash (QTBUG-53794)
|
|
||||||
+ QJSEngine engine;
|
|
||||||
+ engine.evaluate("with (noContext) true");
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
QTEST_MAIN(tst_QJSEngine)
|
|
||||||
|
|
||||||
#include "tst_qjsengine.moc"
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,63 +0,0 @@
|
|||||||
From 2ac19881f92c94f4e9427bd9ff513210675f259e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulf Hermann <ulf.hermann@qt.io>
|
|
||||||
Date: Wed, 8 Jun 2016 17:32:32 +0200
|
|
||||||
Subject: [PATCH 33/40] QML: Only release types if they aren't referenced
|
|
||||||
anymore
|
|
||||||
|
|
||||||
Just checking for references on m_compiledData is not enough. The
|
|
||||||
actual component can also be referenced. Thus it won't be deleted
|
|
||||||
on release(), but cannot be found in the type cache anymore.
|
|
||||||
|
|
||||||
Task-number: QTBUG-53761
|
|
||||||
Change-Id: I8567af8e75a078598e4fed31e4717134e1332278
|
|
||||||
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
|
||||||
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
|
||||||
---
|
|
||||||
src/qml/qml/qqmltypeloader.cpp | 3 ++-
|
|
||||||
tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp | 15 ++++++++++++---
|
|
||||||
2 files changed, 14 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp
|
|
||||||
index c684c86..01200fd 100644
|
|
||||||
--- a/src/qml/qml/qqmltypeloader.cpp
|
|
||||||
+++ b/src/qml/qml/qqmltypeloader.cpp
|
|
||||||
@@ -1961,7 +1961,8 @@ void QQmlTypeLoader::trimCache()
|
|
||||||
QList<TypeCache::Iterator> unneededTypes;
|
|
||||||
for (TypeCache::Iterator iter = m_typeCache.begin(), end = m_typeCache.end(); iter != end; ++iter) {
|
|
||||||
QQmlTypeData *typeData = iter.value();
|
|
||||||
- if (typeData->m_compiledData && typeData->m_compiledData->count() == 1) {
|
|
||||||
+ if (typeData->m_compiledData && typeData->count() == 1
|
|
||||||
+ && typeData->m_compiledData->count() == 1) {
|
|
||||||
// There are no live objects of this type
|
|
||||||
unneededTypes.append(iter);
|
|
||||||
}
|
|
||||||
diff --git a/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp b/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp
|
|
||||||
index 7045c7c..a1eaa05 100644
|
|
||||||
--- a/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp
|
|
||||||
+++ b/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp
|
|
||||||
@@ -86,10 +86,19 @@ void tst_QQMLTypeLoader::trimCache()
|
|
||||||
url.setQuery(QString::number(i));
|
|
||||||
|
|
||||||
QQmlTypeData *data = loader.getType(url);
|
|
||||||
- if (i % 5 == 0) // keep references to some of them so that they aren't trimmed
|
|
||||||
- data->compiledData()->addref();
|
|
||||||
+ // Run an event loop to receive the callback that release()es.
|
|
||||||
+ QTRY_COMPARE(data->count(), 2);
|
|
||||||
|
|
||||||
- data->release();
|
|
||||||
+ // keep references to some of them so that they aren't trimmed. References to either the
|
|
||||||
+ // QQmlTypeData or its compiledData() should prevent the trimming.
|
|
||||||
+ if (i % 10 == 0) {
|
|
||||||
+ // keep ref on data, don't add ref on data->compiledData()
|
|
||||||
+ } else if (i % 5 == 0) {
|
|
||||||
+ data->compiledData()->addref();
|
|
||||||
+ data->release();
|
|
||||||
+ } else {
|
|
||||||
+ data->release();
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < 256; ++i) {
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,116 +0,0 @@
|
|||||||
From d4efd5ab810e92202efe672be29136324dd2a3f9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?D=C4=81vis=20Mos=C4=81ns?= <davispuh@gmail.com>
|
|
||||||
Date: Mon, 28 Dec 2015 05:43:18 +0200
|
|
||||||
Subject: [PATCH] Check for NULL from glGetString
|
|
||||||
|
|
||||||
glGetString can return NULL pointer in case of error
|
|
||||||
so check for it before using.
|
|
||||||
|
|
||||||
Change-Id: Ia07424c8f2b3ce6dce675514900a509e3ef3b739
|
|
||||||
---
|
|
||||||
src/particles/qquickimageparticle.cpp | 6 ++++--
|
|
||||||
src/quick/scenegraph/qsgcontext.cpp | 22 ++++++++++++++++------
|
|
||||||
.../qsgdefaultdistancefieldglyphcache.cpp | 8 +++++---
|
|
||||||
src/quick/scenegraph/util/qsgatlastexture.cpp | 4 ++--
|
|
||||||
4 files changed, 27 insertions(+), 13 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/particles/qquickimageparticle.cpp b/src/particles/qquickimageparticle.cpp
|
|
||||||
index d78a350..b54861e 100644
|
|
||||||
--- a/src/particles/qquickimageparticle.cpp
|
|
||||||
+++ b/src/particles/qquickimageparticle.cpp
|
|
||||||
@@ -1276,14 +1276,16 @@ void QQuickImageParticle::finishBuildParticleNodes(QSGNode** node)
|
|
||||||
// OS X 10.8.3 introduced a bug in the AMD drivers, for at least the 2011 macbook pros,
|
|
||||||
// causing point sprites who read gl_PointCoord in the frag shader to come out as
|
|
||||||
// green-red blobs.
|
|
||||||
- if (perfLevel < Deformable && strstr((char *) glGetString(GL_VENDOR), "ATI")) {
|
|
||||||
+ const char *vendor = (const char *) glGetString(GL_VENDOR);
|
|
||||||
+ if (perfLevel < Deformable && vendor && strstr(vendor, "ATI")) {
|
|
||||||
perfLevel = Deformable;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef Q_OS_LINUX
|
|
||||||
// Nouveau drivers can potentially freeze a machine entirely when taking the point-sprite path.
|
|
||||||
- if (perfLevel < Deformable && strstr((const char *) glGetString(GL_VENDOR), "nouveau"))
|
|
||||||
+ const char *vendor = (const char *) glGetString(GL_VENDOR);
|
|
||||||
+ if (perfLevel < Deformable && vendor && strstr(vendor, "nouveau"))
|
|
||||||
perfLevel = Deformable;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
diff --git a/src/quick/scenegraph/qsgcontext.cpp b/src/quick/scenegraph/qsgcontext.cpp
|
|
||||||
index dd6977e..43d549f 100644
|
|
||||||
--- a/src/quick/scenegraph/qsgcontext.cpp
|
|
||||||
+++ b/src/quick/scenegraph/qsgcontext.cpp
|
|
||||||
@@ -624,14 +624,24 @@ void QSGRenderContext::initialize(QOpenGLContext *context)
|
|
||||||
m_sg->renderContextInitialized(this);
|
|
||||||
|
|
||||||
#ifdef Q_OS_LINUX
|
|
||||||
+ while (funcs->glGetError() != GL_NO_ERROR);
|
|
||||||
+
|
|
||||||
const char *vendor = (const char *) funcs->glGetString(GL_VENDOR);
|
|
||||||
- if (strstr(vendor, "nouveau"))
|
|
||||||
- m_brokenIBOs = true;
|
|
||||||
const char *renderer = (const char *) funcs->glGetString(GL_RENDERER);
|
|
||||||
- if (strstr(renderer, "llvmpipe"))
|
|
||||||
- m_serializedRender = true;
|
|
||||||
- if (strstr(vendor, "Hisilicon Technologies") && strstr(renderer, "Immersion.16"))
|
|
||||||
- m_brokenIBOs = true;
|
|
||||||
+
|
|
||||||
+ if (vendor && renderer) {
|
|
||||||
+ if (strstr(vendor, "nouveau"))
|
|
||||||
+ m_brokenIBOs = true;
|
|
||||||
+ if (strstr(renderer, "llvmpipe"))
|
|
||||||
+ m_serializedRender = true;
|
|
||||||
+ if (strstr(vendor, "Hisilicon Technologies") && strstr(renderer, "Immersion.16"))
|
|
||||||
+ m_brokenIBOs = true;
|
|
||||||
+ } else {
|
|
||||||
+ GLenum err;
|
|
||||||
+ while ((err = funcs->glGetError()) != GL_NO_ERROR) {
|
|
||||||
+ qWarning("QSGRenderContext::initialize: GL error %x from glGetString", err);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
emit initialized();
|
|
||||||
diff --git a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp
|
|
||||||
index dcc485c..43e234b 100644
|
|
||||||
--- a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp
|
|
||||||
+++ b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp
|
|
||||||
@@ -488,9 +488,11 @@ bool QSGDefaultDistanceFieldGlyphCache::useTextureUploadWorkaround() const
|
|
||||||
static bool set = false;
|
|
||||||
static bool useWorkaround = false;
|
|
||||||
if (!set) {
|
|
||||||
- useWorkaround = qstrcmp(reinterpret_cast<const char*>(m_funcs->glGetString(GL_RENDERER)),
|
|
||||||
- "Mali-400 MP") == 0;
|
|
||||||
- set = true;
|
|
||||||
+ const char *renderer = reinterpret_cast<const char*>(m_funcs->glGetString(GL_RENDERER));
|
|
||||||
+ if (renderer) {
|
|
||||||
+ useWorkaround = qstrcmp(renderer, "Mali-400 MP") == 0;
|
|
||||||
+ set = true;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
return useWorkaround;
|
|
||||||
}
|
|
||||||
diff --git a/src/quick/scenegraph/util/qsgatlastexture.cpp b/src/quick/scenegraph/util/qsgatlastexture.cpp
|
|
||||||
index 8e8e870..d726907 100644
|
|
||||||
--- a/src/quick/scenegraph/util/qsgatlastexture.cpp
|
|
||||||
+++ b/src/quick/scenegraph/util/qsgatlastexture.cpp
|
|
||||||
@@ -150,13 +150,13 @@ Atlas::Atlas(const QSize &size)
|
|
||||||
wrongfullyReportsBgra8888Support = false;
|
|
||||||
|
|
||||||
const char *ext = (const char *) QOpenGLContext::currentContext()->functions()->glGetString(GL_EXTENSIONS);
|
|
||||||
- if (!wrongfullyReportsBgra8888Support
|
|
||||||
+ if (!wrongfullyReportsBgra8888Support && ext
|
|
||||||
&& (strstr(ext, "GL_EXT_bgra")
|
|
||||||
|| strstr(ext, "GL_EXT_texture_format_BGRA8888")
|
|
||||||
|| strstr(ext, "GL_IMG_texture_format_BGRA8888"))) {
|
|
||||||
m_internalFormat = m_externalFormat = GL_BGRA;
|
|
||||||
#ifdef Q_OS_IOS
|
|
||||||
- } else if (strstr(ext, "GL_APPLE_texture_format_BGRA8888")) {
|
|
||||||
+ } else if (ext && strstr(ext, "GL_APPLE_texture_format_BGRA8888")) {
|
|
||||||
m_internalFormat = GL_RGBA;
|
|
||||||
m_externalFormat = GL_BGRA;
|
|
||||||
#endif // IOS
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -13,22 +13,24 @@
|
|||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%ifarch %{ix86}
|
||||||
%global nosse2_hack 1
|
%global nosse2_hack 1
|
||||||
## TODO:
|
## TODO:
|
||||||
# * consider debian's approach of runtime detection instead:
|
# * consider debian's approach of runtime detection instead:
|
||||||
# https://codereview.qt-project.org/#/c/127354/
|
# https://codereview.qt-project.org/#/c/127354/
|
||||||
|
%endif
|
||||||
|
|
||||||
#define prerelease
|
#define prerelease
|
||||||
|
|
||||||
Summary: Qt5 - QtDeclarative component
|
Summary: Qt5 - QtDeclarative component
|
||||||
Name: qt5-%{qt_module}
|
Name: qt5-%{qt_module}
|
||||||
Version: 5.6.1
|
Version: 5.7.0
|
||||||
Release: 5%{?prerelease:.%{prerelease}}%{?dist}
|
Release: 2%{?dist}
|
||||||
|
|
||||||
# See LICENSE.GPL LICENSE.LGPL LGPL_EXCEPTION.txt, for details
|
# See LICENSE.GPL LICENSE.LGPL LGPL_EXCEPTION.txt, for details
|
||||||
License: LGPLv2 with exceptions or GPLv3 with exceptions
|
License: LGPLv2 with exceptions or GPLv3 with exceptions
|
||||||
Url: http://www.qt.io
|
Url: http://www.qt.io
|
||||||
Source0: http://download.qt.io/official_releases/qt/5.6/%{version}%{?prerelease:-%{prerelease}}/submodules/%{qt_module}-opensource-src-%{version}%{?prerelease:-%{prerelease}}.tar.xz
|
Source0: http://download.qt.io/snapshots/qt/5.6/%{version}%{?prerelease:-%{prerelease}}/submodules/%{qt_module}-opensource-src-%{version}%{?prerelease:-%{prerelease}}.tar.xz
|
||||||
|
|
||||||
# support no_sse2 CONFIG (fedora i686 builds cannot assume -march=pentium4 -msse2 -mfpmath=sse flags, or the JIT that needs them)
|
# support no_sse2 CONFIG (fedora i686 builds cannot assume -march=pentium4 -msse2 -mfpmath=sse flags, or the JIT that needs them)
|
||||||
# https://codereview.qt-project.org/#change,73710
|
# https://codereview.qt-project.org/#change,73710
|
||||||
@ -40,30 +42,14 @@ Patch1: qtdeclarative-opensource-src-5.5.0-no_sse2.patch
|
|||||||
Patch2: qtdeclarative-QQuickShaderEffectSource_deadlock.patch
|
Patch2: qtdeclarative-QQuickShaderEffectSource_deadlock.patch
|
||||||
|
|
||||||
## upstream patches
|
## upstream patches
|
||||||
Patch7: 0007-Revert-Remove-this-piece-of-code.patch
|
|
||||||
Patch10: 0010-Fix-crash-for-unknown-QQmlListModel-roles-in-debug-b.patch
|
|
||||||
Patch11: 0011-Avoid-Canvas-crashes-with-qtquickcompiler.patch
|
|
||||||
Patch16: 0016-Fix-crash-with-SignalTransition.patch
|
|
||||||
Patch24: 0024-Revert-removal-of-Fixed-MouseArea-threshold-with-pre.patch
|
|
||||||
Patch27: 0027-Fix-crash-when-using-with-statement-with-an-expressi.patch
|
|
||||||
Patch33: 0033-QML-Only-release-types-if-they-aren-t-referenced-any.patch
|
|
||||||
|
|
||||||
## upstreamable patches
|
## upstreamable patches
|
||||||
# use system double-conversation
|
# use system double-conversation
|
||||||
%if 0%{?fedora} || 0%{?rhel} > 6
|
|
||||||
%global system_doubleconv 1
|
|
||||||
BuildRequires: double-conversion-devel
|
|
||||||
%endif
|
|
||||||
Patch200: qtdeclarative-system_doubleconv.patch
|
|
||||||
# https://bugs.kde.org/show_bug.cgi?id=346118#c108
|
# https://bugs.kde.org/show_bug.cgi?id=346118#c108
|
||||||
Patch201: qtdeclarative-kdebug346118.patch
|
Patch201: qtdeclarative-kdebug346118.patch
|
||||||
# additional i686/qml workaround (on top of existing patch135), https://bugzilla.redhat.com/1331593
|
# additional i686/qml workaround (on top of existing patch135), https://bugzilla.redhat.com/1331593
|
||||||
Patch235: qtdeclarative-opensource-src-5.6.0-qml_no-lifetime-dse.patch
|
Patch235: qtdeclarative-opensource-src-5.6.0-qml_no-lifetime-dse.patch
|
||||||
|
|
||||||
## upstream patches under review
|
|
||||||
# Check-for-NULL-from-glGetStrin
|
|
||||||
Patch500: Check-for-NULL-from-glGetString.patch
|
|
||||||
|
|
||||||
Obsoletes: qt5-qtjsbackend < 5.2.0
|
Obsoletes: qt5-qtjsbackend < 5.2.0
|
||||||
|
|
||||||
BuildRequires: cmake
|
BuildRequires: cmake
|
||||||
@ -71,7 +57,7 @@ BuildRequires: qt5-qtbase-devel >= %{version}
|
|||||||
BuildRequires: qt5-qtbase-private-devel
|
BuildRequires: qt5-qtbase-private-devel
|
||||||
%{?_qt5:Requires: %{_qt5}%{?_isa} = %{_qt5_version}}
|
%{?_qt5:Requires: %{_qt5}%{?_isa} = %{_qt5_version}}
|
||||||
%if ! 0%{?bootstrap}
|
%if ! 0%{?bootstrap}
|
||||||
BuildRequires: qt5-qtxmlpatterns-devel
|
BuildRequires: pkgconfig(Qt5XmlPatterns)
|
||||||
%endif
|
%endif
|
||||||
BuildRequires: python
|
BuildRequires: python
|
||||||
|
|
||||||
@ -126,24 +112,9 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
|
|||||||
%patch1 -p1 -b .no_sse2
|
%patch1 -p1 -b .no_sse2
|
||||||
%endif
|
%endif
|
||||||
%patch2 -p1 -b .QQuickShaderEffectSource_deadlock
|
%patch2 -p1 -b .QQuickShaderEffectSource_deadlock
|
||||||
|
|
||||||
%patch7 -p1 -b .0007
|
|
||||||
%patch10 -p1 -b .0010
|
|
||||||
%patch11 -p1 -b .0011
|
|
||||||
%patch16 -p1 -b .0016
|
|
||||||
%patch24 -p1 -b .0024
|
|
||||||
%patch27 -p1 -b .0027
|
|
||||||
%patch33 -p1 -b .0033
|
|
||||||
|
|
||||||
%if 0%{?system_doubleconv}
|
|
||||||
%patch200 -p1 -b .system_doubleconv
|
|
||||||
rm -rfv src/3rdparty/double-conversion
|
|
||||||
%endif
|
|
||||||
%patch201 -p0 -b .kdebug346118
|
%patch201 -p0 -b .kdebug346118
|
||||||
%patch235 -p1 -b .qml_no-lifetime-dse
|
%patch235 -p1 -b .qml_no-lifetime-dse
|
||||||
|
|
||||||
%patch500 -p1 -b .Check-for-NULL-from-glGetString
|
|
||||||
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
mkdir %{_target_platform}
|
mkdir %{_target_platform}
|
||||||
@ -208,24 +179,14 @@ popd
|
|||||||
# nuke .prl reference(s) to %%buildroot, excessive (.la-like) libs
|
# nuke .prl reference(s) to %%buildroot, excessive (.la-like) libs
|
||||||
pushd %{buildroot}%{_qt5_libdir}
|
pushd %{buildroot}%{_qt5_libdir}
|
||||||
for prl_file in libQt5*.prl ; do
|
for prl_file in libQt5*.prl ; do
|
||||||
sed -i \
|
sed -i -e "/^QMAKE_PRL_BUILD_DIR/d" ${prl_file}
|
||||||
-e "/^QMAKE_PRL_BUILD_DIR/d" \
|
|
||||||
-e "/-ldouble-conversion/d" \
|
|
||||||
${prl_file}
|
|
||||||
if [ -f "$(basename ${prl_file} .prl).so" ]; then
|
|
||||||
rm -fv "$(basename ${prl_file} .prl).la"
|
rm -fv "$(basename ${prl_file} .prl).la"
|
||||||
else
|
sed -i -e "/^QMAKE_PRL_LIBS/d" ${prl_file}
|
||||||
sed -i \
|
|
||||||
-e "/^QMAKE_PRL_LIBS/d" \
|
|
||||||
-e "/-ldouble-conversion/d" \
|
|
||||||
$(basename ${prl_file} .prl).la
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
popd
|
popd
|
||||||
|
|
||||||
|
|
||||||
%check
|
%check
|
||||||
test -z "$(grep double-conversion %{buildroot}%{_qt5_libdir}/*.{la,prl})"
|
|
||||||
%if 0%{?tests}
|
%if 0%{?tests}
|
||||||
export CTEST_OUTPUT_ON_FAILURE=1
|
export CTEST_OUTPUT_ON_FAILURE=1
|
||||||
export PATH=%{buildroot}%{_qt5_bindir}:$PATH
|
export PATH=%{buildroot}%{_qt5_bindir}:$PATH
|
||||||
@ -254,8 +215,8 @@ make check -k -C %{_target_platform}/tests ||:
|
|||||||
%{_qt5_libdir}/libQt5QuickTest.so.5*
|
%{_qt5_libdir}/libQt5QuickTest.so.5*
|
||||||
%{_qt5_plugindir}/qmltooling/
|
%{_qt5_plugindir}/qmltooling/
|
||||||
%{_qt5_archdatadir}/qml/
|
%{_qt5_archdatadir}/qml/
|
||||||
%dir %{_qt5_libdir}/cmake/Qt5Qml/
|
|
||||||
%{_qt5_libdir}/cmake/Qt5Qml/Qt5Qml_*Factory.cmake
|
|
||||||
|
|
||||||
%files devel
|
%files devel
|
||||||
%{_bindir}/qml*
|
%{_bindir}/qml*
|
||||||
@ -269,10 +230,16 @@ make check -k -C %{_target_platform}/tests ||:
|
|||||||
%{_qt5_libdir}/cmake/Qt5*/Qt5*Config*.cmake
|
%{_qt5_libdir}/cmake/Qt5*/Qt5*Config*.cmake
|
||||||
%{_qt5_libdir}/pkgconfig/Qt5*.pc
|
%{_qt5_libdir}/pkgconfig/Qt5*.pc
|
||||||
%{_qt5_archdatadir}/mkspecs/modules/*.pri
|
%{_qt5_archdatadir}/mkspecs/modules/*.pri
|
||||||
|
%dir %{_qt5_libdir}/cmake/Qt5Qml/
|
||||||
|
%{_qt5_libdir}/cmake/Qt5Qml/Qt5Qml_*Factory.cmake
|
||||||
|
|
||||||
%files static
|
%files static
|
||||||
%{_qt5_libdir}/libQt5QmlDevTools.*a
|
%{_qt5_libdir}/libQt5QmlDevTools.a
|
||||||
%{_qt5_libdir}/libQt5QmlDevTools.prl
|
%{_qt5_libdir}/libQt5QmlDevTools.prl
|
||||||
|
%{_qt5_libdir}/libQt5PacketProtocol.a
|
||||||
|
%{_qt5_libdir}/libQt5PacketProtocol.prl
|
||||||
|
%{_qt5_libdir}/libQt5QmlDebug.a
|
||||||
|
%{_qt5_libdir}/libQt5QmlDebug.prl
|
||||||
|
|
||||||
%if 0%{?docs}
|
%if 0%{?docs}
|
||||||
%files doc
|
%files doc
|
||||||
@ -288,17 +255,14 @@ make check -k -C %{_target_platform}/tests ||:
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Thu Jun 16 2016 Rex Dieter <rdieter@fedoraproject.org> 5.6.1-5
|
* Mon Jul 04 2016 Helio Chissini de Castro <helio@kde.org> - 5.7.0-2
|
||||||
- backport 5.6 branch fixes
|
- Compiled with gcc
|
||||||
|
|
||||||
* Wed Jun 15 2016 Rex Dieter <rdieter@fedoraproject.org> - 5.6.1-4
|
* Tue Jun 14 2016 Helio Chissini de Castro <helio@kde.org> - 5.7.0-1
|
||||||
- drop pkgconfig-style Qt5 deps
|
- Qt 5.7.0 release
|
||||||
|
|
||||||
* Wed Jun 15 2016 Jan Grulich <jgrulich@redhat.com> - 5.6.1-3
|
* Thu Jun 09 2016 Helio Chissini de Castro <helio@kde.org> - 5.7.0-0.1
|
||||||
- Apply no_sse2 hack to all architecturs to make qt5-qtdeclarative-devel multilib-clean
|
- Prepare for 5.7.0
|
||||||
|
|
||||||
* Fri Jun 10 2016 Rex Dieter <rdieter@fedoraproject.org> - 5.6.1-2
|
|
||||||
- strip double-conversion references from .la/.prl files
|
|
||||||
|
|
||||||
* Thu Jun 09 2016 Jan Grulich <jgrulich@redhat.com> - 5.6.1-1
|
* Thu Jun 09 2016 Jan Grulich <jgrulich@redhat.com> - 5.6.1-1
|
||||||
- Update to 5.6.1
|
- Update to 5.6.1
|
||||||
|
@ -1,66 +0,0 @@
|
|||||||
From 187a5b0c6e74e0109e4ec257104428a3c87fb52f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Marco Benelli <marco.benelli@theqtcompany.com>
|
|
||||||
Date: Wed, 27 Jan 2016 09:18:02 +0100
|
|
||||||
Subject: [PATCH] qmlimportscanner: do not use local predicates.
|
|
||||||
|
|
||||||
Some (?) pre C++11 compilers are not able to resolve template arguments
|
|
||||||
for std::find_if when the predicates are local to the function.
|
|
||||||
|
|
||||||
Change-Id: I1e5c4adc3409bd32081ddedff158ab9dcc2eaa9a
|
|
||||||
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
|
||||||
---
|
|
||||||
tools/qmlimportscanner/main.cpp | 31 ++++++++++++++++++-------------
|
|
||||||
1 file changed, 18 insertions(+), 13 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/tools/qmlimportscanner/main.cpp b/tools/qmlimportscanner/main.cpp
|
|
||||||
index b16253a..189459f 100644
|
|
||||||
--- a/tools/qmlimportscanner/main.cpp
|
|
||||||
+++ b/tools/qmlimportscanner/main.cpp
|
|
||||||
@@ -344,6 +344,24 @@ QVariantList mergeImports(const QVariantList &a, const QVariantList &b)
|
|
||||||
return merged;
|
|
||||||
}
|
|
||||||
|
|
||||||
+// Predicates needed by findQmlImportsInDirectory.
|
|
||||||
+
|
|
||||||
+struct isMetainfo {
|
|
||||||
+ bool operator() (const QFileInfo &x) const {
|
|
||||||
+ return x.suffix() == QLatin1String("metainfo");
|
|
||||||
+ }
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+struct pathStartsWith {
|
|
||||||
+ pathStartsWith(const QString &path) : _path(path) {}
|
|
||||||
+ bool operator() (const QString &x) const {
|
|
||||||
+ return _path.startsWith(x);
|
|
||||||
+ }
|
|
||||||
+ const QString _path;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+
|
|
||||||
// Scan all qml files in directory for import statements
|
|
||||||
QVariantList findQmlImportsInDirectory(const QString &qmlDir)
|
|
||||||
{
|
|
||||||
@@ -353,19 +371,6 @@ QVariantList findQmlImportsInDirectory(const QString &qmlDir)
|
|
||||||
|
|
||||||
QDirIterator iterator(qmlDir, QDir::AllDirs | QDir::NoDotDot, QDirIterator::Subdirectories);
|
|
||||||
QStringList blacklist;
|
|
||||||
- struct isMetainfo {
|
|
||||||
- bool operator() (const QFileInfo &x) const {
|
|
||||||
- return x.suffix() == QLatin1String("metainfo");
|
|
||||||
- }
|
|
||||||
- };
|
|
||||||
- struct pathStartsWith {
|
|
||||||
- pathStartsWith(const QString &path) : _path(path) {}
|
|
||||||
- bool operator() (const QString &x) const {
|
|
||||||
- return _path.startsWith(x);
|
|
||||||
- }
|
|
||||||
- const QString _path;
|
|
||||||
- };
|
|
||||||
-
|
|
||||||
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
iterator.next();
|
|
||||||
--
|
|
||||||
1.9.3
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
|||||||
diff -up qtdeclarative-opensource-src-5.6.0/src/qml/jsruntime/jsruntime.pri.system_doubleconv qtdeclarative-opensource-src-5.6.0/src/qml/jsruntime/jsruntime.pri
|
|
||||||
--- qtdeclarative-opensource-src-5.6.0/src/qml/jsruntime/jsruntime.pri.system_doubleconv 2016-05-20 08:25:07.986878324 -0500
|
|
||||||
+++ qtdeclarative-opensource-src-5.6.0/src/qml/jsruntime/jsruntime.pri 2016-05-20 11:21:05.059471545 -0500
|
|
||||||
@@ -118,4 +118,5 @@ valgrind {
|
|
||||||
|
|
||||||
ios: DEFINES += ENABLE_ASSEMBLER_WX_EXCLUSIVE=1
|
|
||||||
|
|
||||||
-include(../../3rdparty/double-conversion/double-conversion.pri)
|
|
||||||
+INCLUDEPATH += /usr/include/double-conversion
|
|
||||||
+LIBS_PRIVATE += -ldouble-conversion
|
|
||||||
diff -up qtdeclarative-opensource-src-5.6.0/src/qml/jsruntime/qv4runtime.cpp.system_doubleconv qtdeclarative-opensource-src-5.6.0/src/qml/jsruntime/qv4runtime.cpp
|
|
||||||
--- qtdeclarative-opensource-src-5.6.0/src/qml/jsruntime/qv4runtime.cpp.system_doubleconv 2016-02-26 03:34:34.000000000 -0600
|
|
||||||
+++ qtdeclarative-opensource-src-5.6.0/src/qml/jsruntime/qv4runtime.cpp 2016-05-20 11:22:00.603641534 -0500
|
|
||||||
@@ -60,7 +60,7 @@
|
|
||||||
|
|
||||||
#include <wtf/MathExtras.h>
|
|
||||||
|
|
||||||
-#include "../../3rdparty/double-conversion/double-conversion.h"
|
|
||||||
+#include <double-conversion.h>
|
|
||||||
|
|
||||||
#ifdef QV4_COUNT_RUNTIME_FUNCTIONS
|
|
||||||
# include <QtCore/QBuffer>
|
|
Loading…
Reference in New Issue
Block a user