From 33a0bc31c14d37ae835d6096e9c4d66cd2e71901 Mon Sep 17 00:00:00 2001 From: Ken Moore Date: Tue, 17 Apr 2018 08:39:05 -0400 Subject: Fix up the clipboard persistance. When moving the owner of the clipboard over to the desktop session, we need to copy *all* of the data on the clipboard, not just the text. Very often, text on the clipboard is "paired" with control codes or alternate info in other mimetype fields. --- src-qt5/core/lumina-desktop/LSession.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'src-qt5/core') diff --git a/src-qt5/core/lumina-desktop/LSession.cpp b/src-qt5/core/lumina-desktop/LSession.cpp index 9ea377ba..fe399e40 100644 --- a/src-qt5/core/lumina-desktop/LSession.cpp +++ b/src-qt5/core/lumina-desktop/LSession.cpp @@ -594,10 +594,21 @@ void LSession::SessionEnding(){ } void LSession::handleClipboard(QClipboard::Mode mode){ - if (!ignoreClipboard) { + if ( !ignoreClipboard && mode == QClipboard::Clipboard ){ //only support Clipboard const QMimeData *mime = QApplication::clipboard()->mimeData(mode); - if (!mime) { return; } - if (mime->hasText()) { QMetaObject::invokeMethod(this, "storeClipboard", Qt::QueuedConnection, Q_ARG(QString, mime->text()), Q_ARG(QClipboard::Mode, mode)); } + if (mime==NULL) { return; } + if (mime->hasText() && !QApplication::clipboard()->ownsClipboard()) { + //preserve the entire mimeData set, not just the text + //Note that even when we want to "save" the test, we should keep the whole thing + // this preserves formatting codes and more that apps might need + QMimeData *copy = new QMimeData(); + QStringList fmts = mime->formats(); + for(int i=0; isetData(fmts[i], mime->data(fmts[i])); } + ignoreClipboard = true; + QApplication::clipboard()->setMimeData(copy, mode); + ignoreClipboard = false; + //QMetaObject::invokeMethod(this, "storeClipboard", Qt::QueuedConnection, Q_ARG(QString, mime->text()), Q_ARG(QClipboard::Mode, mode)); + } } } -- cgit