diff --git a/qtbase/src/plugins/platforms/cocoa/qcocoadrag.h b/qtbase/src/plugins/platforms/cocoa/qcocoadrag.h index dedf8a7fd9c..1d51b122328 100644 --- a/qtbase/src/plugins/platforms/cocoa/qcocoadrag.h +++ b/qtbase/src/plugins/platforms/cocoa/qcocoadrag.h @@ -30,12 +30,17 @@ public: Qt::DropAction defaultAction(Qt::DropActions possibleActions, Qt::KeyboardModifiers modifiers) const override; + + Qt::MouseButton mouseUpButton() const; /** * to meet NSView dragImage:at guarantees, we need to record the original * event and view when handling an event in QNSView */ void setLastMouseEvent(NSEvent *event, NSView *view); + + // Button which should be set for the finishing up event + void setMouseUpButton(Qt::MouseButton button); void setAcceptedAction(Qt::DropAction act); void exitDragLoop(); @@ -45,6 +50,7 @@ private: NSView *m_lastView; Qt::DropAction m_executed_drop_action; QEventLoop *m_internalDragLoop = nullptr; + Qt::MouseButton m_mouseUpButton = Qt::NoButton; bool maybeDragMultipleItems(); diff --git a/qtbase/src/plugins/platforms/cocoa/qcocoadrag.mm b/qtbase/src/plugins/platforms/cocoa/qcocoadrag.mm index a8c0392f8ba..c268c0b8117 100644 --- a/qtbase/src/plugins/platforms/cocoa/qcocoadrag.mm +++ b/qtbase/src/plugins/platforms/cocoa/qcocoadrag.mm @@ -38,6 +38,16 @@ void QCocoaDrag::setLastMouseEvent(NSEvent *event, NSView *view) m_lastView = view; } +Qt::MouseButton QCocoaDrag::mouseUpButton() const +{ + return m_mouseUpButton; +} + +void QCocoaDrag::setMouseUpButton(Qt::MouseButton button) +{ + m_mouseUpButton = button; +} + QMimeData *QCocoaDrag::dragMimeData() { if (m_drag) @@ -92,7 +102,6 @@ Qt::DropAction QCocoaDrag::defaultAction(Qt::DropActions possibleActions, return default_action; } - Qt::DropAction QCocoaDrag::drag(QDrag *o) { m_drag = o; diff --git a/qtbase/src/plugins/platforms/cocoa/qnsview_dragging.mm b/qtbase/src/plugins/platforms/cocoa/qnsview_dragging.mm index f5bb25c300c..8a92b9b68ea 100644 --- a/qtbase/src/plugins/platforms/cocoa/qnsview_dragging.mm +++ b/qtbase/src/plugins/platforms/cocoa/qnsview_dragging.mm @@ -286,7 +286,7 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin mapWindowCoordinates(m_platformWindow->window(), target, qtWindowPoint), qtScreenPoint, m_buttons, - Qt::NoButton, + nativeDrag->mouseUpButton(), QEvent::MouseButtonRelease, modifiers); diff --git a/qtbase/src/plugins/platforms/cocoa/qnsview_mouse.mm b/qtbase/src/plugins/platforms/cocoa/qnsview_mouse.mm index 63b180111b4..a3882483d70 100644 --- a/qtbase/src/plugins/platforms/cocoa/qnsview_mouse.mm +++ b/qtbase/src/plugins/platforms/cocoa/qnsview_mouse.mm @@ -124,6 +124,8 @@ static const QPointingDevice *pointingDeviceFor(qint64 deviceID) if (button == Qt::LeftButton && m_sendUpAsRightButton) button = Qt::RightButton; const auto eventType = cocoaEvent2QtMouseEvent(theEvent); + if (eventType == QEvent::MouseButtonPress) + nativeDrag->setMouseUpButton(button); const QPointingDevice *device = pointingDeviceFor(theEvent.deviceID); Q_ASSERT(device);