diff options
author | Frederik Gladhorn <frederik.gladhorn@theqtcompany.com> | 2016-07-08 14:46:08 +0200 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@qt.io> | 2016-07-11 12:25:54 +0000 |
commit | 62719a97cf4640ff014d9ca0691cc1e7632ef173 (patch) | |
tree | 54d75c2e6126e45ec84804fb85c5c508581852d4 /src/quick | |
parent | 62bae5c556251eec5d5295c258df3fb85e3c1bcc (diff) |
PointerEvents: start unified delivery code path
This really does nothing but join all incoming events, package them
into pointer events and then unpack them to send them on their separate
ways again.
Change-Id: Iad87b86051963c064d7a41d9a64b4551efe1f039
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/quick')
-rw-r--r-- | src/quick/items/qquickwindow.cpp | 25 | ||||
-rw-r--r-- | src/quick/items/qquickwindow_p.h | 6 |
2 files changed, 24 insertions, 7 deletions
diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index f263ed23d1..40b24724b2 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -1906,7 +1906,7 @@ void QQuickWindowPrivate::deliverDelayedTouchEvent() // Set delayedTouch to 0 before delivery to avoid redelivery in case of // event loop recursions (e.g if it the touch starts a dnd session). QScopedPointer<QTouchEvent> e(delayedTouch.take()); - deliverTouchEvent(e.data()); + deliverPointerEvent(currentPointerEvent.reset(e.data())); } static bool qquickwindow_no_touch_compression = qEnvironmentVariableIsSet("QML_NO_TOUCH_COMPRESSION"); @@ -1985,14 +1985,14 @@ void QQuickWindowPrivate::handleTouchEvent(QTouchEvent *event) qCDebug(DBG_TOUCH) << event; if (qquickwindow_no_touch_compression || touchRecursionGuard) { - deliverTouchEvent(event); + deliverPointerEvent(currentPointerEvent.reset(event)); return; } if (!compressTouchEvent(event)) { if (delayedTouch) deliverDelayedTouchEvent(); - deliverTouchEvent(event); + deliverPointerEvent(currentPointerEvent.reset(event)); } } @@ -2033,7 +2033,7 @@ void QQuickWindowPrivate::handleMouseEvent(QMouseEvent *event) case QEvent::MouseButtonPress: Q_QUICK_INPUT_PROFILE(QQuickProfiler::Mouse, QQuickProfiler::InputMousePress, event->button(), event->buttons()); - deliverMouseEvent(event); + deliverPointerEvent(currentPointerEvent.reset(event)); break; case QEvent::MouseButtonRelease: Q_QUICK_INPUT_PROFILE(QQuickProfiler::Mouse, QQuickProfiler::InputMouseRelease, event->button(), @@ -2043,7 +2043,7 @@ void QQuickWindowPrivate::handleMouseEvent(QMouseEvent *event) return; } - deliverMouseEvent(event); + deliverPointerEvent(currentPointerEvent.reset(event)); if (mouseGrabberItem && !event->buttons()) mouseGrabberItem->ungrabMouse(); break; @@ -2059,7 +2059,7 @@ void QQuickWindowPrivate::handleMouseEvent(QMouseEvent *event) return; } - deliverMouseEvent(event); + deliverPointerEvent(currentPointerEvent.reset(event)); break; case QEvent::MouseMove: Q_QUICK_INPUT_PROFILE(QQuickProfiler::Mouse, QQuickProfiler::InputMouseMove, @@ -2086,7 +2086,7 @@ void QQuickWindowPrivate::handleMouseEvent(QMouseEvent *event) event->setAccepted(accepted); return; } - deliverMouseEvent(event); + deliverPointerEvent(currentPointerEvent.reset(event)); break; default: Q_ASSERT(false); @@ -2118,6 +2118,17 @@ void QQuickWindowPrivate::flushFrameSynchronousEvents() } } +void QQuickWindowPrivate::deliverPointerEvent(QQuickPointerEvent *event) +{ + if (QMouseEvent *mouse = event->asMouseEvent()) { + deliverMouseEvent(mouse); + } else if (QTouchEvent *touch = event->asTouchEvent()) { + deliverTouchEvent(touch); + } else { + Q_ASSERT(false); + } +} + void QQuickWindowPrivate::deliverTouchEvent(QTouchEvent *event) { qCDebug(DBG_TOUCH) << " - delivering" << event; diff --git a/src/quick/items/qquickwindow_p.h b/src/quick/items/qquickwindow_p.h index e06fe4472d..713f33cc8f 100644 --- a/src/quick/items/qquickwindow_p.h +++ b/src/quick/items/qquickwindow_p.h @@ -53,6 +53,7 @@ #include "qquickitem.h" #include "qquickwindow.h" +#include "qquickevents_p_p.h" #include <QtQuick/private/qsgcontext_p.h> @@ -161,6 +162,7 @@ public: QHash<QQuickItem *, QList<QTouchEvent::TouchPoint> > *, QSet<QQuickItem*> *filtered); void handleTouchEvent(QTouchEvent *); void handleMouseEvent(QMouseEvent *); + void deliverPointerEvent(QQuickPointerEvent *); void deliverTouchEvent(QTouchEvent *); bool compressTouchEvent(QTouchEvent *); bool deliverTouchCancelEvent(QTouchEvent *); @@ -238,6 +240,10 @@ public: QQuickRenderControl *renderControl; QQuickAnimatorController *animationController; QScopedPointer<QTouchEvent> delayedTouch; + + // The current touch or mouse event that is delivered. + // This event gets re-used (reset) for every incoming mouse/touch event. + QQuickPointerEvent currentPointerEvent; int touchRecursionGuard; QQuickCustomRenderStage *customRenderStage; |