diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/platforms/xcb/qxcbclipboard.cpp | 6 | ||||
-rw-r--r-- | src/plugins/platforms/xcb/qxcbclipboard.h | 2 | ||||
-rw-r--r-- | src/plugins/platforms/xcb/qxcbdrag.cpp | 2 | ||||
-rw-r--r-- | src/plugins/platforms/xcb/qxcbdrag.h | 2 |
4 files changed, 8 insertions, 4 deletions
diff --git a/src/plugins/platforms/xcb/qxcbclipboard.cpp b/src/plugins/platforms/xcb/qxcbclipboard.cpp index 3a9eaefa62..f021ab8b4a 100644 --- a/src/plugins/platforms/xcb/qxcbclipboard.cpp +++ b/src/plugins/platforms/xcb/qxcbclipboard.cpp @@ -846,13 +846,15 @@ QByteArray QXcbClipboard::getDataInFormat(xcb_atom_t modeAtom, xcb_atom_t fmtAto return getSelection(modeAtom, fmtAtom, atom(QXcbAtom::_QT_SELECTION)); } -QByteArray QXcbClipboard::getSelection(xcb_atom_t selection, xcb_atom_t target, xcb_atom_t property) +QByteArray QXcbClipboard::getSelection(xcb_atom_t selection, xcb_atom_t target, xcb_atom_t property, xcb_timestamp_t time) { QByteArray buf; xcb_window_t win = requestor(); + if (time == 0) time = connection()->time(); + xcb_delete_property(xcb_connection(), win, property); - xcb_convert_selection(xcb_connection(), win, selection, target, property, connection()->time()); + xcb_convert_selection(xcb_connection(), win, selection, target, property, time); connection()->sync(); diff --git a/src/plugins/platforms/xcb/qxcbclipboard.h b/src/plugins/platforms/xcb/qxcbclipboard.h index 31d99c758d..709ea3b953 100644 --- a/src/plugins/platforms/xcb/qxcbclipboard.h +++ b/src/plugins/platforms/xcb/qxcbclipboard.h @@ -84,7 +84,7 @@ public: QByteArray getDataInFormat(xcb_atom_t modeAtom, xcb_atom_t fmtatom); xcb_window_t getSelectionOwner(xcb_atom_t atom) const; - QByteArray getSelection(xcb_atom_t selection, xcb_atom_t target, xcb_atom_t property); + QByteArray getSelection(xcb_atom_t selection, xcb_atom_t target, xcb_atom_t property, xcb_timestamp_t t = 0); private: xcb_generic_event_t *waitForClipboardEvent(xcb_window_t win, int type, int timeout, bool checkManager = false); diff --git a/src/plugins/platforms/xcb/qxcbdrag.cpp b/src/plugins/platforms/xcb/qxcbdrag.cpp index 82a3fc8a83..247b2c991b 100644 --- a/src/plugins/platforms/xcb/qxcbdrag.cpp +++ b/src/plugins/platforms/xcb/qxcbdrag.cpp @@ -1233,7 +1233,7 @@ QVariant QXcbDropData::xdndObtainData(const QByteArray &format, QVariant::Type r return result; // should never happen? xcb_atom_t xdnd_selection = c->atom(QXcbAtom::XdndSelection); - result = c->clipboard()->getSelection(xdnd_selection, a, xdnd_selection); + result = c->clipboard()->getSelection(xdnd_selection, a, xdnd_selection, drag->targetTime()); return mimeConvertToFormat(c, a, result, QLatin1String(format), requestedType, encoding); } diff --git a/src/plugins/platforms/xcb/qxcbdrag.h b/src/plugins/platforms/xcb/qxcbdrag.h index 19b7dd7f96..ef277e7eec 100644 --- a/src/plugins/platforms/xcb/qxcbdrag.h +++ b/src/plugins/platforms/xcb/qxcbdrag.h @@ -98,6 +98,7 @@ public: bool dndEnable(QXcbWindow *win, bool on); void updatePixmap(); + xcb_timestamp_t targetTime() { return target_time; } protected: void timerEvent(QTimerEvent* e); @@ -128,6 +129,7 @@ private: enum { xdnd_max_type = 100 }; QList<xcb_atom_t> xdnd_types; + // timestamp from XdndPosition and XdndDroptime for retrieving the data xcb_timestamp_t target_time; xcb_timestamp_t source_time; |