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>
bb10
Gatis Paeglis 2012-08-06 15:31:11 +02:00 committed by The Qt Project
parent a1915fbb52
commit a5e3e9eaf1
1 changed files with 25 additions and 12 deletions

View File

@ -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);