diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 07874f2845d78054a9520c4117bafc988d2b6804..49a054a334970b1eda0d2144ba01c436b870d6d6 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -1184,6 +1184,10 @@ void BaseTextEditor::keyPressEvent(QKeyEvent *e) return; } + if (d->m_snippetOverlay->isVisible() && + (e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace)) + d->snippetCheckCursor(textCursor()); + if (ro || e->text().isEmpty() || !e->text().at(0).isPrint()) { QPlainTextEdit::keyPressEvent(e); } else if ((e->modifiers() & (Qt::ControlModifier|Qt::AltModifier)) != Qt::ControlModifier){ @@ -1651,11 +1655,15 @@ void BaseTextEditorPrivate::setupDocumentSignals(BaseTextDocument *document) void BaseTextEditorPrivate::snippetCheckCursor(const QTextCursor &cursor) { - if (cursor.hasSelection()) - return; if (!m_snippetOverlay->isVisible() || m_snippetOverlay->isEmpty()) return; - if (!m_snippetOverlay->hasCursorInSelection(cursor)) { + + QTextCursor start = cursor; + start.setPosition(cursor.selectionStart()); + QTextCursor end = cursor; + end.setPosition(cursor.selectionEnd()); + if (!m_snippetOverlay->hasCursorInSelection(start) + || !m_snippetOverlay->hasCursorInSelection(end)) { m_snippetOverlay->setVisible(false); m_snippetOverlay->clear(); } @@ -3572,6 +3580,12 @@ void BaseTextEditor::handleBackspaceKey() int pos = cursor.position(); QTC_ASSERT(!cursor.hasSelection(), return); + if (d->m_snippetOverlay->isVisible()) { + QTextCursor snippetCursor = cursor; + snippetCursor.movePosition(QTextCursor::Left); + d->snippetCheckCursor(snippetCursor); + } + const TextEditor::TabSettings &tabSettings = d->m_document->tabSettings(); if (tabSettings.m_autoIndent && autoBackspace(cursor))