aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Moore <ken@ixsystems.com>2018-04-16 09:11:56 -0400
committerGitHub <noreply@github.com>2018-04-16 09:11:56 -0400
commit96429fabec9839770d087ab36d8e51aaa48c1041 (patch)
tree7a039110eff206dd58ac6fec1ef5c959f10242f6
parentSetup lumina-config with window geometry save/restore. (diff)
parentlumina-desktop: add basic clipboard support (diff)
downloadlumina-96429fabec9839770d087ab36d8e51aaa48c1041.tar.gz
lumina-96429fabec9839770d087ab36d8e51aaa48c1041.tar.bz2
lumina-96429fabec9839770d087ab36d8e51aaa48c1041.zip
Merge pull request #574 from rodlie/lumina-desktop_add_clipboard_support
lumina-desktop: add basic clipboard support
-rw-r--r--src-qt5/core/lumina-desktop/LSession.cpp20
-rw-r--r--src-qt5/core/lumina-desktop/LSession.h7
2 files changed, 27 insertions, 0 deletions
diff --git a/src-qt5/core/lumina-desktop/LSession.cpp b/src-qt5/core/lumina-desktop/LSession.cpp
index c1f49fc3..9ea377ba 100644
--- a/src-qt5/core/lumina-desktop/LSession.cpp
+++ b/src-qt5/core/lumina-desktop/LSession.cpp
@@ -10,6 +10,7 @@
#include <QTime>
#include <QScreen>
#include <QtConcurrent>
+#include <QMimeData>
#include "LXcbEventFilter.h"
#include "BootSplash.h"
@@ -72,6 +73,11 @@ LSession::LSession(int &argc, char ** argv) : LSingleApplication(argc, argv, "lu
connect(this, SIGNAL(screenAdded(QScreen*)), this, SLOT(screensChanged()) );
connect(this, SIGNAL(screenRemoved(QScreen*)), this, SLOT(screensChanged()) );
connect(this, SIGNAL(primaryScreenChanged(QScreen*)), this, SLOT(screensChanged()) );
+
+ // Clipboard
+ ignoreClipboard = false;
+ qRegisterMetaType<QClipboard::Mode>("QClipboard::Mode");
+ connect(QApplication::clipboard(), SIGNAL(changed(QClipboard::Mode)), this, SLOT(handleClipboard(QClipboard::Mode)));
} //end check for primary process
}
@@ -587,6 +593,20 @@ void LSession::SessionEnding(){
stopSystemTray(); //just in case it was not stopped properly earlier
}
+void LSession::handleClipboard(QClipboard::Mode mode){
+ if (!ignoreClipboard) {
+ 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)); }
+ }
+}
+
+void LSession::storeClipboard(QString text, QClipboard::Mode mode){
+ ignoreClipboard = true;
+ QApplication::clipboard()->setText(text, mode);
+ ignoreClipboard = false;
+}
+
//===============
// SYSTEM ACCESS
//===============
diff --git a/src-qt5/core/lumina-desktop/LSession.h b/src-qt5/core/lumina-desktop/LSession.h
index a25f3c15..824eede7 100644
--- a/src-qt5/core/lumina-desktop/LSession.h
+++ b/src-qt5/core/lumina-desktop/LSession.h
@@ -21,6 +21,7 @@
#include <QMediaPlayer>
#include <QThread>
#include <QUrl>
+#include <QClipboard>
#include "Globals.h"
#include "AppMenu.h"
@@ -141,6 +142,8 @@ private:
int VersionStringToNumber(QString version);
+ bool ignoreClipboard; // flag for (handle/store)Clipboard
+
public slots:
void StartLogout();
void StartShutdown(bool skipupdates = false);
@@ -170,6 +173,10 @@ private slots:
void SessionEnding();
+ // Clipboard
+ void handleClipboard(QClipboard::Mode mode);
+ void storeClipboard(QString text, QClipboard::Mode mode);
+
signals:
//System Tray Signals
void VisualTrayAvailable(); //new Visual Tray Plugin can be registered
bgstack15