diff options
Diffstat (limited to 'qt/ScintillaEditBase/ScintillaQt.cpp')
| -rw-r--r-- | qt/ScintillaEditBase/ScintillaQt.cpp | 34 | 
1 files changed, 33 insertions, 1 deletions
| diff --git a/qt/ScintillaEditBase/ScintillaQt.cpp b/qt/ScintillaEditBase/ScintillaQt.cpp index 9a2545a38..4236c7f86 100644 --- a/qt/ScintillaEditBase/ScintillaQt.cpp +++ b/qt/ScintillaEditBase/ScintillaQt.cpp @@ -61,6 +61,8 @@ void ScintillaQt::execCommand(QAction *action)  #if defined(Q_OS_WIN)  static const QString sMSDEVColumnSelect("MSDEVColumnSelect");  static const QString sWrappedMSDEVColumnSelect("application/x-qt-windows-mime;value=\"MSDEVColumnSelect\""); +static const QString sVSEditorLineCutCopy("VisualStudioEditorOperationsLineCutCopyClipboardTag"); +static const QString sWrappedVSEditorLineCutCopy("application/x-qt-windows-mime;value=\"VisualStudioEditorOperationsLineCutCopyClipboardTag\"");  #elif defined(Q_OS_MAC)  static const QString sScintillaRecPboardType("com.scintilla.utf16-plain-text.rectangular");  static const QString sScintillaRecMimeType("text/x-scintilla.utf16-plain-text.rectangular"); @@ -189,6 +191,14 @@ static void AddRectangularToMime(QMimeData *mimeData, QString su)  #endif  } +static void AddLineCutCopyToMime(QMimeData *mimeData) +{ +#if defined(Q_OS_WIN) +	// Add an empty marker +	mimeData->setData(sVSEditorLineCutCopy, QByteArray()); +#endif +} +  static bool IsRectangularInMime(const QMimeData *mimeData)  {  	QStringList formats = mimeData->formats(); @@ -213,6 +223,23 @@ static bool IsRectangularInMime(const QMimeData *mimeData)  	return false;  } +static bool IsLineCutCopyInMime(const QMimeData *mimeData) +{ +	QStringList formats = mimeData->formats(); +	for (int i = 0; i < formats.size(); ++i) { +#if defined(Q_OS_WIN) +		// Visual Studio Line Cut/Copy markers +		// If line cut/copy made by this application, see base name. +		if (formats[i] == sVSEditorLineCutCopy) +			return true; +		// Otherwise see wrapped name. +		if (formats[i] == sWrappedVSEditorLineCutCopy) +			return true; +#endif +	} +	return false; +} +  bool ScintillaQt::ValidCodePage(int codePage) const  {  	return codePage == 0 @@ -302,6 +329,10 @@ void ScintillaQt::CopyToModeClipboard(const SelectionText &selectedText, QClipbo  		AddRectangularToMime(mimeData, su);  	} +	if (selectedText.lineCopy) { +		AddLineCutCopyToMime(mimeData); +	} +  	// Allow client code to add additional data (e.g rich text).  	emit aboutToCopy(mimeData); @@ -327,6 +358,7 @@ void ScintillaQt::PasteFromMode(QClipboard::Mode clipboardMode_)  	QClipboard *clipboard = QApplication::clipboard();  	const QMimeData *mimeData = clipboard->mimeData(clipboardMode_);  	bool isRectangular = IsRectangularInMime(mimeData); +	bool isLine = SelectionEmpty() && IsLineCutCopyInMime(mimeData);  	QString text = clipboard->text(clipboardMode_);  	QByteArray utext = BytesForDocument(text);  	std::string dest(utext.constData(), utext.length()); @@ -336,7 +368,7 @@ void ScintillaQt::PasteFromMode(QClipboard::Mode clipboardMode_)  	UndoGroup ug(pdoc);  	ClearSelection(multiPasteMode == SC_MULTIPASTE_EACH);  	InsertPasteShape(selText.Data(), selText.Length(), -		selText.rectangular ? pasteRectangular : pasteStream); +		isRectangular ? pasteRectangular : (isLine ? pasteLine : pasteStream));  	EnsureCaretVisible();  } | 
