From fdc0f750668baff29314b6c672bfc385422b744b Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 10 Oct 2017 09:37:29 +1000 Subject: [PATCH] Fix redoing group visibility creates multiple new undo commands --- src/core/layout/qgslayoutitemgroup.cpp | 4 ++++ tests/src/core/testqgslayoutitemgroup.cpp | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/core/layout/qgslayoutitemgroup.cpp b/src/core/layout/qgslayoutitemgroup.cpp index 77f4de93b91..f5447a04177 100644 --- a/src/core/layout/qgslayoutitemgroup.cpp +++ b/src/core/layout/qgslayoutitemgroup.cpp @@ -115,10 +115,14 @@ void QgsLayoutItemGroup::setVisibility( const bool visible ) { if ( !item ) continue; + bool prev = item->mBlockUndoCommands; + item->mBlockUndoCommands = mBlockUndoCommands; item->setVisibility( visible ); + item->mBlockUndoCommands = prev; } //lastly set visibility for group item itself QgsLayoutItem::setVisibility( visible ); + if ( !shouldBlockUndoCommands() ) mLayout->undoStack()->endMacro(); } diff --git a/tests/src/core/testqgslayoutitemgroup.cpp b/tests/src/core/testqgslayoutitemgroup.cpp index 6753566bc69..42b409e9dc0 100644 --- a/tests/src/core/testqgslayoutitemgroup.cpp +++ b/tests/src/core/testqgslayoutitemgroup.cpp @@ -301,6 +301,23 @@ void TestQgsLayoutItemGroup::groupVisibility() QVERIFY( item->isVisible() ); QVERIFY( item2->isVisible() ); QVERIFY( group->isVisible() ); + + l.undoStack()->stack()->undo(); + QVERIFY( !item->isVisible() ); + QVERIFY( !item2->isVisible() ); + QVERIFY( !group->isVisible() ); + l.undoStack()->stack()->undo(); + QVERIFY( item->isVisible() ); + QVERIFY( item2->isVisible() ); + QVERIFY( group->isVisible() ); + l.undoStack()->stack()->redo(); + QVERIFY( !item->isVisible() ); + QVERIFY( !item2->isVisible() ); + QVERIFY( !group->isVisible() ); + l.undoStack()->stack()->redo(); + QVERIFY( item->isVisible() ); + QVERIFY( item2->isVisible() ); + QVERIFY( group->isVisible() ); } void TestQgsLayoutItemGroup::moveGroup()