diff --git a/src/plugins/texteditor/behaviorsettingspage.ui b/src/plugins/texteditor/behaviorsettingspage.ui
index eddd849c261..349d272a949 100644
--- a/src/plugins/texteditor/behaviorsettingspage.ui
+++ b/src/plugins/texteditor/behaviorsettingspage.ui
@@ -50,10 +50,10 @@
false
- Automatically determine whether to insert spaces or tabs based on the previous line in the file
+ Automatically determine based on the nearest indented line (previous line preferred over next line)
- Based on the previous line
+ Based on the surrounding lines
diff --git a/src/plugins/texteditor/tabsettings.cpp b/src/plugins/texteditor/tabsettings.cpp
index efc40526947..f5bf66eecd9 100644
--- a/src/plugins/texteditor/tabsettings.cpp
+++ b/src/plugins/texteditor/tabsettings.cpp
@@ -231,19 +231,26 @@ int TabSettings::indentedColumn(int column, bool doIndent) const
bool TabSettings::guessSpacesForTabs(const QTextBlock& _block) const {
if (m_autoSpacesForTabs && _block.isValid()) {
- QTextBlock block = _block;
- const QTextDocument* doc = block.document();
- int maxLookBack = 100;
- while (block.isValid() && block != doc->begin() && maxLookBack-- > 0) {
- block = block.previous();
- if (block.text().isEmpty())
- continue;
- QChar firstChar = block.text().at(0);
- if (firstChar == QLatin1Char(' ')) {
- return true;
- } else if (firstChar == QLatin1Char('\t')) {
- return false;
+ QVector currentBlocks(2, _block); // [0] looks back; [1] looks forward
+ int maxLookAround = 100;
+ while (maxLookAround-- > 0) {
+ currentBlocks[0] = currentBlocks.at(0).previous();
+ currentBlocks[1] = currentBlocks.at(1).next();
+ bool done = true;
+ foreach(QTextBlock block, currentBlocks) {
+ if (block.isValid())
+ done = false;
+ if (!block.isValid() || block.text().isEmpty())
+ continue;
+ QChar firstChar = block.text().at(0);
+ if (firstChar == QLatin1Char(' ')) {
+ return true;
+ } else if (firstChar == QLatin1Char('\t')) {
+ return false;
+ }
}
+ if (done)
+ break;
}
}
return m_spacesForTabs;