diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 8471ec947b9..db0fb807351 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -1479,7 +1479,8 @@ BaseTextEditorPrivate::BaseTextEditorPrivate() m_inBlockSelectionMode(false), m_lastEventWasBlockSelectionEvent(false), m_blockSelectionExtraX(0), - m_moveLineUndoHack(false) + m_moveLineUndoHack(false), + m_cursorBlockNumber(-1) { } @@ -2781,6 +2782,22 @@ void BaseTextEditor::updateCurrentLineHighlight() } setExtraSelections(CurrentLineSelection, extraSelections); + + + // the extra area shows information for the entire current block, not just the currentline. + // This is why we must force a bigger update region. + int cursorBlockNumber = textCursor().blockNumber(); + if (cursorBlockNumber != d->m_cursorBlockNumber) { + QPointF offset = contentOffset(); + QTextBlock block = document()->findBlockByNumber(d->m_cursorBlockNumber); + if (block.isValid()) + d->m_extraArea->update(blockBoundingGeometry(block).translated(offset).toAlignedRect()); + block = document()->findBlockByNumber(cursorBlockNumber); + if (block.isValid()) + d->m_extraArea->update(blockBoundingGeometry(block).translated(offset).toAlignedRect()); + d->m_cursorBlockNumber = cursorBlockNumber; + } + } void BaseTextEditor::slotCursorPositionChanged() diff --git a/src/plugins/texteditor/basetexteditor_p.h b/src/plugins/texteditor/basetexteditor_p.h index a1829e70f81..70fa38c759f 100644 --- a/src/plugins/texteditor/basetexteditor_p.h +++ b/src/plugins/texteditor/basetexteditor_p.h @@ -243,6 +243,7 @@ public: QTimer *m_highlightBlocksTimer; QPointer m_animator; + int m_cursorBlockNumber; };