[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