[SCM] kdeconnect packaging branch, master, updated. debian/0.9g-1-1183-g9d69498

Maximiliano Curia maxy at moszumanska.debian.org
Fri Oct 14 14:30:03 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/kdeconnect.git;a=commitdiff;h=c19f26a

The following commit has been merged in the master branch:
commit c19f26a95dc7380353b559f2ddced70ab3e9d494
Author: Albert Vaca <albertvaka at gmail.com>
Date:   Fri Sep 9 16:18:56 2016 +0200

    Fixed clipboard propagation loop bug
    
    BUG: 362596
---
 plugins/clipboard/CMakeLists.txt                   |  1 +
 .../clipboardlistener.cpp}                         | 37 +++++++++--------
 .../{clipboardplugin.h => clipboardlistener.h}     | 48 +++++++++++++---------
 plugins/clipboard/clipboardplugin.cpp              | 27 +++---------
 plugins/clipboard/clipboardplugin.h                |  5 +--
 5 files changed, 56 insertions(+), 62 deletions(-)

diff --git a/plugins/clipboard/CMakeLists.txt b/plugins/clipboard/CMakeLists.txt
index 4e6d2ab..3481a9a 100644
--- a/plugins/clipboard/CMakeLists.txt
+++ b/plugins/clipboard/CMakeLists.txt
@@ -1,5 +1,6 @@
 set(kdeconnect_clipboard_SRCS
     clipboardplugin.cpp
+    clipboardlistener.cpp
 )
 
 kdeconnect_add_plugin(kdeconnect_clipboard JSON kdeconnect_clipboard.json SOURCES ${kdeconnect_clipboard_SRCS})
diff --git a/plugins/notifications/notification.cpp b/plugins/clipboard/clipboardlistener.cpp
similarity index 56%
copy from plugins/notifications/notification.cpp
copy to plugins/clipboard/clipboardlistener.cpp
index 3e42f2a..1c23f68 100644
--- a/plugins/notifications/notification.cpp
+++ b/plugins/clipboard/clipboardlistener.cpp
@@ -1,5 +1,5 @@
 /**
- * Copyright 2013 Albert Vaca <albertvaka at gmail.com>
+ * Copyright 2016 Albert Vaca <albertvaka at gmail.com>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -18,29 +18,34 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "notification.h"
+#include "clipboardlistener.h"
 
-#include <QDBusConnection>
-
-Notification::Notification(const NetworkPackage& np, const QString& iconPath, QObject* parent)
-    : QObject(parent)
+ClipboardListener::ClipboardListener() 
+    : clipboard(QGuiApplication::clipboard())
 {
-    mInternalId = np.get<QString>("id");
-    mAppName = np.get<QString>("appName");
-    mTicker = np.get<QString>("ticker");
-    mDismissable = np.get<bool>("isClearable");
-    mIconPath = iconPath;
+    connect(clipboard, &QClipboard::changed, this, &ClipboardListener::updateClipboard);
 }
 
-Notification::~Notification()
+void ClipboardListener::updateClipboard(QClipboard::Mode mode) 
 {
+    if (mode != QClipboard::Clipboard) {
+        return;
+    }
 
+    QString content = clipboard->text();
+
+    if (content == currentContent) {
+        return;
+    }
+    currentContent = content;
+
+    Q_EMIT clipboardChanged(content);
 }
 
-void Notification::dismiss()
+void ClipboardListener::setText(const QString& content)
 {
-    if (mDismissable) {
-        Q_EMIT dismissRequested(mInternalId);
-    }
+    currentContent = content;
+    clipboard->setText(content);
 }
 
+
diff --git a/plugins/clipboard/clipboardplugin.h b/plugins/clipboard/clipboardlistener.h
similarity index 59%
copy from plugins/clipboard/clipboardplugin.h
copy to plugins/clipboard/clipboardlistener.h
index 6d1bc7a..6d5d70e 100644
--- a/plugins/clipboard/clipboardplugin.h
+++ b/plugins/clipboard/clipboardlistener.h
@@ -1,5 +1,5 @@
 /**
- * Copyright 2013 Albert Vaca <albertvaka at gmail.com>
+ * Copyright 2016 Albert Vaca <albertvaka at gmail.com>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -18,35 +18,43 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CLIPBOARDPLUGIN_H
-#define CLIPBOARDPLUGIN_H
+#ifndef CLIPBOARDLISTENER_H
+#define CLIPBOARDLISTENER_H
 
 #include <QObject>
 #include <QClipboard>
-#include <QLoggingCategory>
-#include <core/kdeconnectplugin.h>
+#include <QGuiApplication>
 
-Q_DECLARE_LOGGING_CATEGORY(KDECONNECT_PLUGIN_CLIPBOARD)
-#define PACKAGE_TYPE_CLIPBOARD QLatin1String("kdeconnect.clipboard")
-
-class ClipboardPlugin
-    : public KdeConnectPlugin
+/**
+ * Wrapper around QClipboard, which emits clipboardChanged only when it really changed
+ */
+class ClipboardListener : public QObject 
 {
     Q_OBJECT
 
+private:
+    QString currentContent;
+    QClipboard* clipboard;
+
 public:
-    explicit ClipboardPlugin(QObject *parent, const QVariantList &args);
 
-public Q_SLOTS:
-    bool receivePackage(const NetworkPackage& np) override;
-    void connected() override { }
-    
-private Q_SLOTS:
-    void clipboardChanged(QClipboard::Mode mode);
+    static ClipboardListener* instance() 
+    {
+        static ClipboardListener* me = nullptr;
+        if (!me) {
+            me = new ClipboardListener();
+        }
+        return me;
+    }
 
-private:
-    QString currentContent;
-    QClipboard *clipboard;
+    ClipboardListener();
+
+    void updateClipboard(QClipboard::Mode mode);
+
+    void setText(const QString& content);
+
+Q_SIGNALS:
+    void clipboardChanged(const QString& content);
 };
 
 #endif
