diff options
author | Paul Olav Tvete <paul.tvete@theqtcompany.com> | 2015-09-16 12:37:04 +0200 |
---|---|---|
committer | Paul Olav Tvete <paul.tvete@theqtcompany.com> | 2015-09-17 12:59:32 +0000 |
commit | dca52a541eaf61269c8e746555380a7aef942b1e (patch) | |
tree | a19d253ad35f0e00ea77afa799fbf0483d96aa10 /src/compositor/compositor_api | |
parent | 69194916afd652d0282b23b0db06059fe30fd2ae (diff) |
New API for drag and drop
Let the compositor implementation keep all the GUI state.
Change-Id: I73a865fa3407340276d6765e10378b8e23a76fe2
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
Diffstat (limited to 'src/compositor/compositor_api')
-rw-r--r-- | src/compositor/compositor_api/qwaylandcompositor.cpp | 24 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylandcompositor.h | 7 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylanddrag.cpp | 49 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylanddrag.h | 17 |
4 files changed, 52 insertions, 45 deletions
diff --git a/src/compositor/compositor_api/qwaylandcompositor.cpp b/src/compositor/compositor_api/qwaylandcompositor.cpp index 64abb6fba..104f85f2f 100644 --- a/src/compositor/compositor_api/qwaylandcompositor.cpp +++ b/src/compositor/compositor_api/qwaylandcompositor.cpp @@ -562,30 +562,6 @@ QWaylandInputDevice *QWaylandCompositor::defaultInputDevice() const return d->inputDevices.first(); } -QWaylandDrag *QWaylandCompositor::drag() const -{ - return defaultInputDevice()->drag(); -} - -bool QWaylandCompositor::isDragging() const -{ - return false; -} - -void QWaylandCompositor::sendDragMoveEvent(const QPoint &global, const QPoint &local, - QWaylandSurface *surface) -{ - Q_UNUSED(global); - Q_UNUSED(local); - Q_UNUSED(surface); -// Drag::instance()->dragMove(global, local, surface); -} - -void QWaylandCompositor::sendDragEndEvent() -{ -// Drag::instance()->dragEnd(); -} - QWaylandInputDevice *QWaylandCompositor::inputDeviceFor(QInputEvent *inputEvent) { Q_D(QWaylandCompositor); diff --git a/src/compositor/compositor_api/qwaylandcompositor.h b/src/compositor/compositor_api/qwaylandcompositor.h index a0d416b91..7fe17c4f3 100644 --- a/src/compositor/compositor_api/qwaylandcompositor.h +++ b/src/compositor/compositor_api/qwaylandcompositor.h @@ -58,7 +58,6 @@ class QWaylandCompositorPrivate; class QWaylandClient; class QWaylandSurface; class QWaylandInputDevice; -class QWaylandDrag; class QWaylandGlobalInterface; class QWaylandView; class QWaylandOutputSpace; @@ -114,12 +113,6 @@ public: QWaylandInputDevice *defaultInputDevice() const; - QWaylandDrag *drag() const; - - bool isDragging() const; - void sendDragMoveEvent(const QPoint &global, const QPoint &local, QWaylandSurface *surface); - void sendDragEndEvent(); - QWaylandView *createSurfaceView(QWaylandSurface *surface); QWaylandInputDevice *inputDeviceFor(QInputEvent *inputEvent); diff --git a/src/compositor/compositor_api/qwaylanddrag.cpp b/src/compositor/compositor_api/qwaylanddrag.cpp index 935feda5b..2348907f0 100644 --- a/src/compositor/compositor_api/qwaylanddrag.cpp +++ b/src/compositor/compositor_api/qwaylanddrag.cpp @@ -52,6 +52,16 @@ public: { } + QtWayland::DataDevice *dataDevice() + { + return QWaylandInputDevicePrivate::get(inputDevice)->dataDevice(); + } + + const QtWayland::DataDevice *dataDevice() const + { + return QWaylandInputDevicePrivate::get(inputDevice)->dataDevice(); + } + QWaylandInputDevice *inputDevice; }; @@ -65,32 +75,49 @@ QWaylandSurface *QWaylandDrag::icon() const { Q_D(const QWaylandDrag); - const QtWayland::DataDevice *dataDevice = QWaylandInputDevicePrivate::get(d->inputDevice)->dataDevice(); + const QtWayland::DataDevice *dataDevice = d->dataDevice(); if (!dataDevice) return 0; return dataDevice->dragIcon(); } -QPointF QWaylandDrag::position() const -{ - Q_D(const QWaylandDrag); - - const QtWayland::DataDevice *dataDevice = QWaylandInputDevicePrivate::get(d->inputDevice)->dataDevice(); - if (!dataDevice) - return QPointF(); - return dataDevice->dragIconPosition(); -} bool QWaylandDrag::visible() const { Q_D(const QWaylandDrag); - const QtWayland::DataDevice *dataDevice = QWaylandInputDevicePrivate::get(d->inputDevice)->dataDevice(); + const QtWayland::DataDevice *dataDevice = d->dataDevice(); if (!dataDevice) return false; return dataDevice->dragIcon() != 0; } +void QWaylandDrag::dragMove(QWaylandSurface *target, const QPointF &pos) +{ + Q_D(QWaylandDrag); + QtWayland::DataDevice *dataDevice = d->dataDevice(); + if (!dataDevice) + return; + dataDevice->dragMove(target, pos); +} +void QWaylandDrag::drop() +{ + Q_D(QWaylandDrag); + QtWayland::DataDevice *dataDevice = d->dataDevice(); + if (!dataDevice) + return; + dataDevice->drop(); +} + +void QWaylandDrag::cancelDrag() +{ + Q_D(QWaylandDrag); + QtWayland::DataDevice *dataDevice = d->dataDevice(); + if (!dataDevice) + return; + dataDevice->cancelDrag(); +} + QT_END_NAMESPACE diff --git a/src/compositor/compositor_api/qwaylanddrag.h b/src/compositor/compositor_api/qwaylanddrag.h index 4903c3544..e7fcaad8e 100644 --- a/src/compositor/compositor_api/qwaylanddrag.h +++ b/src/compositor/compositor_api/qwaylanddrag.h @@ -49,25 +49,36 @@ class QWaylandSurface; class QWaylandView; class QWaylandInputDevice; +namespace QtWayland { + class DataDevice; +} + class Q_COMPOSITOR_EXPORT QWaylandDrag : public QObject { Q_OBJECT Q_DECLARE_PRIVATE(QWaylandDrag) Q_PROPERTY(QWaylandSurface *icon READ icon NOTIFY iconChanged) - Q_PROPERTY(QPointF position READ position NOTIFY positionChanged) Q_PROPERTY(bool visible READ visible NOTIFY iconChanged) public: explicit QWaylandDrag(QWaylandInputDevice *inputDevice); QWaylandSurface *icon() const; - QPointF position() const; + // QPointF position() const; bool visible() const; +public Q_SLOTS: + void dragMove(QWaylandSurface *target, const QPointF &pos); + void drop(); + void cancelDrag(); + Q_SIGNALS: void iconChanged(); - void positionChanged(); + void dragStarted(); // QWaylandSurface *icon???? + +private: + //friend class QtWayland::DataDevice; }; QT_END_NAMESPACE |