aboutsummaryrefslogtreecommitdiffstats
path: root/src/controls/qquickpressandholdhelper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/controls/qquickpressandholdhelper.cpp')
-rw-r--r--src/controls/qquickpressandholdhelper.cpp25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/controls/qquickpressandholdhelper.cpp b/src/controls/qquickpressandholdhelper.cpp
index 088a402b..38cd871c 100644
--- a/src/controls/qquickpressandholdhelper.cpp
+++ b/src/controls/qquickpressandholdhelper.cpp
@@ -45,17 +45,22 @@
QT_BEGIN_NAMESPACE
QQuickPressAndHoldHelper::QQuickPressAndHoldHelper()
- : control(Q_NULLPTR), longPress(false), pressAndHoldSignalIndex(-1)
+ : control(Q_NULLPTR)
+ , longPress(false)
+ , pressAndHoldSignalIndex(-1)
+ , delayedMousePressEvent(Q_NULLPTR)
{ }
void QQuickPressAndHoldHelper::mousePressEvent(QMouseEvent *event)
{
longPress = false;
pressPos = event->localPos();
- if (Qt::LeftButton == (event->buttons() & Qt::LeftButton))
+ if (Qt::LeftButton == (event->buttons() & Qt::LeftButton)) {
timer.start(QGuiApplication::styleHints()->mousePressAndHoldInterval(), control);
- else
+ delayedMousePressEvent = new QMouseEvent(event->type(), event->pos(), event->button(), event->buttons(), event->modifiers());
+ } else {
timer.stop();
+ }
}
void QQuickPressAndHoldHelper::mouseMoveEvent(QMouseEvent *event)
@@ -73,6 +78,7 @@ void QQuickPressAndHoldHelper::mouseReleaseEvent(QMouseEvent *)
void QQuickPressAndHoldHelper::timerEvent(QTimerEvent *)
{
timer.stop();
+ clearDelayedMouseEvent();
if (pressAndHoldSignalIndex == -1)
pressAndHoldSignalIndex = control->metaObject()->indexOfSignal("pressAndHold(QQuickMouseEvent*)");
@@ -92,4 +98,17 @@ void QQuickPressAndHoldHelper::timerEvent(QTimerEvent *)
}
}
+void QQuickPressAndHoldHelper::clearDelayedMouseEvent()
+{
+ if (delayedMousePressEvent) {
+ delete delayedMousePressEvent;
+ delayedMousePressEvent = 0;
+ }
+}
+
+bool QQuickPressAndHoldHelper::isActive()
+{
+ return !(timer.isActive() || longPress);
+}
+
QT_END_NAMESPACE