summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2020-02-26 13:04:30 +0100
committerEike Ziller <eike.ziller@qt.io>2020-02-26 14:12:01 +0000
commitc912ee6862031b807fc82a76cc5ee95a800eb0bb (patch)
tree7ce40c539677360e404b692e68eff400e01b659f
parentaf52b65d6a6b4fe50deb074474c55817c669556f (diff)
downloadqt-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.cpp13
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;