aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2017-12-08 13:57:48 +0100
committerLiang Qi <liang.qi@qt.io>2017-12-08 13:57:48 +0100
commit8283bc83857ed8c7d85b61d2dc3b35fa4e96a037 (patch)
tree51822ff6eac9bd96693657c8f648fafccb0bd69f
parentf98e83d66c4315e58f777150e129e25fdaa4312f (diff)
parentdac71f3d6f6bc4f159f6107c792bc70cfe7c308e (diff)
Merge remote-tracking branch 'origin/5.10.0' into 5.10
-rw-r--r--dist/changes-5.10.0188
-rw-r--r--dist/changes-5.9.373
-rw-r--r--src/qml/debugger/qqmlprofiler_p.h11
-rw-r--r--src/qml/qml/qqmlimport.cpp10
-rw-r--r--src/qml/qml/qqmlmetatype.cpp4
-rw-r--r--src/qml/qml/qqmltypeloader.cpp10
-rw-r--r--src/qml/types/qqmldelegatemodel.cpp2
-rw-r--r--src/quick/items/qquickwindow.cpp19
-rw-r--r--src/quick/scenegraph/adaptations/software/qsgsoftwareinternalimagenode.cpp9
-rw-r--r--tests/auto/qml/debugger/qqmlprofilerservice/data/qstr.qml9
-rw-r--r--tests/auto/qml/debugger/qqmlprofilerservice/qqmlprofilerservice.pro3
-rw-r--r--tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp20
-rw-r--r--tests/auto/qml/qqmllanguage/data/circularSingleton.qml6
-rw-r--r--tests/auto/qml/qqmllanguage/data/singleton/circular/MySingleton.qml12
-rw-r--r--tests/auto/qml/qqmllanguage/data/singleton/circular/qmldir1
-rw-r--r--tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp17
-rw-r--r--tests/auto/quick/qquickflickable/BLACKLIST3
17 files changed, 374 insertions, 23 deletions
diff --git a/dist/changes-5.10.0 b/dist/changes-5.10.0
new file mode 100644
index 0000000000..e98bc8e4d9
--- /dev/null
+++ b/dist/changes-5.10.0
@@ -0,0 +1,188 @@
+Qt 5.10 introduces many new features and improvements as well as bugfixes
+over the 5.9.x series. For more details, refer to the online documentation
+included in this distribution. The documentation is also available online:
+
+http://doc.qt.io/qt-5/index.html
+
+The Qt version 5.10 series is binary compatible with the 5.9.x series.
+Applications compiled for 5.9 will continue to run with 5.10.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+https://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+****************************************************************************
+* General *
+****************************************************************************
+
+ - Added the QtQuick.Shapes plugin providing the Shape and ShapePath
+ types for rendering geometry-based stroked and filled paths.
+ Various types of Path existed already for defining movement trajectories
+ in PathView, but now they can be rendered too.
+ * PathLine, PathQuad, PathCubic, PathArc, PathCurve, and PathSvg
+ * Fill: solid color, linear, radial or conical gradients
+ * Stroke: colored and dashed lines
+ * Uses GL_NV_path_rendering on recent nVidia GPUs
+
+ - Added the Qt.labs.handlers plugin, providing a Tech Preview version
+ of Pointer Handlers. These are intended as an improved way of handling
+ gestures and events from pointing devices (mouse, touchpad, and
+ touchscreen so far; stylus devices are coming in a future release).
+ Properties acceptedButtons, acceptedModifiers, acceptedDevices, and
+ acceptedPointerTypes enable scoping their reaction for specific use
+ cases, but by default, they work equally well with mouse (as applicable)
+ and touch devices. So far we have four of them available in QML:
+ * TapHandler is for detecting clicks and taps, double-clicks,
+ multi-clicks and taps, and long presses.
+ * DragHandler provides a way of declaring an Item draggable, and also
+ has properties which can be used for bindings to achieve
+ less-mainstream use cases.
+ * PinchHandler can react to a pinch gesture using two or more fingers
+ (as configured via properties) or to a native pinch gesture from the OS.
+ Declaring an instance inside an Item is enough to support pinching to
+ scale, rotate and move that Item; and it also has properties available
+ for bindings to enable other use cases.
+ * PointHandler does not directly manipulate an Item, but just provides
+ information about individual touchpoints or the mouse, for binding
+ purposes. It is intended mainly for interactive feedback, orthogonal
+ to whichever Handler or Item currently has the exclusive grab.
+ Along with this, control over grabbing has gotten more fine-grained:
+ the grabPermissions property in a Pointer Handler sets rules for how
+ Pointer Handlers and Items negotiate for the exclusive grab; and some
+ Pointer Handlers are able to handle some kinds of interaction with a new
+ type of grab, the passive grab. There are several new logging categories
+ you can enable to see how event delivery is done, the grab transitions,
+ and so on.
+
+ As usual with Tech Preview material, we reserve the right to change it
+ substantially in future releases.
+
+****************************************************************************
+* Library *
+****************************************************************************
+
+QmlTest
+-------
+
+ - The returned object from TestCase::grabImage now has 'width', 'height',
+ and 'size' properties for additional verification. In addition, there is
+ a save() method to be able to persist the grabbed image to disk (for
+ diagnostics purposes, for example).
+
+Qt Quick
+--------
+
+ - [QTBUG-58945] Added the properties ShaderEffectSource.samples and
+ Item.layer.samples to allow requesting MSAA rendering of an item
+ subtree, without enabling multisampling for the entire scene.
+ - [QTBUG-59462] Added support for samplerExternalOES sampler type in
+ ShaderEffect
+ - [QTBUG-60268] Added Qt.platform.pluginName property.
+ - [QTBUG-60268] Selecting software as default renderer moved from build
+ time to run time
+ - Resizing is done by setSize() in a couple of places, such that
+ the widthChanged() and heightChanged() are emitted after both
+ properties are updated.
+
+ - Flickable:
+ * [QTBUG-38515] Added a boundsMovement property that allows disabling
+ the default bounce effect and implementing custom edge effects.
+
+ - Item Views:
+ * [QTBUG-34576] ListView velocities remain correct during index-based
+ programmatic scrolling
+
+ - Important Behavior Change:
+ * [QTCREATORBUG-15000] The implicitWidthChanged2 and
+ implicitHeightChanged2 signals of QQuickImplicitSizeItem have been
+ removed. Although these were undocumented and hence private API, any
+ applications currently using them should use the public
+ implicitWidthChanged and implicitHeightChanged signals.
+
+ - Item:
+ * Add QQuickItem::size() and document QQuickItem::setSize().
+ * When subclassing QQuickItem, you should call setAcceptTouchEvents(true)
+ if you need the item to receive touch events. It will be required later on.
+ * Added a ItemEnabledHasChanged value to the ItemChange enum.
+ QQuickItem::itemChange(ItemEnabledHasChanged) gets called when the
+ item's effective enabled state has changed. The new enabled state is
+ stored in ItemChangeData::boolValue.
+
+ - Window:
+ * It is now possible to set the default render type of text-like
+ elements globally via the QQuickWindow::setTextRenderType() function.
+ If you were using the (undocumented) QT_QUICK_DEFAULT_TEXT_RENDER_TYPE
+ macro when building Qt Quick for the same purpose, note that the macro
+ value needs now to be set to the "NativeTextRendering" value, instead
+ of "NativeRendering".
+
+ - Screen:
+ * Added manufacturer, model and serial number.
+
+ - TextEdit:
+ * Added tabStopDistance property
+
+ - Text:
+ * [QTBUG-56728] Added "advance" property to Text element.
+ * [QTBUG-56728] Added "font.preferShaping" property to Text, TextEdit
+ and TextInput. This makes it possible to improve performance at the
+ expense of some cosmetic font features.
+ * [QTBUG-56728] Added "kerning" property to the font type to support
+ disabling kerning on text.
+ * [QTBUG-61984] Fixed an issue when the family of an application font
+ was hardcoded and applied to text before the font itself was loaded.
+
+ - Image:
+ * [QTBUG-59872][QTBUG-29451] Allow direct loading of pkm texture files
+ into Image. For example: Image { source: "myImage.pkm" }
+
+ - QtTest:
+ * [QTBUG-53381] Added keySequence() function in TestCase.
+
+QtQml
+-----
+
+ - [QTBUG-58493] "const" variable declarations are now available in JS as
+ well as QML mode.
+ - [QTBUG-58493] "const" variable declarations now require an initializer,
+ bringing them closer to the required spec behavior.
+ - [QTBUG-58493] "const" variable declarations now throw a SyntaxError if
+ multiple attempts to declare the same variable name are found. Note that
+ "const" is still not fully spec-compliant (i.e. reassignment at runtime
+ is not disallowed).
+ - Object.assign from the ES6 specification is now implemented.
+ - Number now contains the MAX_SAFE_INTEGER, MIN_SAFE_INTEGER, isInteger
+ and isSafeInteger properties from the ES6 specification.
+ - [QTBUG-24799] The instanceof keyword in JavaScript has been extended to
+ work on QML types and instances. This means that you are now able to use
+ it to verify that a var is indeed the type you expect (e.g. someVar
+ instanceof Rectangle).
+ - [QTBUG-54961] Support C++11 scoped enums in QML. These can now be
+ accessed as <TypeName>.<EnumName>.<EnumValue>
+ - The QML engine can now emit informational messages (in the
+ "qt.qml.binding.removal" logging category) whenever a binding is lost
+ due to an imperative assignment. This can be used to debug issues due to
+ broken bindings.
+ - [QTBUG-61599] Allow sending binary data, encoded as ArrayBuffer objects,
+ via XMLHttpRequest's send() method.
+ - [QTBUG-14861] Enums can now be declared directly in QML.
+ - [QTBUG-63464] Fix Number.isNaN() returning incorrect values with some
+ glibc versions.
+ - [QTBUG-52515] Qt.platform.os returns "qnx" when running on QNX
+ platforms.
+ - [QTBUG-60133] std::vector and QVector are now on par with QList as a
+ Q_INVOKABLE return type and as a property type
+
+ - QQmlEngine:
+ * [QTBUG-15602] Added retranslate() slot and QEvent::LanguageChange
+ support to refresh bindings when changing the language at runtime.
+
+qmlscene
+--------
+ - Added --core-profile option to request that type of OpenGL context
+ - Added --apptype option to set the application class (like the qml
+ runtime tool already had)
diff --git a/dist/changes-5.9.3 b/dist/changes-5.9.3
new file mode 100644
index 0000000000..825941df23
--- /dev/null
+++ b/dist/changes-5.9.3
@@ -0,0 +1,73 @@
+Qt 5.9.3 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.9.0.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+http://doc.qt.io/qt-5/index.html
+
+The Qt version 5.9 series is binary compatible with the 5.8.x series.
+Applications compiled for 5.8 will continue to run with 5.9.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+https://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+****************************************************************************
+* Qt 5.9.3 Changes *
+****************************************************************************
+
+QtQml
+-----
+
+ - [QTBUG-63464] Fix Number.isNaN() returning incorrect values with some
+ glibc versions.
+ - [QTBUG-52515] Qt.platform.os returns "qnx" when running on QNX
+ platforms.
+ - [QTBUG-63200] Deferred property assignments in inner contexts are now
+ executed properly
+ - [QTBUG-63733] Fixed a crash during object deletion due to a dangling
+ pointer
+ - [QTBUG-64017] Fixed a circular dependency problem which caused a
+ failure when using QML singletons
+
+QtQuick
+-------
+
+ - Global:
+ * [QTBUG-61679] Input method events now work in QQuickWidget
+ * Loader and Flickable use setSize() to resize the inner Item in one
+ transaction rather than setting width and height separately.
+ This makes the state consistent by the time the change signals are emitted.
+ * Optimized rendering of opaque pixmaps, 9-patches and layers in the
+ software renderer
+ * [QTBUG-61434] Fixed a crash on exit by ensuring that a PointerEvent
+ instance is created only in response to an actual incoming event,
+ not because of checking the mouseGrabberItem at shutdown, and by
+ explicitly destroying the instances at the right time.
+
+ - QQuickWidget:
+ * [QTBUG-61798] QQuickWidget is repainted properly when moving between
+ screens
+ * [QTBUG-45557] Mouse enter and leave events are now correctly forwarded
+ to MouseAreas inside a QQuickWidget
+
+ - Item Views:
+ * [QTBUG-62607] Fixed a crash and a memory leak related to moving Items
+ in Item Views
+ * [QTBUG-57225][QTBUG-57225] GridView's removeDisplaced animation
+ occurs reliably and at the right time
+ * [QTBUG-61269][QTBUG-62864] Changes in a ListView's model no longer
+ disrupt the movement of an animated highlight item
+ * [QTBUG-34576] ListView's calculated velocity remains correct during
+ index-based scrolling
+ * [QTBUG-63974] ListView.positionViewAtIndex now works correctly
+ in the presence of sticky headers and footers
+
+ - Platform Specific Changes:
+ * [QTBUG-63835] iOS selection handles are shown properly when selecting
+ all text in a TextEdit
diff --git a/src/qml/debugger/qqmlprofiler_p.h b/src/qml/debugger/qqmlprofiler_p.h
index 88f8e94f25..6dc9859295 100644
--- a/src/qml/debugger/qqmlprofiler_p.h
+++ b/src/qml/debugger/qqmlprofiler_p.h
@@ -237,14 +237,19 @@ public:
// Add 1 to the ID, to make it different from the IDs the V4 profiler produces. The +1 makes
// the pointer point into the middle of the QV4::Function. Thus it still points to valid
// memory but we cannot accidentally create a duplicate key from another object.
- quintptr locationId(id(function) + 1);
+ // If there is no function, use a static but valid address: The profiler itself.
+ quintptr locationId = function ? id(function) + 1 : id(this);
m_data.append(QQmlProfilerData(m_timer.nsecsElapsed(),
(1 << RangeStart | 1 << RangeLocation), Binding,
locationId));
RefLocation &location = m_locations[locationId];
- if (!location.isValid())
- location = RefLocation(function);
+ if (!location.isValid()) {
+ if (function)
+ location = RefLocation(function);
+ else // Make it valid without actually providing a location
+ location.locationType = Binding;
+ }
}
// Have toByteArrays() construct another RangeData event from the same QString later.
diff --git a/src/qml/qml/qqmlimport.cpp b/src/qml/qml/qqmlimport.cpp
index 334bc8b28e..a7cafa1a93 100644
--- a/src/qml/qml/qqmlimport.cpp
+++ b/src/qml/qml/qqmlimport.cpp
@@ -1231,10 +1231,12 @@ QString QQmlImportsPrivate::resolvedUri(const QString &dir_arg, QQmlImportDataba
stableRelativePath.replace(Backslash, Slash);
// remove optional versioning in dot notation from uri
- int lastSlash = stableRelativePath.lastIndexOf(Slash);
- if (lastSlash >= 0) {
- int versionDot = stableRelativePath.indexOf(Dot, lastSlash);
- if (versionDot >= 0)
+ int versionDot = stableRelativePath.lastIndexOf(Dot);
+ if (versionDot >= 0) {
+ int nextSlash = stableRelativePath.indexOf(Slash, versionDot);
+ if (nextSlash >= 0)
+ stableRelativePath.remove(versionDot, nextSlash - versionDot);
+ else
stableRelativePath = stableRelativePath.left(versionDot);
}
diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp
index 8e6be538ef..0f388cf7b7 100644
--- a/src/qml/qml/qqmlmetatype.cpp
+++ b/src/qml/qml/qqmlmetatype.cpp
@@ -274,8 +274,10 @@ void QQmlType::SingletonInstanceInfo::init(QQmlEngine *e)
QQmlData::ensurePropertyCache(e, o);
} else if (!url.isEmpty() && !qobjectApi(e)) {
QQmlComponent component(e, url, QQmlComponent::PreferSynchronous);
- QObject *o = component.create();
+ QObject *o = component.beginCreate(e->rootContext());
setQObjectApi(e, o);
+ if (o)
+ component.completeCreate();
}
v4->popContext();
}
diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp
index 8e9f57f661..128e37d51b 100644
--- a/src/qml/qml/qqmltypeloader.cpp
+++ b/src/qml/qml/qqmltypeloader.cpp
@@ -2409,7 +2409,15 @@ void QQmlTypeData::dataReceived(const SourceCodeData &data)
void QQmlTypeData::initializeFromCachedUnit(const QQmlPrivate::CachedQmlUnit *unit)
{
m_document.reset(new QmlIR::Document(isDebugging()));
- unit->loadIR(m_document.data(), unit);
+ if (unit->loadIR) {
+ // old code path for older generated code
+ unit->loadIR(m_document.data(), unit);
+ } else {
+ // new code path
+ QmlIR::IRLoader loader(unit->qmlData, m_document.data());
+ loader.load();
+ m_document->javaScriptCompilationUnit.adopt(unit->createCompilationUnit());
+ }
continueLoadFromIR();
}
diff --git a/src/qml/types/qqmldelegatemodel.cpp b/src/qml/types/qqmldelegatemodel.cpp
index 4d2a9746c3..4ee1ab1b76 100644
--- a/src/qml/types/qqmldelegatemodel.cpp
+++ b/src/qml/types/qqmldelegatemodel.cpp
@@ -1957,6 +1957,8 @@ void QQmlDelegateModelItem::destroyObject()
Q_ASSERT(data);
if (data->ownContext) {
data->ownContext->clearContext();
+ if (data->ownContext->contextObject == object)
+ data->ownContext->contextObject = nullptr;
data->ownContext = 0;
data->context = 0;
}
diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp
index e865a609a6..2dc3caf430 100644
--- a/src/quick/items/qquickwindow.cpp
+++ b/src/quick/items/qquickwindow.cpp
@@ -1712,24 +1712,27 @@ void QQuickWindowPrivate::deliverMouseEvent(QQuickPointerMouseEvent *pointerEven
if (point->exclusiveGrabber()) {
if (auto grabber = point->grabberItem()) {
+ bool handled = false;
if (sendFilteredPointerEvent(pointerEvent, grabber))
- return;
+ handled = true;
// if the grabber is an Item:
// if the update consists of changing button state, don't accept it unless
// the button is one in which the grabber is interested
Qt::MouseButtons acceptedButtons = grabber->acceptedMouseButtons();
- if (pointerEvent->button() != Qt::NoButton && acceptedButtons
+ if (!handled && pointerEvent->button() != Qt::NoButton && acceptedButtons
&& !(acceptedButtons & pointerEvent->button())) {
pointerEvent->setAccepted(false);
- return;
+ handled = true;
}
// send update
- QPointF localPos = grabber->mapFromScene(lastMousePosition);
- auto me = pointerEvent->asMouseEvent(localPos);
- me->accept();
- QCoreApplication::sendEvent(grabber, me);
- point->setAccepted(me->isAccepted());
+ if (!handled) {
+ QPointF localPos = grabber->mapFromScene(lastMousePosition);
+ auto me = pointerEvent->asMouseEvent(localPos);
+ me->accept();
+ QCoreApplication::sendEvent(grabber, me);
+ point->setAccepted(me->isAccepted());
+ }
// release event: ungrab if no buttons are pressed anymore
if (mouseIsReleased)
diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwareinternalimagenode.cpp b/src/quick/scenegraph/adaptations/software/qsgsoftwareinternalimagenode.cpp
index 10291b9cb5..8843b6450a 100644
--- a/src/quick/scenegraph/adaptations/software/qsgsoftwareinternalimagenode.cpp
+++ b/src/quick/scenegraph/adaptations/software/qsgsoftwareinternalimagenode.cpp
@@ -490,12 +490,13 @@ QRectF QSGSoftwareInternalImageNode::rect() const
const QPixmap &QSGSoftwareInternalImageNode::pixmap() const
{
- if (QSGSoftwarePixmapTexture *pt = qobject_cast<QSGSoftwarePixmapTexture*>(m_texture)) {
+ if (QSGSoftwarePixmapTexture *pt = qobject_cast<QSGSoftwarePixmapTexture*>(m_texture))
return pt->pixmap();
- } else {
- QSGSoftwareLayer *layer = qobject_cast<QSGSoftwareLayer*>(m_texture);
+ if (QSGSoftwareLayer *layer = qobject_cast<QSGSoftwareLayer*>(m_texture))
return layer->pixmap();
- }
+ Q_ASSERT(m_texture == 0);
+ static const QPixmap nullPixmap;
+ return nullPixmap;
}
QT_END_NAMESPACE
diff --git a/tests/auto/qml/debugger/qqmlprofilerservice/data/qstr.qml b/tests/auto/qml/debugger/qqmlprofilerservice/data/qstr.qml
new file mode 100644
index 0000000000..09dcd34b5c
--- /dev/null
+++ b/tests/auto/qml/debugger/qqmlprofilerservice/data/qstr.qml
@@ -0,0 +1,9 @@
+import QtQml 2.0
+
+Timer {
+ property string stuff: qsTr("foo")
+
+ running: true
+ interval: 1
+ onTriggered: Qt.quit();
+}
diff --git a/tests/auto/qml/debugger/qqmlprofilerservice/qqmlprofilerservice.pro b/tests/auto/qml/debugger/qqmlprofilerservice/qqmlprofilerservice.pro
index 95d743e9ff..a26f48e6c7 100644
--- a/tests/auto/qml/debugger/qqmlprofilerservice/qqmlprofilerservice.pro
+++ b/tests/auto/qml/debugger/qqmlprofilerservice/qqmlprofilerservice.pro
@@ -19,4 +19,5 @@ OTHER_FILES += \
data/TestImage_2x2.png \
data/signalSourceLocation.qml \
data/javascript.qml \
- data/timer.qml
+ data/timer.qml \
+ data/qstr.qml
diff --git a/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp b/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp
index 45e4ad1207..4d37f16e41 100644
--- a/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp
+++ b/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp
@@ -298,6 +298,7 @@ private slots:
void signalSourceLocation();
void javascript();
void flushInterval();
+ void translationBinding();
};
#define VERIFY(type, position, expected, checks) QVERIFY(verify(type, position, expected, checks))
@@ -705,6 +706,25 @@ void tst_QQmlProfilerService::flushInterval()
checkJsHeap();
}
+void tst_QQmlProfilerService::translationBinding()
+{
+ QCOMPARE(connect(true, "qstr.qml"), ConnectSuccess);
+
+ m_client->sendRecordingStatus(true);
+
+ checkTraceReceived();
+ checkJsHeap();
+
+ QQmlProfilerData expected(0, QQmlProfilerDefinitions::RangeStart,
+ QQmlProfilerDefinitions::Binding);
+ VERIFY(MessageListQML, 8, expected,
+ CheckDetailType | CheckMessageType);
+
+ expected.messageType = QQmlProfilerDefinitions::RangeEnd;
+ VERIFY(MessageListQML, 10, expected,
+ CheckDetailType | CheckMessageType);
+}
+
QTEST_MAIN(tst_QQmlProfilerService)
#include "tst_qqmlprofilerservice.moc"
diff --git a/tests/auto/qml/qqmllanguage/data/circularSingleton.qml b/tests/auto/qml/qqmllanguage/data/circularSingleton.qml
new file mode 100644
index 0000000000..e569111956
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/circularSingleton.qml
@@ -0,0 +1,6 @@
+import QtQuick 2.10
+import "singleton/circular"
+
+QtObject {
+ property int value: MySingleton.value
+}
diff --git a/tests/auto/qml/qqmllanguage/data/singleton/circular/MySingleton.qml b/tests/auto/qml/qqmllanguage/data/singleton/circular/MySingleton.qml
new file mode 100644
index 0000000000..1253018789
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/singleton/circular/MySingleton.qml
@@ -0,0 +1,12 @@
+pragma Singleton
+import QtQuick 2.10
+
+QtObject {
+ enum MyEnum {
+ Value0,
+ Value1,
+ Value2
+ }
+
+ property int value: MySingleton.Value2
+}
diff --git a/tests/auto/qml/qqmllanguage/data/singleton/circular/qmldir b/tests/auto/qml/qqmllanguage/data/singleton/circular/qmldir
new file mode 100644
index 0000000000..3bc50738dd
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/singleton/circular/qmldir
@@ -0,0 +1 @@
+singleton MySingleton MySingleton.qml
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
index 21efb0336d..7fb4c809f7 100644
--- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
+++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
@@ -240,6 +240,7 @@ private slots:
void compositeSingletonJavaScriptPragma();
void compositeSingletonSelectors();
void compositeSingletonRegistered();
+ void compositeSingletonCircular();
void customParserBindingScopes();
void customParserEvaluateEnum();
@@ -4211,6 +4212,22 @@ void tst_qqmllanguage::compositeSingletonRegistered()
verifyCompositeSingletonPropertyValues(o, "value1", 925, "value2", 755);
}
+void tst_qqmllanguage::compositeSingletonCircular()
+{
+ QQmlComponent component(&engine, testFile("circularSingleton.qml"));
+ VERIFY_ERRORS(0);
+
+ QQmlTestMessageHandler messageHandler;
+
+ QObject *o = component.create();
+ QVERIFY(o != 0);
+
+ // ensure we aren't hitting the recursion warning
+ QVERIFY2(messageHandler.messages().isEmpty(), qPrintable(messageHandler.messageString()));
+
+ QCOMPARE(o->property("value").toInt(), 2);
+}
+
void tst_qqmllanguage::customParserBindingScopes()
{
QQmlComponent component(&engine, testFile("customParserBindingScopes.qml"));
diff --git a/tests/auto/quick/qquickflickable/BLACKLIST b/tests/auto/quick/qquickflickable/BLACKLIST
index f35397f119..826c024732 100644
--- a/tests/auto/quick/qquickflickable/BLACKLIST
+++ b/tests/auto/quick/qquickflickable/BLACKLIST
@@ -1,7 +1,8 @@
# QTBUG-36804
osx-10.10
+# QTBUG-26696
[rebound]
-osx-10.10
+osx
[movingAndFlicking:vertical]
osx-10.10
[movingAndFlicking:both]