18
18
#define QTMIR_CLIPBOARD_H
20
20
#include <qpa/qplatformclipboard.h>
23
#include <QScopedPointer>
33
class QDBusPendingCallWatcher;
25
class DBusClipboard : public QObject {
27
Q_CLASSINFO("D-Bus Interface", "com.canonical.QtMir.Clipboard")
29
DBusClipboard(QObject *parent = nullptr);
30
virtual ~DBusClipboard() {}
32
void setContents(QByteArray contents);
33
const QByteArray &contents() const { return m_contents; }
35
static const int maxContentsSize = 4 * 1024 * 1024; // 4 Mb
37
// To make it testable
38
static bool skipDBusRegistration;
41
Q_SCRIPTABLE void ContentsChanged(const QByteArray &contents);
42
void contentsChangedRemotely();
45
Q_SCRIPTABLE QByteArray GetContents() const;
46
Q_SCRIPTABLE void SetContents(QByteArray contents);
49
void performDBusRegistration();
50
bool setContentsHelper(QByteArray newContents);
52
// Contains a serialized QMimeData
53
// Serialization and deserialization is done by the QPlatformClipboard
55
QByteArray m_contents;
58
37
class Clipboard : public QObject, public QPlatformClipboard
62
Clipboard(QObject *parent = nullptr);
63
virtual ~Clipboard() {}
65
QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) override;
66
void setMimeData(QMimeData *data, QClipboard::Mode mode) override;
68
void setupDBusService();
71
void setMimeDataWithDBusClibpboardContents();
44
// QPlatformClipboard methods.
45
QMimeData* mimeData(QClipboard::Mode mode = QClipboard::Clipboard) override;
46
void setMimeData(QMimeData* data, QClipboard::Mode mode = QClipboard::Clipboard) override;
47
bool supportsMode(QClipboard::Mode mode) const override;
48
bool ownsMode(QClipboard::Mode mode) const override;
75
DBusClipboard *m_dbusClipboard;
51
void updateMimeData();
52
void requestMimeData();
54
QScopedPointer<QMimeData> m_mimeData;
57
OutdatedClipboard, // Our mimeData is outdated, need to fetch latest from ContentHub
58
SyncingClipboard, // Our mimeData is outdated and we are waiting for ContentHub to reply with the latest paste
59
SyncedClipboard // Our mimeData is in sync with what ContentHub has
60
} m_clipboardState{OutdatedClipboard};
62
com::ubuntu::content::Hub *m_contentHub;
64
QDBusPendingCallWatcher *m_pasteReply{nullptr};
78
// NB: Copied from qtubuntu. Must be kept in sync with the original version!
79
// Best thing would be to share this code somehow, but not bothering with it right now
80
// as the clipboard will move to content-hub at some point.
81
QByteArray serializeMimeData(QMimeData *mimeData);
82
QMimeData *deserializeMimeData(const QByteArray &serializedMimeData);
84
67
} // namespace qtmir
86
69
#endif // QTMIR_CLIPBOARD_H