diff options
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/kernel/qmacgesturerecognizer.cpp | 15 | ||||
-rw-r--r-- | src/widgets/kernel/qmacgesturerecognizer_p.h | 22 |
2 files changed, 26 insertions, 11 deletions
diff --git a/src/widgets/kernel/qmacgesturerecognizer.cpp b/src/widgets/kernel/qmacgesturerecognizer.cpp index 6dedd3c2d0..d39b93e320 100644 --- a/src/widgets/kernel/qmacgesturerecognizer.cpp +++ b/src/widgets/kernel/qmacgesturerecognizer.cpp @@ -43,6 +43,7 @@ #include "qevent.h" #include "qwidget.h" #include "qdebug.h" +#include <QtCore/qcoreapplication.h> #ifndef QT_NO_GESTURES @@ -181,6 +182,16 @@ QGesture *QMacPanGestureRecognizer::create(QObject *target) return 0; } +void QMacPanGestureRecognizer::timerEvent(QTimerEvent *ev) +{ + if (ev->timerId() == _panTimer.timerId()) { + if (_panTimer.isActive()) + _panTimer.stop(); + if (_target) + QCoreApplication::sendEvent(_target, ev); + } +} + QGestureRecognizer::Result QMacPanGestureRecognizer::recognize(QGesture *gesture, QObject *target, QEvent *event) { @@ -195,7 +206,8 @@ QMacPanGestureRecognizer::recognize(QGesture *gesture, QObject *target, QEvent * if (ev->touchPoints().size() == 1) { reset(gesture); _startPos = QCursor::pos(); - _panTimer.start(panBeginDelay, target); + _target = target; + _panTimer.start(panBeginDelay, this); _panCanceled = false; return QGestureRecognizer::MayBeGesture; } @@ -242,7 +254,6 @@ QMacPanGestureRecognizer::recognize(QGesture *gesture, QObject *target, QEvent * case QEvent::Timer: { QTimerEvent *ev = static_cast<QTimerEvent *>(event); if (ev->timerId() == _panTimer.timerId()) { - _panTimer.stop(); if (_panCanceled) break; // Begin new pan session! diff --git a/src/widgets/kernel/qmacgesturerecognizer_p.h b/src/widgets/kernel/qmacgesturerecognizer_p.h index be3f3266ac..739fc201b7 100644 --- a/src/widgets/kernel/qmacgesturerecognizer_p.h +++ b/src/widgets/kernel/qmacgesturerecognizer_p.h @@ -55,6 +55,7 @@ #include "qtimer.h" #include "qpoint.h" #include "qgesturerecognizer.h" +#include <QtCore/qpointer.h> #ifndef QT_NO_GESTURES @@ -65,9 +66,9 @@ class QMacSwipeGestureRecognizer : public QGestureRecognizer public: QMacSwipeGestureRecognizer(); - QGesture *create(QObject *target); - QGestureRecognizer::Result recognize(QGesture *gesture, QObject *watched, QEvent *event); - void reset(QGesture *gesture); + QGesture *create(QObject *target) override; + QGestureRecognizer::Result recognize(QGesture *gesture, QObject *watched, QEvent *event) override; + void reset(QGesture *gesture) override; }; class QMacPinchGestureRecognizer : public QGestureRecognizer @@ -75,9 +76,9 @@ class QMacPinchGestureRecognizer : public QGestureRecognizer public: QMacPinchGestureRecognizer(); - QGesture *create(QObject *target); - QGestureRecognizer::Result recognize(QGesture *gesture, QObject *watched, QEvent *event); - void reset(QGesture *gesture); + QGesture *create(QObject *target) override; + QGestureRecognizer::Result recognize(QGesture *gesture, QObject *watched, QEvent *event) override; + void reset(QGesture *gesture) override; }; class QMacPanGestureRecognizer : public QObject, public QGestureRecognizer @@ -85,13 +86,16 @@ class QMacPanGestureRecognizer : public QObject, public QGestureRecognizer public: QMacPanGestureRecognizer(); - QGesture *create(QObject *target); - QGestureRecognizer::Result recognize(QGesture *gesture, QObject *watched, QEvent *event); - void reset(QGesture *gesture); + QGesture *create(QObject *target) override; + QGestureRecognizer::Result recognize(QGesture *gesture, QObject *watched, QEvent *event) override; + void reset(QGesture *gesture) override; +protected: + void timerEvent(QTimerEvent *ev) override; private: QPointF _startPos; QBasicTimer _panTimer; bool _panCanceled; + QPointer<QObject> _target; }; QT_END_NAMESPACE |