Fix deadlock when starting a drag

With commit c55a36cb9015cf1eebd49eaa5b1b4f4ec9b28451 in qtbase the
QSimpleDrag code changed in a way that caused a deadlock due to
drawing a window without a role. However, thanks to that we can
now remove that start/cancel hack and simplify the code.

Change-Id: Icba6e7c9c4927855e48fb21632db1a10332c4ffb
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
This commit is contained in:
Giulio Camuffo 2015-10-29 16:35:27 +02:00
parent fc78f8239e
commit face687a62

View File

@ -65,21 +65,9 @@ QMimeData * QWaylandDrag::platformDropData()
void QWaylandDrag::startDrag()
{
bool cancel = false;
if (!shapedPixmapWindow()) {
QBasicDrag::startDrag();
// Don't call cancel() here, since that will hide 'shapedPixmapWindow()', and
// QWaylandWindow::setVisible(false) will flush the window system queue,
// ending up trying to render the window, which doesn't have a role yet,
// and so blocking waiting for a frame callback.
cancel = true;
}
QBasicDrag::startDrag();
QWaylandWindow *icon = static_cast<QWaylandWindow *>(shapedPixmapWindow()->handle());
m_display->currentInputDevice()->dataDevice()->startDrag(drag()->mimeData(), icon);
if (cancel)
QBasicDrag::cancel();
QBasicDrag::startDrag();
}
void QWaylandDrag::cancel()