13#include <QtGui/private/qshapedpixmapdndwindow_p.h>
18#if QT_CONFIG(draganddrop)
19namespace QtWaylandClient {
21QWaylandDrag::QWaylandDrag(QWaylandDisplay *display)
26QWaylandDrag::~QWaylandDrag()
30void QWaylandDrag::startDrag()
35 m_display->currentInputDevice()->handleStartDrag();
37 QBasicDrag::startDrag();
38 QWaylandWindow *icon =
static_cast<QWaylandWindow *>(shapedPixmapWindow()->handle());
39 if (m_display->currentInputDevice()->dataDevice()->startDrag(drag()->mimeData(), drag()->supportedActions(), icon)) {
40 icon->addAttachOffset(-drag()->hotSpot());
44 QMetaObject::invokeMethod(
this, [
this](){ cancelDrag(); }, Qt::QueuedConnection);
48void QWaylandDrag::cancel()
52 m_display->currentInputDevice()->dataDevice()->cancelDrag();
55 drag()->deleteLater();
58void QWaylandDrag::move(
const QPoint &globalPos, Qt::MouseButtons b, Qt::KeyboardModifiers mods)
66void QWaylandDrag::drop(
const QPoint &globalPos, Qt::MouseButtons b, Qt::KeyboardModifiers mods)
68 QBasicDrag::drop(globalPos, b, mods);
71void QWaylandDrag::endDrag()
73 m_display->currentInputDevice()->handleEndDrag();
76void QWaylandDrag::setResponse(
bool accepted)
79 Qt::DropAction action = defaultAction(drag()->supportedActions(), m_display->currentInputDevice()->modifiers());
80 setResponse(QPlatformDropQtResponse(accepted, action));
83void QWaylandDrag::setResponse(
const QPlatformDropQtResponse &response)
85 setCanDrop(response.isAccepted());
88 updateCursor(response.acceptedAction());
90 updateCursor(Qt::IgnoreAction);
94void QWaylandDrag::setDropResponse(
const QPlatformDropQtResponse &response)
96 setExecutedDropAction(response.isAccepted() ? response.acceptedAction() : Qt::IgnoreAction);
99void QWaylandDrag::finishDrag()
101 QKeyEvent event(QEvent::KeyPress, Qt::Key_Escape, Qt::NoModifier);
102 eventFilter(shapedPixmapWindow(), &event);
105 drag()->deleteLater();
108bool QWaylandDrag::ownsDragObject()
const
Combined button and popup list for selecting options.