From 11d2d7447671c5aaf8e8b718df0fdf8e58f76c80 Mon Sep 17 00:00:00 2001 From: David Schulz <david.schulz@digia.com> Date: Thu, 8 Aug 2013 08:43:04 +0200 Subject: [PATCH] Editor: Keep selection on updateCurrentSelection(). Task-number: QTCREATORBUG-9959 Change-Id: Ib3324e78bc36790e588c56af7474d3eb968032dc Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com> --- src/plugins/texteditor/texteditorplugin.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/plugins/texteditor/texteditorplugin.cpp b/src/plugins/texteditor/texteditorplugin.cpp index ce2da09161f..5bd897625eb 100644 --- a/src/plugins/texteditor/texteditorplugin.cpp +++ b/src/plugins/texteditor/texteditorplugin.cpp @@ -322,19 +322,21 @@ void TextEditorPlugin::updateVariable(const QByteArray &variable) void TextEditorPlugin::updateCurrentSelection(const QString &text) { - Core::IEditor *iface = Core::EditorManager::currentEditor(); - ITextEditor *editor = qobject_cast<ITextEditor *>(iface); - if (editor) { - int pos = editor->position(); + if (ITextEditor *editor = qobject_cast<ITextEditor *>(Core::EditorManager::currentEditor())) { + const int pos = editor->position(); int anchor = editor->position(ITextEditor::Anchor); if (anchor < 0) // no selection anchor = pos; - int selectionLength = anchor-pos; - if (selectionLength < 0) + int selectionLength = pos - anchor; + const bool selectionInTextDirection = selectionLength >= 0; + if (!selectionInTextDirection) selectionLength = -selectionLength; - int start = qMin(pos, anchor); + const int start = qMin(pos, anchor); editor->setCursorPosition(start); editor->replace(selectionLength, text); + const int replacementEnd = editor->position(); + editor->setCursorPosition(selectionInTextDirection ? start : replacementEnd); + editor->select(selectionInTextDirection ? replacementEnd : start); } } -- GitLab