diff options
Diffstat (limited to 'src/quicktemplates2/qquickstackview.cpp')
-rw-r--r-- | src/quicktemplates2/qquickstackview.cpp | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/src/quicktemplates2/qquickstackview.cpp b/src/quicktemplates2/qquickstackview.cpp index 16e5f08d..43988f5d 100644 --- a/src/quicktemplates2/qquickstackview.cpp +++ b/src/quicktemplates2/qquickstackview.cpp @@ -556,7 +556,14 @@ QQuickItem *QQuickStackView::find(const QJSValue &callback, LoadBehavior behavio void QQuickStackView::push(QQmlV4Function *args) { Q_D(QQuickStackView); - QScopedValueRollback<QString> rollback(d->operation, QStringLiteral("push")); + const QString operationName = QStringLiteral("push"); + if (d->modifyingElements) { + d->warnOfInterruption(operationName); + return; + } + + QScopedValueRollback<bool> modifyingElements(d->modifyingElements, true); + QScopedValueRollback<QString> operationNameRollback(d->operation, operationName); if (args->length() <= 0) { d->warn(QStringLiteral("missing arguments")); args->setReturnValue(QV4::Encode::null()); @@ -649,14 +656,15 @@ void QQuickStackView::push(QQmlV4Function *args) void QQuickStackView::pop(QQmlV4Function *args) { Q_D(QQuickStackView); - if (d->removingElements) { - d->warn(QStringLiteral("cannot pop while already in the process of removing elements")); + const QString operationName = QStringLiteral("pop"); + if (d->modifyingElements) { + d->warnOfInterruption(operationName); args->setReturnValue(QV4::Encode::null()); return; } - QScopedValueRollback<bool> removingElements(d->removingElements, true); - QScopedValueRollback<QString> rollback(d->operation, QStringLiteral("pop")); + QScopedValueRollback<bool> modifyingElements(d->modifyingElements, true); + QScopedValueRollback<QString> operationNameRollback(d->operation, operationName); int argc = args->length(); if (d->elements.count() <= 1 || argc > 2) { if (argc > 2) @@ -811,14 +819,15 @@ void QQuickStackView::pop(QQmlV4Function *args) void QQuickStackView::replace(QQmlV4Function *args) { Q_D(QQuickStackView); - if (d->removingElements) { - d->warn(QStringLiteral("cannot replace while already in the process of removing elements")); + const QString operationName = QStringLiteral("replace"); + if (d->modifyingElements) { + d->warnOfInterruption(operationName); args->setReturnValue(QV4::Encode::null()); return; } - QScopedValueRollback<bool> removingElements(d->removingElements, true); - QScopedValueRollback<QString> rollback(d->operation, QStringLiteral("replace")); + QScopedValueRollback<bool> modifyingElements(d->modifyingElements, true); + QScopedValueRollback<QString> operationNameRollback(d->operation, operationName); if (args->length() <= 0) { d->warn(QStringLiteral("missing arguments")); args->setReturnValue(QV4::Encode::null()); @@ -914,12 +923,14 @@ void QQuickStackView::clear(Operation operation) if (d->elements.isEmpty()) return; - if (d->removingElements) { - d->warn(QStringLiteral("cannot clear while already in the process of removing elements")); + const QString operationName = QStringLiteral("clear"); + if (d->modifyingElements) { + d->warnOfInterruption(operationName); return; } - QScopedValueRollback<bool> removingElements(d->removingElements, true); + QScopedValueRollback<bool> modifyingElements(d->modifyingElements, true); + QScopedValueRollback<QString> operationNameRollback(d->operation, operationName); if (operation != Immediate) { QQuickStackElement *exit = d->elements.pop(); exit->removal = true; @@ -1126,7 +1137,7 @@ void QQuickStackView::componentComplete() QQuickControl::componentComplete(); Q_D(QQuickStackView); - QScopedValueRollback<QString> rollback(d->operation, QStringLiteral("initialItem")); + QScopedValueRollback<QString> operationNameRollback(d->operation, QStringLiteral("initialItem")); QQuickStackElement *element = nullptr; QString error; int oldDepth = d->elements.count(); |