diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-08-01 10:49:04 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-08-01 10:49:04 +0200 |
commit | 6e70fa5ee8d0433dbb0d42378bce10db18b05fab (patch) | |
tree | 3030b30daa13790e1f5bdf540383fc7c06b849fc /src | |
parent | 77d6aef4063a9bf18074609fc32d3ffeed88617c (diff) | |
parent | 8b88e37bf79a53eb0cb34226aacb25ad9b01d7cf (diff) |
Merge "Merge remote-tracking branch 'origin/5.3' into dev" into refs/staging/dev
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/compiler/qqmltypecompiler.cpp | 4 | ||||
-rw-r--r-- | src/qml/qml/qqmldata_p.h | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmlobjectcreator.cpp | 27 | ||||
-rw-r--r-- | src/qml/qml/qqmlobjectcreator_p.h | 1 | ||||
-rw-r--r-- | src/quick/items/qquickflickable.cpp | 41 | ||||
-rw-r--r-- | src/quick/items/qquickflickable_p_p.h | 2 | ||||
-rw-r--r-- | src/quick/items/qquickmousearea_p.h | 34 | ||||
-rw-r--r-- | src/quick/items/qquickscreen_p.h | 18 | ||||
-rw-r--r-- | src/quick/items/qquickshadereffectsource.cpp | 2 |
9 files changed, 74 insertions, 57 deletions
diff --git a/src/qml/compiler/qqmltypecompiler.cpp b/src/qml/compiler/qqmltypecompiler.cpp index e2636a57c3..b8ada7ceaf 100644 --- a/src/qml/compiler/qqmltypecompiler.cpp +++ b/src/qml/compiler/qqmltypecompiler.cpp @@ -277,12 +277,12 @@ bool QQmlTypeCompiler::compile() if (qmlType->parserStatusCast() != -1) ++parserStatusCount; } + ++objectCount; if (typeRef->component) { bindingCount += typeRef->component->totalBindingsCount; parserStatusCount += typeRef->component->totalParserStatusCount; objectCount += typeRef->component->totalObjectCount; - } else - ++objectCount; + } } } diff --git a/src/qml/qml/qqmldata_p.h b/src/qml/qml/qqmldata_p.h index 93060e97fb..e3e1434746 100644 --- a/src/qml/qml/qqmldata_p.h +++ b/src/qml/qml/qqmldata_p.h @@ -239,7 +239,7 @@ bool QQmlData::wasDeleted(QObject *object) return true; QObjectPrivate *priv = QObjectPrivate::get(object); - if (priv->wasDeleted) + if (!priv || priv->wasDeleted) return true; return priv->declarativeData && diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp index 9501b705ba..72920f1ae2 100644 --- a/src/qml/qml/qqmlobjectcreator.cpp +++ b/src/qml/qml/qqmlobjectcreator.cpp @@ -96,6 +96,7 @@ QQmlObjectCreator::QQmlObjectCreator(QQmlContextData *parentContext, QQmlCompile sharedState->allCreatedBindings.allocate(compiledData->totalBindingsCount); sharedState->allParserStatusCallbacks.allocate(compiledData->totalParserStatusCount); sharedState->allCreatedObjects.allocate(compiledData->totalObjectCount); + sharedState->allJavaScriptObjects = 0; sharedState->creationContext = creationContext; sharedState->rootContext = 0; @@ -195,6 +196,13 @@ QObject *QQmlObjectCreator::create(int subComponentIndex, QObject *parent, QQmlI sharedState->rootContext->isRootObjectInCreation = true; } + QV4::ExecutionEngine *v4 = QV8Engine::getV4(engine); + QV4::Scope scope(v4); + + Q_ASSERT(sharedState->allJavaScriptObjects || topLevelCreator); + if (topLevelCreator) + sharedState->allJavaScriptObjects = scope.alloc(compiledData->totalObjectCount); + QVector<QQmlContextData::ObjectIdMapping> mapping(objectIndexToId.count()); for (QHash<int, int>::ConstIterator it = objectIndexToId.constBegin(), end = objectIndexToId.constEnd(); it != end; ++it) { @@ -208,8 +216,6 @@ QObject *QQmlObjectCreator::create(int subComponentIndex, QObject *parent, QQmlI context->setIdPropertyData(mapping); if (subComponentIndex == -1) { - QV4::ExecutionEngine *v4 = QV8Engine::getV4(engine); - QV4::Scope scope(v4); QV4::ScopedObject scripts(scope, v4->newArrayObject(compiledData->scripts.count())); context->importedScripts = scripts; for (int i = 0; i < compiledData->scripts.count(); ++i) { @@ -230,6 +236,9 @@ QObject *QQmlObjectCreator::create(int subComponentIndex, QObject *parent, QQmlI ddata->compiledData->addref(); } + if (topLevelCreator) + sharedState->allJavaScriptObjects = 0; + phase = CreatingObjectsPhase2; if (interrupt && interrupt->shouldInterrupt()) @@ -258,8 +267,11 @@ bool QQmlObjectCreator::populateDeferredProperties(QObject *instance) QV4::ExecutionEngine *v4 = QV8Engine::getV4(engine); QV4::Scope valueScope(v4); - QV4::ScopedValue scopeObjectProtector(valueScope, declarativeData->jsWrapper.value()); - Q_UNUSED(scopeObjectProtector); + + Q_ASSERT(topLevelCreator); + Q_ASSERT(!sharedState->allJavaScriptObjects); + sharedState->allJavaScriptObjects = valueScope.alloc(compiledData->totalObjectCount); + QV4::ScopedObject qmlScope(valueScope, QV4::QmlContextWrapper::qmlScope(QV8Engine::get(engine), context, _scopeObject)); QV4::Scoped<QV4::QmlBindingWrapper> qmlBindingWrapper(valueScope, v4->memoryManager->alloc<QV4::QmlBindingWrapper>(v4->rootContext, qmlScope)); QV4::ExecutionContext *qmlContext = qmlBindingWrapper->context(); @@ -1159,9 +1171,12 @@ QObject *QQmlObjectCreator::createInstance(int index, QObject *parent, bool isCo qSwap(_scopeObject, scopeObject); QV4::ExecutionEngine *v4 = QV8Engine::getV4(engine); + + Q_ASSERT(sharedState->allJavaScriptObjects); + QV4::ValueRef ref = QV4::ValueRef::fromRawValue(sharedState->allJavaScriptObjects++); + ref = QV4::QObjectWrapper::wrap(v4, instance); + QV4::Scope valueScope(v4); - QV4::ScopedValue scopeObjectProtector(valueScope, ddata ? ddata->jsWrapper.value() : 0); - Q_UNUSED(scopeObjectProtector); QV4::ScopedObject qmlScope(valueScope, QV4::QmlContextWrapper::qmlScope(QV8Engine::get(engine), context, _scopeObject)); QV4::Scoped<QV4::QmlBindingWrapper> qmlBindingWrapper(valueScope, v4->memoryManager->alloc<QV4::QmlBindingWrapper>(v4->rootContext, qmlScope)); QV4::ExecutionContext *qmlContext = qmlBindingWrapper->context(); diff --git a/src/qml/qml/qqmlobjectcreator_p.h b/src/qml/qml/qqmlobjectcreator_p.h index ad2d67624f..fb4d71d054 100644 --- a/src/qml/qml/qqmlobjectcreator_p.h +++ b/src/qml/qml/qqmlobjectcreator_p.h @@ -64,6 +64,7 @@ struct QQmlObjectCreatorSharedState : public QSharedData QFiniteStack<QQmlAbstractBinding*> allCreatedBindings; QFiniteStack<QQmlParserStatus*> allParserStatusCallbacks; QFiniteStack<QObject*> allCreatedObjects; + QV4::Value *allJavaScriptObjects; // pointer to vector on JS stack to reference JS wrappers during creation phase. QQmlComponentAttached *componentAttached; QList<QQmlEnginePrivate::FinalizeCallback> finalizeCallbacks; QQmlVmeProfiler profiler; diff --git a/src/quick/items/qquickflickable.cpp b/src/quick/items/qquickflickable.cpp index 3f072359d2..ce2cedb7fc 100644 --- a/src/quick/items/qquickflickable.cpp +++ b/src/quick/items/qquickflickable.cpp @@ -763,15 +763,8 @@ void QQuickFlickable::setInteractive(bool interactive) Q_D(QQuickFlickable); if (interactive != d->interactive) { d->interactive = interactive; - if (!interactive && (d->hData.flicking || d->vData.flicking)) { - d->clearTimeline(); - d->hData.vTime = d->vData.vTime = d->timeline.time(); - d->hData.flicking = false; - d->vData.flicking = false; - emit flickingChanged(); - emit flickingHorizontallyChanged(); - emit flickingVerticallyChanged(); - emit flickEnded(); + if (!interactive) { + d->cancelInteraction(); } emit interactiveChanged(); } @@ -2015,18 +2008,24 @@ bool QQuickFlickable::yflick() const void QQuickFlickable::mouseUngrabEvent() { Q_D(QQuickFlickable); - if (d->pressed) { - // if our mouse grab has been removed (probably by another Flickable), - // fix our state - d->clearDelayedPress(); - d->pressed = false; - d->draggingEnding(); - d->stealMouse = false; - setKeepMouseGrab(false); - d->fixupX(); - d->fixupY(); - if (!d->isViewMoving()) - movementEnding(); + // if our mouse grab has been removed (probably by another Flickable), + // fix our state + d->cancelInteraction(); +} + +void QQuickFlickablePrivate::cancelInteraction() +{ + Q_Q(QQuickFlickable); + if (pressed) { + clearDelayedPress(); + pressed = false; + draggingEnding(); + stealMouse = false; + q->setKeepMouseGrab(false); + fixupX(); + fixupY(); + if (!isViewMoving()) + q->movementEnding(); } } diff --git a/src/quick/items/qquickflickable_p_p.h b/src/quick/items/qquickflickable_p_p.h index 33a642eb69..13af2e055c 100644 --- a/src/quick/items/qquickflickable_p_p.h +++ b/src/quick/items/qquickflickable_p_p.h @@ -200,6 +200,8 @@ public: bool isViewMoving() const; + void cancelInteraction(); + public: QQuickItem *contentItem; diff --git a/src/quick/items/qquickmousearea_p.h b/src/quick/items/qquickmousearea_p.h index d303852311..5dcb6b46a4 100644 --- a/src/quick/items/qquickmousearea_p.h +++ b/src/quick/items/qquickmousearea_p.h @@ -144,25 +144,25 @@ protected: bool setPressed(Qt::MouseButton button, bool); bool sendMouseEvent(QMouseEvent *event); - virtual void mousePressEvent(QMouseEvent *event); - virtual void mouseReleaseEvent(QMouseEvent *event); - virtual void mouseDoubleClickEvent(QMouseEvent *event); - virtual void mouseMoveEvent(QMouseEvent *event); - virtual void mouseUngrabEvent(); - virtual void hoverEnterEvent(QHoverEvent *event); - virtual void hoverMoveEvent(QHoverEvent *event); - virtual void hoverLeaveEvent(QHoverEvent *event); + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseUngrabEvent() Q_DECL_OVERRIDE; + void hoverEnterEvent(QHoverEvent *event) Q_DECL_OVERRIDE; + void hoverMoveEvent(QHoverEvent *event) Q_DECL_OVERRIDE; + void hoverLeaveEvent(QHoverEvent *event) Q_DECL_OVERRIDE; #ifndef QT_NO_WHEELEVENT - virtual void wheelEvent(QWheelEvent *event); + void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE; #endif - virtual bool childMouseEventFilter(QQuickItem *i, QEvent *e); - virtual void timerEvent(QTimerEvent *event); - virtual void windowDeactivateEvent(); - - virtual void geometryChanged(const QRectF &newGeometry, - const QRectF &oldGeometry); - virtual void itemChange(ItemChange change, const ItemChangeData& value); - virtual QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *); + bool childMouseEventFilter(QQuickItem *i, QEvent *e) Q_DECL_OVERRIDE; + void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE; + void windowDeactivateEvent() Q_DECL_OVERRIDE; + + void geometryChanged(const QRectF &newGeometry, + const QRectF &oldGeometry) Q_DECL_OVERRIDE; + void itemChange(ItemChange change, const ItemChangeData& value) Q_DECL_OVERRIDE; + QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) Q_DECL_OVERRIDE; private: void handlePress(); diff --git a/src/quick/items/qquickscreen_p.h b/src/quick/items/qquickscreen_p.h index a155ff1843..25a1805a44 100644 --- a/src/quick/items/qquickscreen_p.h +++ b/src/quick/items/qquickscreen_p.h @@ -58,13 +58,13 @@ class Q_AUTOTEST_EXPORT QQuickScreenAttached : public QObject { Q_OBJECT - Q_PROPERTY(QString name READ name NOTIFY nameChanged REVISION 1); + Q_PROPERTY(QString name READ name NOTIFY nameChanged); Q_PROPERTY(int width READ width NOTIFY widthChanged) Q_PROPERTY(int height READ height NOTIFY heightChanged) - Q_PROPERTY(int desktopAvailableWidth READ desktopAvailableWidth NOTIFY desktopGeometryChanged REVISION 1) - Q_PROPERTY(int desktopAvailableHeight READ desktopAvailableHeight NOTIFY desktopGeometryChanged REVISION 1) - Q_PROPERTY(qreal logicalPixelDensity READ logicalPixelDensity NOTIFY logicalPixelDensityChanged REVISION 1) - Q_PROPERTY(qreal pixelDensity READ pixelDensity NOTIFY pixelDensityChanged REVISION 2) + Q_PROPERTY(int desktopAvailableWidth READ desktopAvailableWidth NOTIFY desktopGeometryChanged) + Q_PROPERTY(int desktopAvailableHeight READ desktopAvailableHeight NOTIFY desktopGeometryChanged) + Q_PROPERTY(qreal logicalPixelDensity READ logicalPixelDensity NOTIFY logicalPixelDensityChanged) + Q_PROPERTY(qreal pixelDensity READ pixelDensity NOTIFY pixelDensityChanged) Q_PROPERTY(Qt::ScreenOrientation primaryOrientation READ primaryOrientation NOTIFY primaryOrientationChanged) Q_PROPERTY(Qt::ScreenOrientation orientation READ orientation NOTIFY orientationChanged) @@ -87,12 +87,12 @@ public: void windowChanged(QQuickWindow*); Q_SIGNALS: - Q_REVISION(1) void nameChanged(); + void nameChanged(); void widthChanged(); void heightChanged(); - Q_REVISION(1) void desktopGeometryChanged(); - Q_REVISION(1) void logicalPixelDensityChanged(); - Q_REVISION(2) void pixelDensityChanged(); + void desktopGeometryChanged(); + void logicalPixelDensityChanged(); + void pixelDensityChanged(); void primaryOrientationChanged(); void orientationChanged(); diff --git a/src/quick/items/qquickshadereffectsource.cpp b/src/quick/items/qquickshadereffectsource.cpp index 163ee3eada..7603495e1b 100644 --- a/src/quick/items/qquickshadereffectsource.cpp +++ b/src/quick/items/qquickshadereffectsource.cpp @@ -1037,7 +1037,7 @@ QSGNode *QQuickShaderEffectSource::updatePaintNode(QSGNode *oldNode, UpdatePaint } // Don't create the paint node if we're not spanning any area - if (width() == 0 || height() == 0) { + if (width() <= 0 || height() <= 0) { delete oldNode; return 0; } |