void QWindowsOleDropTarget::handleDrag(QWindow *window, DWORD grfKeyState, const QPoint &point, LPDWORD pdwEffect) { Q_ASSERT(window); m_lastPoint = point; m_lastKeyState = grfKeyState; QWindowsDrag *windowsDrag = QWindowsDrag::instance(); const Qt::DropActions actions = translateToQDragDropActions(*pdwEffect); QGuiApplicationPrivate::modifier_buttons = toQtKeyboardModifiers(grfKeyState); QGuiApplicationPrivate::mouse_buttons = toQtMouseButtons(grfKeyState); const QPlatformDragQtResponse response = QWindowSystemInterface::handleDrag(window, windowsDrag->dropData(), m_lastPoint, actions); m_answerRect = response.answerRect(); const Qt::DropAction action = response.acceptedAction(); if (response.isAccepted()) { m_chosenEffect = translateToWinDragEffects(action); } else { m_chosenEffect = DROPEFFECT_NONE; } *pdwEffect = m_chosenEffect; qCDebug(lcQpaMime) << __FUNCTION__ << m_window << windowsDrag->dropData() << " supported actions=" << actions << " mods=" << QGuiApplicationPrivate::modifier_buttons << " mouse=" << QGuiApplicationPrivate::mouse_buttons << " accepted: " << response.isAccepted() << action << m_answerRect << " effect" << *pdwEffect; }
void QWaylandDataDevice::data_device_motion(uint32_t time, wl_fixed_t x, wl_fixed_t y) { Q_UNUSED(time); QDrag *drag = static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag())->currentDrag(); if (!drag && !m_dragOffer) return; m_dragPoint = QPoint(wl_fixed_to_int(x), wl_fixed_to_int(y)); QMimeData *dragData; Qt::DropActions supportedActions; if (drag) { dragData = drag->mimeData(); supportedActions = drag->supportedActions(); } else { dragData = m_dragOffer->mimeData(); supportedActions = Qt::CopyAction | Qt::MoveAction | Qt::LinkAction; } QPlatformDragQtResponse response = QWindowSystemInterface::handleDrag(m_dragWindow, dragData, m_dragPoint, supportedActions); if (drag) { static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag())->setResponse(response); } 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); } } }
void QSimpleDrag::move(const QMouseEvent *me) { QBasicDrag::move(me); QWindow *window = topLevelAt(me->globalPos()); if (!window) return; const QPoint pos = me->globalPos() - window->geometry().topLeft(); const QPlatformDragQtResponse qt_response = QWindowSystemInterface::handleDrag(window, drag()->mimeData(), pos, drag()->supportedActions()); updateCursor(qt_response.acceptedAction()); setCanDrop(qt_response.isAccepted()); }
void QSimpleDrag::startDrag() { QBasicDrag::startDrag(); m_current_window = topLevelAt(QCursor::pos()); if (m_current_window) { QPlatformDragQtResponse response = QWindowSystemInterface::handleDrag(m_current_window, drag()->mimeData(), QCursor::pos(), drag()->supportedActions()); setCanDrop(response.isAccepted()); updateCursor(response.acceptedAction()); } else { setCanDrop(false); updateCursor(Qt::IgnoreAction); } setExecutedDropAction(Qt::IgnoreAction); }
void QSimpleDrag::move(const QPoint &globalPos) { //### not high-DPI aware moveShapedPixmapWindow(globalPos); QWindow *window = topLevelAt(globalPos); if (!window) return; const QPoint pos = globalPos - window->geometry().topLeft(); const QPlatformDragQtResponse qt_response = QWindowSystemInterface::handleDrag(window, drag()->mimeData(), pos, drag()->supportedActions()); updateCursor(qt_response.acceptedAction()); setCanDrop(qt_response.isAccepted()); }
void QWaylandDrag::setResponse(const QPlatformDragQtResponse &response) { setCanDrop(response.isAccepted()); if (canDrop()) { updateCursor(defaultAction(drag()->supportedActions(), m_display->currentInputDevice()->modifiers())); } else { updateCursor(Qt::IgnoreAction); } }