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";