From d9cef40ea3948e5d74120fb07909332503dc485b Mon Sep 17 00:00:00 2001 From: Giulio Camuffo Date: Mon, 30 May 2016 15:31:30 +0300 Subject: client: Always accept the DnD data offer Weston stopped sending the wl_data_device.drop event if the data offer was not accepted, which was the case when it was coming from the same client that was receiving the offer. So now always accept the offer even if we will bypass the offer when retrieving the data. Change-Id: If825f4dbc962a7812e379f36a42ceabe3eb3096f Reviewed-by: Johan Helsing Reviewed-by: Paul Olav Tvete --- src/client/qwaylanddatadevice.cpp | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) (limited to 'src/client/qwaylanddatadevice.cpp') diff --git a/src/client/qwaylanddatadevice.cpp b/src/client/qwaylanddatadevice.cpp index 3276348e9..d1c755e37 100644 --- a/src/client/qwaylanddatadevice.cpp +++ b/src/client/qwaylanddatadevice.cpp @@ -155,31 +155,29 @@ void QWaylandDataDevice::data_device_enter(uint32_t serial, wl_surface *surface, m_dragWindow = QWaylandWindow::fromWlSurface(surface)->window(); m_dragPoint = QPoint(wl_fixed_to_int(x), wl_fixed_to_int(y)); - QDrag *drag = static_cast(QGuiApplicationPrivate::platformIntegration()->drag())->currentDrag(); - QMimeData *dragData = Q_NULLPTR; Qt::DropActions supportedActions; + + m_dragOffer.reset(static_cast(wl_data_offer_get_user_data(id))); + QDrag *drag = static_cast(QGuiApplicationPrivate::platformIntegration()->drag())->currentDrag(); if (drag) { dragData = drag->mimeData(); supportedActions = drag->supportedActions(); - } else { - m_dragOffer.reset(static_cast(wl_data_offer_get_user_data(id))); - if (m_dragOffer) { - dragData = m_dragOffer->mimeData(); - supportedActions = Qt::CopyAction | Qt::MoveAction | Qt::LinkAction; - } + } else if (m_dragOffer) { + dragData = m_dragOffer->mimeData(); + supportedActions = Qt::CopyAction | Qt::MoveAction | Qt::LinkAction; } const QPlatformDragQtResponse &response = QWindowSystemInterface::handleDrag(m_dragWindow, dragData, m_dragPoint, supportedActions); if (drag) { static_cast(QGuiApplicationPrivate::platformIntegration()->drag())->setResponse(response); + } + + if (response.isAccepted()) { + wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, m_dragOffer->firstFormat().toUtf8().constData()); } else { - if (response.isAccepted()) { - wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, m_dragOffer->firstFormat().toUtf8().constData()); - } else { - wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, 0); - } + wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, 0); } } @@ -218,12 +216,12 @@ void QWaylandDataDevice::data_device_motion(uint32_t time, wl_fixed_t x, wl_fixe if (drag) { static_cast(QGuiApplicationPrivate::platformIntegration()->drag())->setResponse(response); + } + + if (response.isAccepted()) { + wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, m_dragOffer->firstFormat().toUtf8().constData()); } else { - if (response.isAccepted()) { - wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, m_dragOffer->firstFormat().toUtf8().constData()); - } else { - wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, 0); - } + wl_data_offer_accept(m_dragOffer->object(), m_enterSerial, 0); } } -- cgit v1.2.3