diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 1cff254452c6aaa4690a745fcaa1bf38fe4f1b8e..1db9ad6a5cb620413bb3416db324b9622239d5e3 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -2283,9 +2283,11 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e) } } - collapseAfter = (userData->collapseMode() == TextBlockUserData::CollapseAfter); - collapseThis = (userData->collapseMode() == TextBlockUserData::CollapseThis); - hasClosingCollapse = userData->hasClosingCollapse() && (previousBraceDepth > 0); + if (!userData->ifdefedOut()) { + collapseAfter = (userData->collapseMode() == TextBlockUserData::CollapseAfter); + collapseThis = (userData->collapseMode() == TextBlockUserData::CollapseThis); + hasClosingCollapse = userData->hasClosingCollapse() && (previousBraceDepth > 0); + } } if (d->m_codeFoldingVisible) { @@ -2318,10 +2320,12 @@ void BaseTextEditor::extraAreaPaintEvent(QPaintEvent *e) bool collapseNext = nextBlockUserData && nextBlockUserData->collapseMode() - == TextBlockUserData::CollapseThis; + == TextBlockUserData::CollapseThis + && !nextBlockUserData->ifdefedOut(); bool nextHasClosingCollapse = nextBlockUserData - && nextBlockUserData->hasClosingCollapseInside(); + && nextBlockUserData->hasClosingCollapseInside() + && nextBlockUserData->ifdefedOut(); bool drawBox = ((collapseAfter || collapseNext) && !nextHasClosingCollapse); @@ -3397,9 +3401,12 @@ void BaseTextEditor::collapse() TextEditDocumentLayout *documentLayout = qobject_cast<TextEditDocumentLayout*>(doc->documentLayout()); QTC_ASSERT(documentLayout, return); QTextBlock block = textCursor().block(); + QTextBlock curBlock = block; while (block.isValid()) { if (TextBlockUserData::canCollapse(block) && block.next().isVisible()) { - if ((block.next().userState()) >> 8 <= (textCursor().block().userState() >> 8)) + if (block == curBlock) + break; + if ((block.next().userState()) >> 8 <= (curBlock.previous().userState() >> 8)) break; } block = block.previous(); diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index d75e174fea2bdabcd8dfa189417117f4ff60d248..1d6444557eed41c26a2673b80e9b6cfd63078dc0 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -138,7 +138,7 @@ public: TextBlockUserData *data = static_cast<TextBlockUserData*>(block.userData()); if (!data || data->collapseMode() != CollapseAfter) { data = static_cast<TextBlockUserData*>(block.next().userData()); - if (!data || data->collapseMode() != TextBlockUserData::CollapseThis) + if (!data || data->collapseMode() != TextBlockUserData::CollapseThis || data->m_ifdefedOut) data = 0; } return data;