TextEditor: Fix extra selection for snippets to match the editable area.

Task-number: QTCREATORBUG-2099
Reviewed-by: mae
This commit is contained in:
Christian Kamm
2010-08-24 12:28:51 +02:00
parent 46c7d8f1d2
commit 726985303b
2 changed files with 7 additions and 4 deletions

View File

@@ -1452,7 +1452,7 @@ void BaseTextEditor::insertCodeSnippet(const QTextCursor &cursor_arg, const QStr
if (textToInsert.isEmpty()) { if (textToInsert.isEmpty()) {
positions.insert(cursorPosition, 0); positions.insert(cursorPosition, 0);
} else { } else {
positions.insert(cursorPosition-1, textToInsert.length()+1); positions.insert(cursorPosition, textToInsert.length());
} }
++pos; ++pos;
@@ -1485,7 +1485,7 @@ void BaseTextEditor::insertCodeSnippet(const QTextCursor &cursor_arg, const QStr
cursor = textCursor(); cursor = textCursor();
if (selection.cursor.hasSelection()) { if (selection.cursor.hasSelection()) {
cursor.setPosition(selection.cursor.selectionStart()+1); cursor.setPosition(selection.cursor.selectionStart());
cursor.setPosition(selection.cursor.selectionEnd(), QTextCursor::KeepAnchor); cursor.setPosition(selection.cursor.selectionEnd(), QTextCursor::KeepAnchor);
} else { } else {
cursor.setPosition(selection.cursor.position()); cursor.setPosition(selection.cursor.position());
@@ -2020,7 +2020,7 @@ void BaseTextEditorPrivate::snippetTabOrBacktab(bool forward)
if (final.m_cursor_begin.position() == final.m_cursor_end.position()) { // empty tab stop if (final.m_cursor_begin.position() == final.m_cursor_end.position()) { // empty tab stop
cursor.setPosition(final.m_cursor_end.position()); cursor.setPosition(final.m_cursor_end.position());
} else { } else {
cursor.setPosition(final.m_cursor_begin.position()+1); cursor.setPosition(final.m_cursor_begin.position());
cursor.setPosition(final.m_cursor_end.position(), QTextCursor::KeepAnchor); cursor.setPosition(final.m_cursor_end.position(), QTextCursor::KeepAnchor);
} }
q->setTextCursor(cursor); q->setTextCursor(cursor);

View File

@@ -442,11 +442,14 @@ void TextEditorOverlay::fill(QPainter *painter, const QColor &color, const QRect
} }
} }
/*! \returns true if any selection contains \a cursor, where a cursor on the
start or end of a selection is counted as contained.
*/
bool TextEditorOverlay::hasCursorInSelection(const QTextCursor &cursor) const bool TextEditorOverlay::hasCursorInSelection(const QTextCursor &cursor) const
{ {
for (int i = 0; i < m_selections.size(); ++i) { for (int i = 0; i < m_selections.size(); ++i) {
const OverlaySelection &selection = m_selections.at(i); const OverlaySelection &selection = m_selections.at(i);
if (cursor.position() > selection.m_cursor_begin.position() if (cursor.position() >= selection.m_cursor_begin.position()
&& cursor.position() <= selection.m_cursor_end.position()) && cursor.position() <= selection.m_cursor_end.position())
return true; return true;
} }