diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index d44c789d6f5ed29c74e9b4a87748943b5607b18e..e43e82a485715f40cc347b49c48af54e3df6de12 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -2378,8 +2378,8 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e) extraAreaHighlightCollapseEndBlockNumber = d->m_highlightBlocksInfo.close.first(); endIsVisible = doc->findBlockByNumber(extraAreaHighlightCollapseEndBlockNumber).isVisible(); - if (TextBlockUserData::hasCollapseAfter( - doc->findBlockByNumber(extraAreaHighlightCollapseBlockNumber-1))) { + QTextBlock before = doc->findBlockByNumber(extraAreaHighlightCollapseBlockNumber-1); + if (TextBlockUserData::hasCollapseAfter(before)) { extraAreaHighlightCollapseBlockNumber--; } } @@ -2698,12 +2698,15 @@ void BaseTextEditor::extraAreaMouseEvent(QMouseEvent *e) int collapseBoxWidth = fontMetrics().lineSpacing() + 1; if (e->pos().x() > extraArea()->width() - collapseBoxWidth) { d->extraAreaHighlightCollapseBlockNumber = cursor.blockNumber(); - if (!TextBlockUserData::hasClosingCollapse(cursor.block())) + if (TextBlockUserData::canCollapse(cursor.block()) + || !TextBlockUserData::hasClosingCollapse(cursor.block())) d->extraAreaHighlightCollapseColumn = cursor.block().length()-1; if (!d->m_displaySettings.m_fancyFoldingBar && TextBlockUserData::hasCollapseAfter(cursor.block())) { d->extraAreaHighlightCollapseBlockNumber++; - if (!TextBlockUserData::hasClosingCollapse(cursor.block().next())) + d->extraAreaHighlightCollapseColumn = -1; + if (TextBlockUserData::canCollapse(cursor.block().next()) + || !TextBlockUserData::hasClosingCollapse(cursor.block().next())) d->extraAreaHighlightCollapseColumn = cursor.block().next().length()-1; } } @@ -3299,8 +3302,9 @@ bool TextBlockUserData::findPreviousBlockOpenParenthesis(QTextCursor *cursor, bo if (block == cursor->block()) { if (position - block.position() <= paren.pos + (paren.type == Parenthesis::Closed ? 1 : 0)) continue; - if (checkStartPosition && paren.type == Parenthesis::Opened && position == cursor->position()) + if (checkStartPosition && paren.type == Parenthesis::Opened && paren.pos== cursor->position()) { return true; + } } if (paren.type == Parenthesis::Closed) { ++ignore; @@ -3820,6 +3824,10 @@ void BaseTextEditor::setDisplaySettings(const DisplaySettings &ds) } d->m_displaySettings = ds; + d->extraAreaHighlightCollapseBlockNumber = d->extraAreaHighlightCollapseColumn = -1; + d->m_highlightBlocksInfo = BaseTextEditorPrivateHighlightBlocks(); + viewport()->update(); + extraArea()->update(); } void BaseTextEditor::setStorageSettings(const StorageSettings &storageSettings) diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index ca488ba1c8de9ae5ee11087a0bab2f807d9fb05e..15cc8d962886b0d87d9a8bf0fd555bd0235df1a5 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -143,10 +143,12 @@ public: inline static bool hasCollapseAfter(const QTextBlock & block) { + if (!block.isValid()) + return false; TextBlockUserData *data = static_cast<TextBlockUserData*>(block.userData()); if (data && data->collapseMode() != NoCollapse) { - return (data->collapseMode() == CollapseAfter); - } else if (!data) { + return false; + } else if (block.next().isValid()) { data = static_cast<TextBlockUserData*>(block.next().userData()); if (data && data->collapseMode() == TextBlockUserData::CollapseThis && !data->m_ifdefedOut) return true;