diff options
-rw-r--r-- | examples/wayland/qwindow-compositor/compositorwindow.cpp | 9 | ||||
-rw-r--r-- | examples/wayland/qwindow-compositor/compositorwindow.h | 1 | ||||
-rw-r--r-- | examples/wayland/qwindow-compositor/windowcompositor.cpp | 9 | ||||
-rw-r--r-- | examples/wayland/qwindow-compositor/windowcompositor.h | 3 | ||||
-rw-r--r-- | src/client/qwaylanddnd.cpp | 1 | ||||
-rw-r--r-- | src/client/qwaylandwindow.cpp | 5 | ||||
-rw-r--r-- | src/client/qwaylandwindow_p.h | 1 |
7 files changed, 19 insertions, 10 deletions
diff --git a/examples/wayland/qwindow-compositor/compositorwindow.cpp b/examples/wayland/qwindow-compositor/compositorwindow.cpp index 002831283..7e10a1739 100644 --- a/examples/wayland/qwindow-compositor/compositorwindow.cpp +++ b/examples/wayland/qwindow-compositor/compositorwindow.cpp @@ -62,7 +62,6 @@ void CompositorWindow::setCompositor(WindowCompositor *comp) { connect(m_compositor, &WindowCompositor::startMove, this, &CompositorWindow::startMove); connect(m_compositor, &WindowCompositor::startResize, this, &CompositorWindow::startResize); connect(m_compositor, &WindowCompositor::dragStarted, this, &CompositorWindow::startDrag); - connect(m_compositor, &WindowCompositor::frameOffset, this, &CompositorWindow::setFrameOffset); } void CompositorWindow::initializeGL() @@ -180,12 +179,6 @@ void CompositorWindow::startDrag(WindowCompositorView *dragIcon) m_compositor->raise(dragIcon); } -void CompositorWindow::setFrameOffset(const QPoint &offset) -{ - if (m_mouseView) - m_mouseView->setPosition(m_mouseView->position() + offset); -} - void CompositorWindow::mousePressEvent(QMouseEvent *e) { if (mouseGrab()) @@ -247,7 +240,7 @@ void CompositorWindow::mouseMoveEvent(QMouseEvent *e) WindowCompositorView *view = viewAt(e->localPos()); m_compositor->handleDrag(view, e); if (m_dragIconView) { - m_dragIconView->setPosition(e->localPos()); + m_dragIconView->setPosition(e->localPos() + m_dragIconView->offset()); update(); } } diff --git a/examples/wayland/qwindow-compositor/compositorwindow.h b/examples/wayland/qwindow-compositor/compositorwindow.h index c7c637e53..8b5180a00 100644 --- a/examples/wayland/qwindow-compositor/compositorwindow.h +++ b/examples/wayland/qwindow-compositor/compositorwindow.h @@ -73,7 +73,6 @@ private slots: void startMove(); void startResize(int edge, bool anchored); void startDrag(WindowCompositorView *dragIcon); - void setFrameOffset(const QPoint &offset); private: enum GrabState { NoGrab, MoveGrab, ResizeGrab, DragGrab }; diff --git a/examples/wayland/qwindow-compositor/windowcompositor.cpp b/examples/wayland/qwindow-compositor/windowcompositor.cpp index e91778725..bd39908e5 100644 --- a/examples/wayland/qwindow-compositor/windowcompositor.cpp +++ b/examples/wayland/qwindow-compositor/windowcompositor.cpp @@ -108,6 +108,12 @@ void WindowCompositorView::onXdgSetFullscreen(QWaylandOutput* clientPreferredOut setPosition(outputToFullscreen->position()); } +void WindowCompositorView::onOffsetForNextFrame(const QPoint &offset) +{ + m_offset = offset; + setPosition(position() + offset); +} + void WindowCompositorView::onXdgUnsetFullscreen() { onXdgUnsetMaximized(); @@ -145,7 +151,6 @@ void WindowCompositor::onSurfaceCreated(QWaylandSurface *surface) connect(surface, &QWaylandSurface::surfaceDestroyed, this, &WindowCompositor::surfaceDestroyed); connect(surface, &QWaylandSurface::mappedChanged, this, &WindowCompositor::surfaceMappedChanged); connect(surface, &QWaylandSurface::redraw, this, &WindowCompositor::triggerRender); - connect(surface, &QWaylandSurface::offsetForNextFrame, this, &WindowCompositor::frameOffset); connect(surface, &QWaylandSurface::subsurfacePositionChanged, this, &WindowCompositor::onSubsurfacePositionChanged); @@ -154,6 +159,7 @@ void WindowCompositor::onSurfaceCreated(QWaylandSurface *surface) view->setOutput(outputFor(m_window)); m_views << view; connect(view, &QWaylandView::surfaceDestroyed, this, &WindowCompositor::viewSurfaceDestroyed); + connect(surface, &QWaylandSurface::offsetForNextFrame, view, &WindowCompositorView::onOffsetForNextFrame); } void WindowCompositor::surfaceMappedChanged() @@ -412,6 +418,7 @@ void WindowCompositor::startDrag() QWaylandDrag *currentDrag = defaultInputDevice()->drag(); Q_ASSERT(currentDrag); WindowCompositorView *iconView = findView(currentDrag->icon()); + iconView->setPosition(m_window->mapFromGlobal(QCursor::pos())); emit dragStarted(iconView); } diff --git a/examples/wayland/qwindow-compositor/windowcompositor.h b/examples/wayland/qwindow-compositor/windowcompositor.h index 96af01f82..5290d7c85 100644 --- a/examples/wayland/qwindow-compositor/windowcompositor.h +++ b/examples/wayland/qwindow-compositor/windowcompositor.h @@ -68,6 +68,7 @@ public: WindowCompositorView *parentView() const { return m_parentView; } QPointF parentPosition() const { return m_parentView ? (m_parentView->position() + m_parentView->parentPosition()) : QPointF(); } QSize windowSize() { return m_xdgSurface ? m_xdgSurface->windowGeometry().size() : surface()->size(); } + QPoint offset() const { return m_offset; } private: friend class WindowCompositor; @@ -77,12 +78,14 @@ private: QWaylandXdgSurface *m_xdgSurface; QWaylandXdgPopup *m_xdgPopup; WindowCompositorView *m_parentView; + QPoint m_offset; public slots: void onXdgSetMaximized(); void onXdgUnsetMaximized(); void onXdgSetFullscreen(QWaylandOutput *output); void onXdgUnsetFullscreen(); + void onOffsetForNextFrame(const QPoint &offset); }; class WindowCompositor : public QWaylandCompositor diff --git a/src/client/qwaylanddnd.cpp b/src/client/qwaylanddnd.cpp index a84b749e6..b59ac6d70 100644 --- a/src/client/qwaylanddnd.cpp +++ b/src/client/qwaylanddnd.cpp @@ -74,6 +74,7 @@ void QWaylandDrag::startDrag() QBasicDrag::startDrag(); QWaylandWindow *icon = static_cast<QWaylandWindow *>(shapedPixmapWindow()->handle()); m_display->currentInputDevice()->dataDevice()->startDrag(drag()->mimeData(), icon); + icon->addAttachOffset(-drag()->hotSpot()); } void QWaylandDrag::cancel() diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp index 3146f70b3..da067dc92 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/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/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h index 57f4657bb..f36f0833b 100644 --- a/src/client/qwaylandwindow_p.h +++ b/src/client/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; |