forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -651,6 +651,7 @@ public:
|
|||||||
MarginSettings m_marginSettings;
|
MarginSettings m_marginSettings;
|
||||||
// apply when making visible the first time, for the split case
|
// apply when making visible the first time, for the split case
|
||||||
bool m_fontSettingsNeedsApply = true;
|
bool m_fontSettingsNeedsApply = true;
|
||||||
|
bool m_wasNotYetShown = true;
|
||||||
BehaviorSettings m_behaviorSettings;
|
BehaviorSettings m_behaviorSettings;
|
||||||
|
|
||||||
int extraAreaSelectionAnchorBlockNumber = -1;
|
int extraAreaSelectionAnchorBlockNumber = -1;
|
||||||
@@ -7204,10 +7205,20 @@ void TextEditorWidget::encourageApply()
|
|||||||
void TextEditorWidget::showEvent(QShowEvent* e)
|
void TextEditorWidget::showEvent(QShowEvent* e)
|
||||||
{
|
{
|
||||||
triggerPendingUpdates();
|
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);
|
QPlainTextEdit::showEvent(e);
|
||||||
|
if (d->m_wasNotYetShown) {
|
||||||
|
restoreState(state);
|
||||||
|
d->m_wasNotYetShown = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TextEditorWidgetPrivate::applyFontSettingsDelayed()
|
void TextEditorWidgetPrivate::applyFontSettingsDelayed()
|
||||||
{
|
{
|
||||||
m_fontSettingsNeedsApply = true;
|
m_fontSettingsNeedsApply = true;
|
||||||
|
Reference in New Issue
Block a user