Editor: Keep selection on updateCurrentSelection().

Task-number: QTCREATORBUG-9959

Change-Id: Ib3324e78bc36790e588c56af7474d3eb968032dc
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
This commit is contained in:
David Schulz
2013-08-08 08:43:04 +02:00
parent 48f161641a
commit 11d2d74476

View File

@@ -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);
}
}