From 58d6ab520bbeed3f57db880d905d9702e5c1db65 Mon Sep 17 00:00:00 2001 From: arch1t3cht Date: Thu, 1 Jun 2023 22:53:30 +0200 Subject: [PATCH] folding: Also update counterpart for fold operations This wasn't necessary before since the internal representation of folds is be checked for consistency after each commit, but after the switch to extradata fold operations would leave the extradata in an invalid state. This isn't technically a problem, but it does leave more extradata entries lying around than necessary, and it can trip up automation scripts that aren't prepared for inconsistent fold state. --- src/fold_controller.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/fold_controller.cpp b/src/fold_controller.cpp index 7c4abd50c..ff2df88dd 100644 --- a/src/fold_controller.cpp +++ b/src/fold_controller.cpp @@ -326,6 +326,10 @@ bool FoldController::HasFolds() { void FoldController::ClearFoldsAt(std::vector const& lines) { DoForFoldsAt(lines, [&](AssDialogue &line) { line.Fold.extraExists = false; line.Fold.valid = false; + if (line.Fold.counterpart) { + line.Fold.counterpart->Fold.extraExists = false; + line.Fold.counterpart->Fold.valid = false; + } }); context->ass->Commit(_("clear folds"), AssFile::COMMIT_FOLD); } @@ -333,6 +337,8 @@ void FoldController::ClearFoldsAt(std::vector const& lines) { void FoldController::OpenFoldsAt(std::vector const& lines) { DoForFoldsAt(lines, [&](AssDialogue &line) { line.Fold.collapsed = false; + if (line.Fold.counterpart) + line.Fold.counterpart->Fold.collapsed = line.Fold.collapsed; }); context->ass->Commit(_("open folds"), AssFile::COMMIT_FOLD); } @@ -340,6 +346,8 @@ void FoldController::OpenFoldsAt(std::vector const& lines) { void FoldController::CloseFoldsAt(std::vector const& lines) { DoForFoldsAt(lines, [&](AssDialogue &line) { line.Fold.collapsed = true; + if (line.Fold.counterpart) + line.Fold.counterpart->Fold.collapsed = line.Fold.collapsed; }); context->ass->Commit(_("close folds"), AssFile::COMMIT_FOLD); } @@ -347,6 +355,8 @@ void FoldController::CloseFoldsAt(std::vector const& lines) { void FoldController::ToggleFoldsAt(std::vector const& lines) { DoForFoldsAt(lines, [&](AssDialogue &line) { line.Fold.collapsed = !line.Fold.collapsed; + if (line.Fold.counterpart) + line.Fold.counterpart->Fold.collapsed = line.Fold.collapsed; }); context->ass->Commit(_("toggle folds"), AssFile::COMMIT_FOLD); }