summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormae <qt-info@nokia.com>2010-09-07 15:55:06 +0200
committermae <qt-info@nokia.com>2010-09-07 15:55:06 +0200
commit6efdc7cff0937efeea89a5f98df725a08f1c70a2 (patch)
tree540cc096ac3691f65c081683a43ad1a5e03f3172
parent793caf0fc67874f2df2306b76601a8dc0facc246 (diff)
downloadqt-creator-6efdc7cff0937efeea89a5f98df725a08f1c70a2.tar.gz
Fix: Folded code is deleted on save
Also fixes a crash when folding code at the very end of the document Task-number: QTCREATORBUG-2159
-rw-r--r--src/plugins/texteditor/basetextdocument.cpp6
-rw-r--r--src/plugins/texteditor/basetextdocumentlayout.cpp3
-rw-r--r--src/plugins/texteditor/basetexteditor.cpp4
3 files changed, 10 insertions, 3 deletions
diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp
index d28e2e4dee..3dc1832710 100644
--- a/src/plugins/texteditor/basetextdocument.cpp
+++ b/src/plugins/texteditor/basetextdocument.cpp
@@ -165,8 +165,8 @@ bool BaseTextDocument::save(const QString &fileName)
// When saving the current editor, make sure to maintain the cursor position for undo
Core::IEditor *currentEditor = Core::EditorManager::instance()->currentEditor();
if (BaseTextEditorEditable *editable = qobject_cast<BaseTextEditorEditable*>(currentEditor)) {
- if (editable->file() == this)
- cursor = editable->editor()->textCursor();
+ if (editable->file() == this)
+ cursor.setPosition(editable->editor()->textCursor().position());
}
cursor.beginEditBlock();
@@ -373,6 +373,7 @@ void BaseTextDocument::cleanWhitespace(const QTextCursor &cursor)
{
bool hasSelection = cursor.hasSelection();
QTextCursor copyCursor = cursor;
+ copyCursor.setVisualNavigation(false);
copyCursor.beginEditBlock();
cleanWhitespace(copyCursor, true, true);
if (!hasSelection)
@@ -383,6 +384,7 @@ void BaseTextDocument::cleanWhitespace(const QTextCursor &cursor)
void BaseTextDocument::cleanWhitespace(QTextCursor &cursor, bool cleanIndentation, bool inEntireDocument)
{
BaseTextDocumentLayout *documentLayout = qobject_cast<BaseTextDocumentLayout*>(m_document->documentLayout());
+ Q_ASSERT(cursor.visualNavigation() == false);
QTextBlock block = m_document->findBlock(cursor.selectionStart());
QTextBlock end;
diff --git a/src/plugins/texteditor/basetextdocumentlayout.cpp b/src/plugins/texteditor/basetextdocumentlayout.cpp
index 9255f2e1a2..11632f0c63 100644
--- a/src/plugins/texteditor/basetextdocumentlayout.cpp
+++ b/src/plugins/texteditor/basetextdocumentlayout.cpp
@@ -175,6 +175,9 @@ void TextBlockUserData::doCollapse(const QTextBlock& block, bool visible)
return;
}
+ if (!visible && !cursor.block().next().isValid())
+ return; // WORKAROUND for a QPlainTextEdit bug, we cannot collapse at the very end, would crash
+
QTextBlock b = block.next();
while (b < cursor.block()) {
b.setVisible(visible);
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index b856d941eb..71ae6141ff 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -1451,6 +1451,8 @@ void BaseTextEditor::setTextCursor(const QTextCursor &cursor)
QTextCursor c = cursor;
c.setVisualNavigation(true);
QPlainTextEdit::setTextCursor(c);
+ if (!c.block().isVisible())
+ expand();
if (selectionChange)
slotSelectionChanged();
}
@@ -3238,7 +3240,7 @@ void BaseTextEditor::updateCurrentLineHighlight()
if (block.isValid())
d->m_extraArea->update(blockBoundingGeometry(block).translated(offset).toAlignedRect());
block = document()->findBlockByNumber(cursorBlockNumber);
- if (block.isValid())
+ if (block.isValid() && block.isVisible())
d->m_extraArea->update(blockBoundingGeometry(block).translated(offset).toAlignedRect());
d->m_cursorBlockNumber = cursorBlockNumber;
}