diff options
author | Eike Ziller <eike.ziller@qt.io> | 2020-02-26 13:04:30 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2020-02-26 14:12:01 +0000 |
commit | c912ee6862031b807fc82a76cc5ee95a800eb0bb (patch) | |
tree | 7ce40c539677360e404b692e68eff400e01b659f | |
parent | af52b65d6a6b4fe50deb074474c55817c669556f (diff) | |
download | qt-creator-c912ee6862031b807fc82a76cc5ee95a800eb0bb.tar.gz |
TextEditor: Fix scrolling state after splitting
And when restoring editors in other ways (like from a session).
When splitting, the new editor was always scrolling to make the text
cursor visible, even if it wasn't visible in the original.
1. open editor with long contents
2. scroll away from the text cursor, so the line isn't visible
3. split and wonder
or 3. close and re-open Qt Creator, and restore the session
Our code already does set the state of the new editor to the old one,
but that state was destroyed by QPlainTextEdit::showEvent, which scrolls
on first show if text was added to the document.
So, wrap the showEvent with save/restoreState on first show.
Change-Id: I95e0b4e963ebb33d13ce020affaf7fc7f94c9257
Reviewed-by: David Schulz <david.schulz@qt.io>
-rw-r--r-- | src/plugins/texteditor/texteditor.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 43e125e2fc..6ff9a52607 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -651,6 +651,7 @@ public: MarginSettings m_marginSettings; // apply when making visible the first time, for the split case bool m_fontSettingsNeedsApply = true; + bool m_wasNotYetShown = true; BehaviorSettings m_behaviorSettings; int extraAreaSelectionAnchorBlockNumber = -1; @@ -7204,10 +7205,20 @@ void TextEditorWidget::encourageApply() void TextEditorWidget::showEvent(QShowEvent* e) { triggerPendingUpdates(); + // QPlainTextEdit::showEvent scrolls to make the cursor visible on first show + // which we don't want, since we restore previous states when + // opening editors, and when splitting/duplicating. + // So restore the previous state after that. + QByteArray state; + if (d->m_wasNotYetShown) + state = saveState(); QPlainTextEdit::showEvent(e); + if (d->m_wasNotYetShown) { + restoreState(state); + d->m_wasNotYetShown = false; + } } - void TextEditorWidgetPrivate::applyFontSettingsDelayed() { m_fontSettingsNeedsApply = true; |