aboutsummaryrefslogtreecommitdiffhomepage
path: root/qt/ScintillaEditBase/ScintillaQt.cpp
diff options
context:
space:
mode:
authorJustin Dailey <unknown>2020-04-10 08:16:50 +1000
committerJustin Dailey <unknown>2020-04-10 08:16:50 +1000
commitfc79966496fc5efd7f5bb0ea4b5aa394abe1e363 (patch)
tree8786205c525a8b70876e4b5e4a89e09fe3548432 /qt/ScintillaEditBase/ScintillaQt.cpp
parentbccddaa3cb64acce1af28e972b898be2b2e60001 (diff)
downloadscintilla-mirror-fc79966496fc5efd7f5bb0ea4b5aa394abe1e363.tar.gz
Bug [#2167]. Add line copy format on clipboard, compatible with Visual Studio.
Diffstat (limited to 'qt/ScintillaEditBase/ScintillaQt.cpp')
-rw-r--r--qt/ScintillaEditBase/ScintillaQt.cpp34
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();
}