From c5c3214cfbf7ea329ff882e4808e5865ffac38c9 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 18 Nov 2020 08:30:05 +0100 Subject: [PATCH] TextEditor: add action to paste without autoFormat Fixes: QTCREATORBUG-20887 Change-Id: Iedc6b584c9c1cc48804025653d0749e054a406f8 Reviewed-by: Christian Stenger --- src/plugins/texteditor/texteditor.cpp | 15 ++++++++++++--- src/plugins/texteditor/texteditor.h | 1 + .../texteditor/texteditoractionhandler.cpp | 7 +++++-- src/plugins/texteditor/texteditorconstants.h | 1 + 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index fd570696e69..e0642423b4e 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -764,6 +764,7 @@ public: bool m_animateAutoComplete = true; bool m_highlightAutoComplete = true; bool m_skipAutoCompletedText = true; + bool m_skipFormatOnPaste = false; bool m_removeAutoCompletedText = true; bool m_keepAutoCompletionHighlight = false; QList m_autoCompleteHighlightPos; @@ -7613,6 +7614,13 @@ void TextEditorWidget::circularPaste() } } +void TextEditorWidget::pasteWithoutFormat() +{ + d->m_skipFormatOnPaste = true; + paste(); + d->m_skipFormatOnPaste = false; +} + void TextEditorWidget::switchUtf8bom() { textDocument()->switchUtf8Bom(); @@ -7790,9 +7798,10 @@ void TextEditorWidget::insertFromMimeData(const QMimeData *source) int reindentBlockEnd = cursor.blockNumber() - (hasFinalNewline?1:0); - if (reindentBlockStart < reindentBlockEnd - || (reindentBlockStart == reindentBlockEnd - && (!insertAtBeginningOfLine || hasFinalNewline))) { + if (!d->m_skipFormatOnPaste + && (reindentBlockStart < reindentBlockEnd + || (reindentBlockStart == reindentBlockEnd + && (!insertAtBeginningOfLine || hasFinalNewline)))) { if (insertAtBeginningOfLine && !hasFinalNewline) { QTextCursor unnecessaryWhitespace = cursor; unnecessaryWhitespace.setPosition(cursorPosition); diff --git a/src/plugins/texteditor/texteditor.h b/src/plugins/texteditor/texteditor.h index 6e693e36978..38c7f93daf8 100644 --- a/src/plugins/texteditor/texteditor.h +++ b/src/plugins/texteditor/texteditor.h @@ -366,6 +366,7 @@ public: void setExtraEncodingSettings(const TextEditor::ExtraEncodingSettings &); void circularPaste(); + void pasteWithoutFormat(); void switchUtf8bom(); void zoomF(float delta); diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp index ce340e803f5..51d06d50903 100644 --- a/src/plugins/texteditor/texteditoractionhandler.cpp +++ b/src/plugins/texteditor/texteditoractionhandler.cpp @@ -317,8 +317,11 @@ void TextEditorActionHandlerPrivate::createActions() [] (TextEditorWidget *w) { w->selectEncoding(); }, false, tr("Select Encoding..."), QKeySequence(), G_EDIT_OTHER, editMenu); m_circularPasteAction = registerAction(CIRCULAR_PASTE, - [] (TextEditorWidget *w) { w->circularPaste(); }, false, tr("Paste from Clipboard History"), - QKeySequence(tr("Ctrl+Shift+V")), G_EDIT_COPYPASTE, editMenu); + [] (TextEditorWidget *w) { w->circularPaste(); }, false, tr("Paste from Clipboard History"), + QKeySequence(tr("Ctrl+Shift+V")), G_EDIT_COPYPASTE, editMenu); + m_circularPasteAction = registerAction(NO_FORMAT_PASTE, + [] (TextEditorWidget *w) { w->pasteWithoutFormat(); }, false, tr("Paste without Formatting"), + QKeySequence(Core::useMacShortcuts ? tr("Cmd+Opt+Shift+V") : QString()), G_EDIT_COPYPASTE, editMenu); // register "Edit -> Advanced" Menu Actions Core::ActionContainer *advancedEditMenu = Core::ActionManager::actionContainer(M_EDIT_ADVANCED); diff --git a/src/plugins/texteditor/texteditorconstants.h b/src/plugins/texteditor/texteditorconstants.h index 6a1e8637d30..22b602074d8 100644 --- a/src/plugins/texteditor/texteditorconstants.h +++ b/src/plugins/texteditor/texteditorconstants.h @@ -203,6 +203,7 @@ const char INFO_MISSING_SYNTAX_DEFINITION[] = "TextEditor.InfoSyntaxDefinition"; const char INFO_MULTIPLE_SYNTAX_DEFINITIONS[] = "TextEditor.InfoMultipleSyntaxDefinitions"; const char TASK_OPEN_FILE[] = "TextEditor.Task.OpenFile"; const char CIRCULAR_PASTE[] = "TextEditor.CircularPaste"; +const char NO_FORMAT_PASTE[] = "TextEditor.NoFormatPaste"; const char SWITCH_UTF8BOM[] = "TextEditor.SwitchUtf8bom"; const char INDENT[] = "TextEditor.Indent"; const char UNINDENT[] = "TextEditor.Unindent";