From c477d954aeeb88877613a54fd9ed3bbae92bdab6 Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Sun, 17 Apr 2016 20:34:21 +0200 Subject: [PATCH] Move drag icon relative the cursor hotspot position Instead of placing the drag icons top-left corner at the cursors hotspot the drag icon is moved so it will be placed correct relative the cursor hotspot. This will makes the drag feeling more realistic. Change-Id: I8d60ae1b7788accb9034575983417abae4c58c1a Reviewed-by: Giulio Camuffo Reviewed-by: Johan Helsing --- src/plugins/platforms/wayland/qwaylanddnd.cpp | 1 + src/plugins/platforms/wayland/qwaylandwindow.cpp | 5 +++++ src/plugins/platforms/wayland/qwaylandwindow_p.h | 1 + 3 files changed, 7 insertions(+) diff --git a/src/plugins/platforms/wayland/qwaylanddnd.cpp b/src/plugins/platforms/wayland/qwaylanddnd.cpp index a84b749e6aa..b59ac6d704c 100644 --- a/src/plugins/platforms/wayland/qwaylanddnd.cpp +++ b/src/plugins/platforms/wayland/qwaylanddnd.cpp @@ -74,6 +74,7 @@ void QWaylandDrag::startDrag() QBasicDrag::startDrag(); QWaylandWindow *icon = static_cast(shapedPixmapWindow()->handle()); m_display->currentInputDevice()->dataDevice()->startDrag(drag()->mimeData(), icon); + icon->addAttachOffset(-drag()->hotSpot()); } void QWaylandDrag::cancel() diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp index 3146f70b3a8..da067dc9231 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp @@ -905,6 +905,11 @@ void QWaylandWindow::requestUpdate() mUpdateRequested = true; } +void QWaylandWindow::addAttachOffset(const QPoint point) +{ + mOffset += point; +} + } QT_END_NAMESPACE diff --git a/src/plugins/platforms/wayland/qwaylandwindow_p.h b/src/plugins/platforms/wayland/qwaylandwindow_p.h index 57f4657bb16..f36f0833ba9 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow_p.h +++ b/src/plugins/platforms/wayland/qwaylandwindow_p.h @@ -197,6 +197,7 @@ public: bool setKeyboardGrabEnabled(bool) Q_DECL_OVERRIDE { return false; } void propagateSizeHints() Q_DECL_OVERRIDE { } + void addAttachOffset(const QPoint point); void requestUpdate() Q_DECL_OVERRIDE;