diff options
Diffstat (limited to 'src/plugins/texteditor/basetexteditor.cpp')
-rw-r--r-- | src/plugins/texteditor/basetexteditor.cpp | 45 |
1 files changed, 13 insertions, 32 deletions
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index dce1b5debf..586cb90a87 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -55,6 +55,7 @@ #include "texteditorsettings.h" #include "texteditoroverlay.h" #include "circularclipboard.h" +#include "circularclipboardassist.h" #include <aggregation/aggregate.h> #include <coreplugin/actionmanager/actionmanager.h> @@ -203,14 +204,6 @@ static void convertToPlainText(QString &txt) } } -static bool isModifierKey(int key) -{ - return key == Qt::Key_Shift - || key == Qt::Key_Control - || key == Qt::Key_Alt - || key == Qt::Key_Meta; -} - static const char kTextBlockMimeType[] = "application/vnd.nokia.qtcreator.blocktext"; static const char kVerticalTextBlockMimeType[] = "application/vnd.nokia.qtcreator.vblocktext"; @@ -1554,11 +1547,6 @@ void BaseTextEditorWidget::keyPressEvent(QKeyEvent *e) d->m_moveLineUndoHack = false; d->clearVisibleFoldedBlock(); - if (d->m_isCirculatingClipboard - && !isModifierKey(e->key())) { - d->m_isCirculatingClipboard = false; - } - if (e->key() == Qt::Key_Alt && d->m_behaviorSettings.m_keyboardTooltips) { d->m_maybeFakeTooltipEvent = true; @@ -2496,7 +2484,6 @@ BaseTextEditorWidgetPrivate::BaseTextEditorWidgetPrivate() m_requestMarkEnabled(true), m_lineSeparatorsAllowed(false), m_maybeFakeTooltipEvent(false), - m_isCirculatingClipboard(false), m_visibleWrapColumn(0), m_linkPressed(false), m_delayedUpdateTimer(0), @@ -2511,7 +2498,8 @@ BaseTextEditorWidgetPrivate::BaseTextEditorWidgetPrivate() m_assistRelevantContentAdded(false), m_cursorBlockNumber(-1), m_autoCompleter(new AutoCompleter), - m_indenter(new Indenter) + m_indenter(new Indenter), + m_clipboardAssistProvider(new Internal::ClipboardAssistProvider) { } @@ -5821,26 +5809,19 @@ void BaseTextEditorWidget::paste() void BaseTextEditorWidget::circularPaste() { - const QMimeData *mimeData = CircularClipboard::instance()->next(); - if (!mimeData) - return; - - QTextCursor cursor = textCursor(); - if (!d->m_isCirculatingClipboard) { - cursor.beginEditBlock(); - d->m_isCirculatingClipboard = true; - } else { - cursor.joinPreviousEditBlock(); + CircularClipboard *circularClipBoard = CircularClipboard::instance(); + if (const QMimeData *clipboardData = QApplication::clipboard()->mimeData()) { + circularClipBoard->collect(duplicateMimeData(clipboardData)); + circularClipBoard->toLastCollect(); } - const int selectionStart = qMin(cursor.position(), cursor.anchor()); - insertFromMimeData(mimeData); - cursor.setPosition(selectionStart, QTextCursor::KeepAnchor); - cursor.endEditBlock(); - setTextCursor(flippedCursor(cursor)); + if (circularClipBoard->size() > 1) + return invokeAssist(QuickFix, d->m_clipboardAssistProvider.data()); - // We want to latest pasted content to replace the system's current clipboard. - QPlainTextEdit::copy(); + if (const QMimeData *mimeData = circularClipBoard->next().data()) { + QApplication::clipboard()->setMimeData(duplicateMimeData(mimeData)); + paste(); + } } void BaseTextEditorWidget::switchUtf8bom() |