summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/mirclient/qmirclientclipboard.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2016-01-21 08:17:21 +0100
committerLiang Qi <liang.qi@theqtcompany.com>2016-01-21 08:17:21 +0100
commit158a3a4159bdc5a49caecd63e021dacbc06cf23c (patch)
treec3ed9aee6cabd46e5e8615b3815b92d32857c4da /src/plugins/platforms/mirclient/qmirclientclipboard.cpp
parent26ece94a68fb5ae680c5639716b06c4e1ae979a8 (diff)
parent7b2fb038ae4b8b9231ae989ad309b6eca107a858 (diff)
Merge remote-tracking branch 'origin/5.6' into dev
Conflicts: src/corelib/io/qiodevice_p.h src/corelib/kernel/qvariant_p.h src/corelib/tools/qsimd.cpp src/gui/kernel/qguiapplication.cpp tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp Change-Id: I742a093cbb231b282b43e463ec67173e0d29f57a
Diffstat (limited to 'src/plugins/platforms/mirclient/qmirclientclipboard.cpp')
-rw-r--r--src/plugins/platforms/mirclient/qmirclientclipboard.cpp51
1 files changed, 30 insertions, 21 deletions
diff --git a/src/plugins/platforms/mirclient/qmirclientclipboard.cpp b/src/plugins/platforms/mirclient/qmirclientclipboard.cpp
index 4494847b54..4cb2b5f740 100644
--- a/src/plugins/platforms/mirclient/qmirclientclipboard.cpp
+++ b/src/plugins/platforms/mirclient/qmirclientclipboard.cpp
@@ -87,12 +87,12 @@ void QMirClientClipboard::requestDBusClipboardContents()
if (!mPendingGetContentsCall.isNull())
return;
- QDBusPendingCall pendingCall = mDBusClipboard->asyncCall("GetContents");
+ QDBusPendingCall pendingCall = mDBusClipboard->asyncCall(QStringLiteral("GetContents"));
mPendingGetContentsCall = new QDBusPendingCallWatcher(pendingCall, this);
- QObject::connect(mPendingGetContentsCall.data(), SIGNAL(finished(QDBusPendingCallWatcher*)),
- this, SLOT(onDBusClipboardGetContentsFinished(QDBusPendingCallWatcher*)));
+ QObject::connect(mPendingGetContentsCall.data(), &QDBusPendingCallWatcher::finished,
+ this, &QMirClientClipboard::onDBusClipboardGetContentsFinished);
}
void QMirClientClipboard::onDBusClipboardGetContentsFinished(QDBusPendingCallWatcher* call)
@@ -143,17 +143,17 @@ void QMirClientClipboard::setupDBus()
QDBusConnection dbusConnection = QDBusConnection::sessionBus();
bool ok = dbusConnection.connect(
- "com.canonical.QtMir",
- "/com/canonical/QtMir/Clipboard",
- "com.canonical.QtMir.Clipboard",
- "ContentsChanged",
+ QStringLiteral("com.canonical.QtMir"),
+ QStringLiteral("/com/canonical/QtMir/Clipboard"),
+ QStringLiteral("com.canonical.QtMir.Clipboard"),
+ QStringLiteral("ContentsChanged"),
this, SLOT(updateMimeData(QByteArray)));
if (Q_UNLIKELY(!ok))
qCritical("QMirClientClipboard - Failed to connect to ContentsChanged signal form the D-Bus system clipboard.");
- mDBusClipboard = new QDBusInterface("com.canonical.QtMir",
- "/com/canonical/QtMir/Clipboard",
- "com.canonical.QtMir.Clipboard",
+ mDBusClipboard = new QDBusInterface(QStringLiteral("com.canonical.QtMir"),
+ QStringLiteral("/com/canonical/QtMir/Clipboard"),
+ QStringLiteral("com.canonical.QtMir.Clipboard"),
dbusConnection);
mDBusSetupDone = true;
@@ -161,6 +161,8 @@ void QMirClientClipboard::setupDBus()
QByteArray QMirClientClipboard::serializeMimeData(QMimeData *mimeData) const
{
+ Q_ASSERT(mimeData != nullptr);
+
const QStringList formats = mimeData->formats();
const int formatCount = qMin(formats.size(), maxFormatsCount);
const int headerSize = sizeof(int) + (formatCount * 4 * sizeof(int));
@@ -179,12 +181,13 @@ QByteArray QMirClientClipboard::serializeMimeData(QMimeData *mimeData) const
int offset = headerSize;
header[0] = formatCount;
for (int i = 0; i < formatCount; i++) {
+ const QByteArray data = mimeData->data(formats[i]);
const int formatOffset = offset;
const int formatSize = formats[i].size();
const int dataOffset = offset + formatSize;
- const int dataSize = mimeData->data(formats[i]).size();
+ const int dataSize = data.size();
memcpy(&buffer[formatOffset], formats[i].toLatin1().data(), formatSize);
- memcpy(&buffer[dataOffset], mimeData->data(formats[i]).data(), dataSize);
+ memcpy(&buffer[dataOffset], data.data(), dataSize);
header[i*4+1] = formatOffset;
header[i*4+2] = formatSize;
header[i*4+3] = dataOffset;
@@ -264,13 +267,15 @@ void QMirClientClipboard::setMimeData(QMimeData* mimeData, QClipboard::Mode mode
delete mPendingGetContentsCall.data();
}
- QByteArray serializedMimeData = serializeMimeData(mimeData);
- if (!serializedMimeData.isEmpty()) {
- setDBusClipboardContents(serializedMimeData);
- }
+ if (mimeData != nullptr) {
+ QByteArray serializedMimeData = serializeMimeData(mimeData);
+ if (!serializedMimeData.isEmpty()) {
+ setDBusClipboardContents(serializedMimeData);
+ }
- mMimeData = mimeData;
- emitChanged(QClipboard::Clipboard);
+ mMimeData = mimeData;
+ emitChanged(QClipboard::Clipboard);
+ }
}
bool QMirClientClipboard::supportsMode(QClipboard::Mode mode) const
@@ -286,6 +291,10 @@ bool QMirClientClipboard::ownsMode(QClipboard::Mode mode) const
void QMirClientClipboard::setDBusClipboardContents(const QByteArray &clipboardContents)
{
+ if (!mDBusSetupDone) {
+ setupDBus();
+ }
+
if (!mPendingSetContentsCall.isNull()) {
// Ignore any previous set call as we are going to overwrite it anyway
QObject::disconnect(mPendingSetContentsCall.data(), 0, this, 0);
@@ -295,10 +304,10 @@ void QMirClientClipboard::setDBusClipboardContents(const QByteArray &clipboardCo
delete mPendingSetContentsCall.data();
}
- QDBusPendingCall pendingCall = mDBusClipboard->asyncCall("SetContents", clipboardContents);
+ QDBusPendingCall pendingCall = mDBusClipboard->asyncCall(QStringLiteral("SetContents"), clipboardContents);
mPendingSetContentsCall = new QDBusPendingCallWatcher(pendingCall, this);
- QObject::connect(mPendingSetContentsCall.data(), SIGNAL(finished(QDBusPendingCallWatcher*)),
- this, SLOT(onDBusClipboardSetContentsFinished(QDBusPendingCallWatcher*)));
+ QObject::connect(mPendingSetContentsCall.data(), &QDBusPendingCallWatcher::finished,
+ this, &QMirClientClipboard::onDBusClipboardSetContentsFinished);
}