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;