diff options
author | Johan Klokkhammer Helsing <johan.helsing@qt.io> | 2016-06-02 15:54:15 +0200 |
---|---|---|
committer | Johan Helsing <johan.helsing@qt.io> | 2016-06-03 10:07:01 +0000 |
commit | 8ef270dacbbb03c5b1eeaabe35e034ce7df96f2f (patch) | |
tree | 19cd0cf4190ff5f22f6d4154a020c011c90d1b2e | |
parent | 4a69820c9bb37b07174cac24d5c7b2ab55d16152 (diff) |
Store and expose origin surface in QWaylandDrag
Change-Id: Ic2bcc88f4ff375019ff7c6fe80ae4ec72205ca2d
Reviewed-by: Paul Olav Tvete <paul.tvete@theqtcompany.com>
-rw-r--r-- | src/compositor/compositor_api/qwaylanddrag.cpp | 7 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylanddrag.h | 1 | ||||
-rw-r--r-- | src/compositor/wayland_wrapper/qwldatadevice.cpp | 9 | ||||
-rw-r--r-- | src/compositor/wayland_wrapper/qwldatadevice_p.h | 2 |
4 files changed, 18 insertions, 1 deletions
diff --git a/src/compositor/compositor_api/qwaylanddrag.cpp b/src/compositor/compositor_api/qwaylanddrag.cpp index cc45c1279..226047969 100644 --- a/src/compositor/compositor_api/qwaylanddrag.cpp +++ b/src/compositor/compositor_api/qwaylanddrag.cpp @@ -81,6 +81,13 @@ QWaylandSurface *QWaylandDrag::icon() const return dataDevice->dragIcon(); } +QWaylandSurface *QWaylandDrag::origin() const +{ + Q_D(const QWaylandDrag); + const QtWayland::DataDevice *dataDevice = d->dataDevice(); + return dataDevice ? dataDevice->dragOrigin() : nullptr; +} + bool QWaylandDrag::visible() const { diff --git a/src/compositor/compositor_api/qwaylanddrag.h b/src/compositor/compositor_api/qwaylanddrag.h index 9338301a7..e114fa6b3 100644 --- a/src/compositor/compositor_api/qwaylanddrag.h +++ b/src/compositor/compositor_api/qwaylanddrag.h @@ -60,6 +60,7 @@ public: explicit QWaylandDrag(QWaylandInputDevice *inputDevice); QWaylandSurface *icon() const; + QWaylandSurface *origin() const; bool visible() const; public Q_SLOTS: diff --git a/src/compositor/wayland_wrapper/qwldatadevice.cpp b/src/compositor/wayland_wrapper/qwldatadevice.cpp index b11bc8f4f..e766d6f5b 100644 --- a/src/compositor/wayland_wrapper/qwldatadevice.cpp +++ b/src/compositor/wayland_wrapper/qwldatadevice.cpp @@ -65,6 +65,7 @@ DataDevice::DataDevice(QWaylandInputDevice *inputDevice) , m_dragFocus(0) , m_dragFocusResource(0) , m_dragIcon(0) + , m_dragOrigin(nullptr) { } @@ -123,6 +124,11 @@ QWaylandSurface *DataDevice::dragIcon() const return m_dragIcon; } +QWaylandSurface *DataDevice::dragOrigin() const +{ + return m_dragOrigin; +} + void DataDevice::sourceDestroyed(DataSource *source) { if (m_selectionSource == source) @@ -148,6 +154,7 @@ void DataDevice::drop() } else { m_dragDataSource->cancel(); } + m_dragOrigin = nullptr; } void DataDevice::cancelDrag() @@ -159,12 +166,12 @@ void DataDevice::data_device_start_drag(Resource *resource, struct ::wl_resource { m_dragClient = resource->client(); m_dragDataSource = source ? DataSource::fromResource(source) : 0; + m_dragOrigin = QWaylandSurface::fromResource(origin); m_dragIcon = icon ? QWaylandSurface::fromResource(icon) : 0; Q_EMIT m_inputDevice->drag()->iconChanged(); Q_EMIT m_inputDevice->drag()->dragStarted(); Q_UNUSED(serial); - Q_UNUSED(origin); //### need to verify that we have an implicit grab with this serial } diff --git a/src/compositor/wayland_wrapper/qwldatadevice_p.h b/src/compositor/wayland_wrapper/qwldatadevice_p.h index 7359f3084..62d6021f7 100644 --- a/src/compositor/wayland_wrapper/qwldatadevice_p.h +++ b/src/compositor/wayland_wrapper/qwldatadevice_p.h @@ -70,6 +70,7 @@ public: void setDragFocus(QWaylandSurface *focus, const QPointF &localPosition); QWaylandSurface *dragIcon() const; + QWaylandSurface *dragOrigin() const; void sourceDestroyed(DataSource *source); @@ -94,6 +95,7 @@ private: Resource *m_dragFocusResource; QWaylandSurface *m_dragIcon; + QWaylandSurface *m_dragOrigin; }; } |