diff --git a/src/plugins/platforms/wayland/qwaylandtabletv2.cpp b/src/plugins/platforms/wayland/qwaylandtabletv2.cpp index 72fe1664d36..f4870217e00 100644 --- a/src/plugins/platforms/wayland/qwaylandtabletv2.cpp +++ b/src/plugins/platforms/wayland/qwaylandtabletv2.cpp @@ -382,10 +382,19 @@ void QWaylandTabletToolV2::zwp_tablet_tool_v2_frame(uint32_t time) qreal rotation = m_pending.rotation; int z = int(m_pending.distance); - QWindowSystemInterface::handleTabletEvent(window, timestamp, this, localPosition, globalPosition, - buttons, pressure, - xTilt, yTilt, tangentialPressure, rotation, z, - m_tabletSeat->seat()->modifiers()); + // do not use localPosition here since that is in Qt window coordinates + // but we need surface coordinates to include the decoration + bool decorationHandledEvent = waylandWindow->handleTabletEventDecoration( + m_tabletSeat->seat(), m_pending.surfacePosition, + window->mapToGlobal(m_pending.surfacePosition) + delta, buttons, + m_tabletSeat->seat()->modifiers()); + + if (!decorationHandledEvent) { + QWindowSystemInterface::handleTabletEvent(window, timestamp, this, localPosition, globalPosition, + buttons, pressure, + xTilt, yTilt, tangentialPressure, rotation, z, + m_tabletSeat->seat()->modifiers()); + } } m_applied = m_pending; diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp index bdc0f282b7c..ef4dfba743d 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp @@ -1360,6 +1360,16 @@ bool QWaylandWindow::touchDragDecoration(QWaylandInputDevice *inputDevice, const return mWindowDecoration->handleTouch(inputDevice, local, global, state, mods); } +bool QWaylandWindow::handleTabletEventDecoration(QWaylandInputDevice *inputDevice, + const QPointF &local, const QPointF &global, + Qt::MouseButtons buttons, + Qt::KeyboardModifiers modifiers) +{ + if (!mWindowDecorationEnabled) + return false; + return mWindowDecoration->handleMouse(inputDevice, local, global, buttons, modifiers); +} + void QWaylandWindow::handleMouseEventWithDecoration(QWaylandInputDevice *inputDevice, const QWaylandPointerEvent &e) { if (mMousePressedInContentArea == Qt::NoButton && diff --git a/src/plugins/platforms/wayland/qwaylandwindow_p.h b/src/plugins/platforms/wayland/qwaylandwindow_p.h index b37a9bad812..b3da318e9b5 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow_p.h +++ b/src/plugins/platforms/wayland/qwaylandwindow_p.h @@ -180,6 +180,9 @@ public: bool touchDragDecoration(QWaylandInputDevice *inputDevice, const QPointF &local, const QPointF &global, QEventPoint::State state, Qt::KeyboardModifiers mods); + bool handleTabletEventDecoration(QWaylandInputDevice *inputDevice, const QPointF &local, + const QPointF &global, Qt::MouseButtons buttons, + Qt::KeyboardModifiers modifiers); bool createDecoration();