diff options
Diffstat (limited to 'src/quicktemplates2/qquickstackview.cpp')
-rw-r--r-- | src/quicktemplates2/qquickstackview.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/quicktemplates2/qquickstackview.cpp b/src/quicktemplates2/qquickstackview.cpp index 18f65127..16e5f08d 100644 --- a/src/quicktemplates2/qquickstackview.cpp +++ b/src/quicktemplates2/qquickstackview.cpp @@ -649,6 +649,13 @@ 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")); + args->setReturnValue(QV4::Encode::null()); + return; + } + + QScopedValueRollback<bool> removingElements(d->removingElements, true); QScopedValueRollback<QString> rollback(d->operation, QStringLiteral("pop")); int argc = args->length(); if (d->elements.count() <= 1 || argc > 2) { @@ -804,6 +811,13 @@ 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")); + args->setReturnValue(QV4::Encode::null()); + return; + } + + QScopedValueRollback<bool> removingElements(d->removingElements, true); QScopedValueRollback<QString> rollback(d->operation, QStringLiteral("replace")); if (args->length() <= 0) { d->warn(QStringLiteral("missing arguments")); @@ -900,6 +914,12 @@ 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")); + return; + } + + QScopedValueRollback<bool> removingElements(d->removingElements, true); if (operation != Immediate) { QQuickStackElement *exit = d->elements.pop(); exit->removal = true; |