diff --git a/plugins/clipboard/clipboardplugin.cpp b/plugins/clipboard/clipboardplugin.cpp
index cdb6591..571167f 100644
--- a/plugins/clipboard/clipboardplugin.cpp
+++ b/plugins/clipboard/clipboardplugin.cpp
@@ -20,8 +20,7 @@
 
 #include "clipboardplugin.h"
 
-#include <QClipboard>
-#include <QGuiApplication>
+#include "clipboardlistener.h"
 
 #include <KPluginFactory>
 
@@ -31,25 +30,13 @@ Q_LOGGING_CATEGORY(KDECONNECT_PLUGIN_CLIPBOARD, "kdeconnect.plugin.clipboard")
 
 ClipboardPlugin::ClipboardPlugin(QObject *parent, const QVariantList &args)
     : KdeConnectPlugin(parent, args)
-    , clipboard(QGuiApplication::clipboard())
 {
-    connect(clipboard, SIGNAL(changed(QClipboard::Mode)), this, SLOT(clipboardChanged(QClipboard::Mode)));
+    connect(ClipboardListener::instance(), &ClipboardListener::clipboardChanged,
+            this, &ClipboardPlugin::propagateClipboard);
 }
 
-void ClipboardPlugin::clipboardChanged(QClipboard::Mode mode)
+void ClipboardPlugin::propagateClipboard(const QString& content)
 {
-    if (mode != QClipboard::Clipboard) {
-        return;
-    }
-
-    QString content = clipboard->text();
-
-    if (content == currentContent) {
-        return;
-    }
-
-    currentContent = content;
-
     NetworkPackage np(PACKAGE_TYPE_CLIPBOARD, {{"content", content}});
     sendPackage(np);
 }
@@ -57,11 +44,7 @@ void ClipboardPlugin::clipboardChanged(QClipboard::Mode mode)
 bool ClipboardPlugin::receivePackage(const NetworkPackage& np)
 {
     QString content = np.get<QString>("content");
-
-    currentContent = content;
-
-    clipboard->setText(content);
-
+    ClipboardListener::instance()->setText(content);
     return true;
 }
 
diff --git a/plugins/clipboard/clipboardplugin.h b/plugins/clipboard/clipboardplugin.h
index 6d1bc7a..22e8348 100644
--- a/plugins/clipboard/clipboardplugin.h
+++ b/plugins/clipboard/clipboardplugin.h
@@ -42,11 +42,8 @@ public Q_SLOTS:
     void connected() override { }
     
 private Q_SLOTS:
-    void clipboardChanged(QClipboard::Mode mode);
+    void propagateClipboard(const QString& content);
 
-private:
-    QString currentContent;
-    QClipboard *clipboard;
 };
 
 #endif

-- 
kdeconnect packaging



More information about the pkg-kde-commits mailing list