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
This commit is contained in:
mae
2010-09-07 15:55:06 +02:00
parent 198d81735c
commit ebc305b0d8
3 changed files with 6 additions and 4 deletions

View File

@@ -166,8 +166,8 @@ bool BaseTextDocument::save(const QString &fileName)
// When saving the current editor, make sure to maintain the cursor position for undo // When saving the current editor, make sure to maintain the cursor position for undo
Core::IEditor *currentEditor = Core::EditorManager::instance()->currentEditor(); Core::IEditor *currentEditor = Core::EditorManager::instance()->currentEditor();
if (BaseTextEditorEditable *editable = qobject_cast<BaseTextEditorEditable*>(currentEditor)) { if (BaseTextEditorEditable *editable = qobject_cast<BaseTextEditorEditable*>(currentEditor)) {
if (editable->file() == this) if (editable->file() == this)
cursor = editable->editor()->textCursor(); cursor.setPosition(editable->editor()->textCursor().position());
} }
cursor.beginEditBlock(); cursor.beginEditBlock();
@@ -382,6 +382,7 @@ void BaseTextDocument::cleanWhitespace(const QTextCursor &cursor)
{ {
bool hasSelection = cursor.hasSelection(); bool hasSelection = cursor.hasSelection();
QTextCursor copyCursor = cursor; QTextCursor copyCursor = cursor;
copyCursor.setVisualNavigation(false);
copyCursor.beginEditBlock(); copyCursor.beginEditBlock();
cleanWhitespace(copyCursor, true, true); cleanWhitespace(copyCursor, true, true);
if (!hasSelection) if (!hasSelection)
@@ -392,6 +393,7 @@ void BaseTextDocument::cleanWhitespace(const QTextCursor &cursor)
void BaseTextDocument::cleanWhitespace(QTextCursor &cursor, bool cleanIndentation, bool inEntireDocument) void BaseTextDocument::cleanWhitespace(QTextCursor &cursor, bool cleanIndentation, bool inEntireDocument)
{ {
BaseTextDocumentLayout *documentLayout = qobject_cast<BaseTextDocumentLayout*>(m_document->documentLayout()); BaseTextDocumentLayout *documentLayout = qobject_cast<BaseTextDocumentLayout*>(m_document->documentLayout());
Q_ASSERT(cursor.visualNavigation() == false);
QTextBlock block = m_document->findBlock(cursor.selectionStart()); QTextBlock block = m_document->findBlock(cursor.selectionStart());
QTextBlock end; QTextBlock end;

View File

@@ -527,7 +527,7 @@ void BaseTextDocumentLayout::doFoldOrUnfold(const QTextBlock& block, bool unfold
QTextBlock b = block.next(); QTextBlock b = block.next();
int indent = foldingIndent(block); int indent = foldingIndent(block);
while (b.isValid() && foldingIndent(b) > indent && b.next().isValid()) { while (b.isValid() && foldingIndent(b) > indent && (unfold || b.next().isValid())) {
b.setVisible(unfold); b.setVisible(unfold);
b.setLineCount(unfold? qMax(1, b.layout()->lineCount()) : 0); b.setLineCount(unfold? qMax(1, b.layout()->lineCount()) : 0);
if (unfold) { // do not unfold folded sub-blocks if (unfold) { // do not unfold folded sub-blocks

View File

@@ -3431,7 +3431,7 @@ void BaseTextEditor::updateCurrentLineHighlight()
if (block.isValid()) if (block.isValid())
d->m_extraArea->update(blockBoundingGeometry(block).translated(offset).toAlignedRect()); d->m_extraArea->update(blockBoundingGeometry(block).translated(offset).toAlignedRect());
block = document()->findBlockByNumber(cursorBlockNumber); block = document()->findBlockByNumber(cursorBlockNumber);
if (block.isValid()) if (block.isValid() && block.isVisible())
d->m_extraArea->update(blockBoundingGeometry(block).translated(offset).toAlignedRect()); d->m_extraArea->update(blockBoundingGeometry(block).translated(offset).toAlignedRect());
d->m_cursorBlockNumber = cursorBlockNumber; d->m_cursorBlockNumber = cursorBlockNumber;
} }