diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 59c55fcb2d4f056dcfff985b054cd980225f0fa0..a675ea4e8bc5a58aa4ef528125846219a769448b 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -887,13 +887,18 @@ void BaseTextEditor::keyPressEvent(QKeyEvent *e) QTextCursor cursor = textCursor(); if (d->m_inBlockSelectionMode) cursor.clearSelection(); - if (d->m_document->tabSettings().m_autoIndent) { + const TabSettings &ts = d->m_document->tabSettings(); + if (ts.m_autoIndent) { cursor.beginEditBlock(); cursor.insertBlock(); indent(document(), cursor, QChar::Null); cursor.endEditBlock(); } else { + cursor.beginEditBlock(); + QString previousBlockText = cursor.block().text(); cursor.insertBlock(); + cursor.insertText(ts.indentationString(previousBlockText)); + cursor.endEditBlock(); } e->accept(); setTextCursor(cursor); @@ -3189,17 +3194,14 @@ void BaseTextEditor::handleBackspaceKey() continue; previousIndent = tabSettings.columnAt(previousNonEmptyBlockText, tabSettings.firstNonSpace(previousNonEmptyBlockText)); - if (previousIndent < indent) + if (previousIndent < indent) { + cursor.beginEditBlock(); + cursor.setPosition(currentBlock.position(), QTextCursor::KeepAnchor); + cursor.insertText(tabSettings.indentationString(previousNonEmptyBlockText)); + cursor.endEditBlock(); break; + } } - - if (previousIndent >= indent) - previousIndent = 0; - - cursor.beginEditBlock(); - cursor.setPosition(currentBlock.position(), QTextCursor::KeepAnchor); - cursor.insertText(tabSettings.indentationString(0, previousIndent)); - cursor.endEditBlock(); } void BaseTextEditor::wheelEvent(QWheelEvent *e) diff --git a/src/plugins/texteditor/tabsettings.cpp b/src/plugins/texteditor/tabsettings.cpp index e0225ce8bcdbb12bf17d711504ece37e8f797ca5..1c20ab7b9040b39928e070d825b02a9ebf51cc1e 100644 --- a/src/plugins/texteditor/tabsettings.cpp +++ b/src/plugins/texteditor/tabsettings.cpp @@ -110,6 +110,12 @@ int TabSettings::firstNonSpace(const QString &text) const return i; } +QString TabSettings::indentationString(const QString &text) const +{ + return text.left(firstNonSpace(text)); +} + + int TabSettings::trailingWhitespaces(const QString &text) const { int i = 0; diff --git a/src/plugins/texteditor/tabsettings.h b/src/plugins/texteditor/tabsettings.h index ec2c3dfe8ea35666a5728909a08725153f526c16..2fbede49502d1c78c33536edbce927c017abae61 100644 --- a/src/plugins/texteditor/tabsettings.h +++ b/src/plugins/texteditor/tabsettings.h @@ -63,6 +63,7 @@ struct TEXTEDITOR_EXPORT TabSettings int spacesLeftFromPosition(const QString &text, int position) const; int indentedColumn(int column, bool doIndent = true) const; QString indentationString(int startColumn, int targetColumn) const; + QString indentationString(const QString &text) const; void indentLine(QTextBlock block, int newIndent) const;