forked from qt-creator/qt-creator
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:
@@ -166,8 +166,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();
|
||||
@@ -382,6 +382,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)
|
||||
@@ -392,6 +393,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;
|
||||
|
||||
@@ -527,7 +527,7 @@ void BaseTextDocumentLayout::doFoldOrUnfold(const QTextBlock& block, bool unfold
|
||||
QTextBlock b = block.next();
|
||||
|
||||
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.setLineCount(unfold? qMax(1, b.layout()->lineCount()) : 0);
|
||||
if (unfold) { // do not unfold folded sub-blocks
|
||||
|
||||
@@ -3431,7 +3431,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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user