diff options
author | Gatis Paeglis <gatis.paeglis@nokia.com> | 2012-08-06 15:31:11 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-10-02 13:22:49 +0200 |
commit | a5e3e9eaf16e4b146659f4f5b9227fb2435ee8f2 (patch) | |
tree | bc6a38e2b67fab17f5ee22bc83467eff1a1356a8 /src/plugins/platforms/xcb/qxcbclipboard.cpp | |
parent | a1915fbb52b1fd73fd2aae1cb2c170a582379dcd (diff) |
Don't let mimeData return 0.
Fixes bug introduced in SHA e247e2810 (QTBUG-26709).
Change-Id: I9aa80239675b2d564d08a019ca267a9aa814074e
Reviewed-by: David Faure <faure@kde.org>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Diffstat (limited to 'src/plugins/platforms/xcb/qxcbclipboard.cpp')
-rw-r--r-- | src/plugins/platforms/xcb/qxcbclipboard.cpp | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/src/plugins/platforms/xcb/qxcbclipboard.cpp b/src/plugins/platforms/xcb/qxcbclipboard.cpp index 1fe6732db1..3a9eaefa62 100644 --- a/src/plugins/platforms/xcb/qxcbclipboard.cpp +++ b/src/plugins/platforms/xcb/qxcbclipboard.cpp @@ -81,12 +81,20 @@ public: } } - void reset() { formatList.clear(); } + void reset() + { + formatList.clear(); + } + + bool isEmpty() const + { + return m_clipboard->getSelectionOwner(modeAtom) == XCB_NONE; + } protected: QStringList formats_sys() const { - if (empty()) + if (isEmpty()) return QStringList(); if (!formatList.count()) { @@ -122,7 +130,7 @@ protected: QVariant retrieveData_sys(const QString &fmt, QVariant::Type requestedType) const { - if (fmt.isEmpty() || empty()) + if (fmt.isEmpty() || isEmpty()) return QByteArray(); (void)formats(); // trigger update of format list @@ -142,11 +150,6 @@ protected: return mimeConvertToFormat(m_clipboard->connection(), fmtatom, m_clipboard->getDataInFormat(modeAtom, fmtatom), fmt, requestedType, encoding); } private: - bool empty() const - { - return m_clipboard->getSelectionOwner(modeAtom) == XCB_NONE; - } - xcb_atom_t modeAtom; QXcbClipboard *m_clipboard; @@ -259,9 +262,6 @@ QMimeData * QXcbClipboard::mimeData(QClipboard::Mode mode) return 0; xcb_window_t clipboardOwner = getSelectionOwner(atomForMode(mode)); - if (clipboardOwner == XCB_NONE) - return 0; - if (clipboardOwner == owner()) { return m_clientClipboard[mode]; } else { @@ -274,7 +274,20 @@ QMimeData * QXcbClipboard::mimeData(QClipboard::Mode mode) void QXcbClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) { - if ((mode > QClipboard::Selection) || (mimeData(mode) == data)) + if (mode > QClipboard::Selection) + return; + + QXcbClipboardMime *xClipboard = 0; + // verify if there is data to be cleared on global X Clipboard. + if (!data) { + xClipboard = qobject_cast<QXcbClipboardMime *>(mimeData(mode)); + if (xClipboard) { + if (xClipboard->isEmpty()) + return; + } + } + + if (!xClipboard && (m_clientClipboard[mode] == data)) return; xcb_atom_t modeAtom = atomForMode(mode); |