summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGatis Paeglis <gatis.paeglis@nokia.com>2012-08-06 15:31:11 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-10-02 13:22:49 +0200
commita5e3e9eaf16e4b146659f4f5b9227fb2435ee8f2 (patch)
treebc6a38e2b67fab17f5ee22bc83467eff1a1356a8 /src
parenta1915fbb52b1fd73fd2aae1cb2c170a582379dcd (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')
-rw-r--r--src/plugins/platforms/xcb/qxcbclipboard.cpp37
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);