From 49ab0c41097cb9165274cc4daad651133547794e Mon Sep 17 00:00:00 2001 From: Artem Sokolovskii Date: Wed, 28 Feb 2024 16:42:24 +0100 Subject: [PATCH] TextEditor: Fix jump to search result Change-Id: Ie570936b0b96290d95999b8b501c12610ebfc9a8 Reviewed-by: David Schulz --- src/plugins/texteditor/texteditor.cpp | 45 +++++++++++++++------------ 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 4817c61dd7d..baf027d124d 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -3502,18 +3502,19 @@ bool TextEditorWidget::singleShotAfterHighlightingDone(std::function &&f [f = std::move(f)] { f(); }, Qt::SingleShotConnection); return true; } - return false; } void TextEditorWidget::restoreState(const QByteArray &state) { - if (singleShotAfterHighlightingDone([this, state] { restoreState(state); })) - return; - const auto callFoldLicenseHeader = [this] { - if (d->m_displaySettings.m_autoFoldFirstComment) - d->foldLicenseHeader(); + auto callFold = [this] { + if (d->m_displaySettings.m_autoFoldFirstComment) + d->foldLicenseHeader(); + }; + + if (!singleShotAfterHighlightingDone(callFold)) + callFold(); }; if (state.isEmpty()) { @@ -3536,21 +3537,25 @@ void TextEditorWidget::restoreState(const QByteArray &state) if (version >= 1) { QList collapsedBlocks; stream >> collapsedBlocks; - QTextDocument *doc = document(); - bool layoutChanged = false; - for (const int blockNumber : std::as_const(collapsedBlocks)) { - QTextBlock block = doc->findBlockByNumber(qMax(0, blockNumber)); - if (block.isValid()) { - TextDocumentLayout::doFoldOrUnfold(block, false); - layoutChanged = true; + auto foldingRestore = [this, collapsedBlocks] { + QTextDocument *doc = document(); + bool layoutChanged = false; + for (const int blockNumber : std::as_const(collapsedBlocks)) { + QTextBlock block = doc->findBlockByNumber(qMax(0, blockNumber)); + if (block.isValid()) { + TextDocumentLayout::doFoldOrUnfold(block, false); + layoutChanged = true; + } } - } - if (layoutChanged) { - auto documentLayout = qobject_cast(doc->documentLayout()); - QTC_ASSERT(documentLayout, return ); - documentLayout->requestUpdate(); - documentLayout->emitDocumentSizeChanged(); - } + if (layoutChanged) { + auto documentLayout = qobject_cast(doc->documentLayout()); + QTC_ASSERT(documentLayout, return); + documentLayout->requestUpdate(); + documentLayout->emitDocumentSizeChanged(); + } + }; + if (!singleShotAfterHighlightingDone(foldingRestore)) + foldingRestore(); } else { callFoldLicenseHeader(); }