aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickpresshandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quicktemplates2/qquickpresshandler.cpp')
-rw-r--r--src/quicktemplates2/qquickpresshandler.cpp42
1 files changed, 38 insertions, 4 deletions
diff --git a/src/quicktemplates2/qquickpresshandler.cpp b/src/quicktemplates2/qquickpresshandler.cpp
index 1e1a17bc..5c868ee2 100644
--- a/src/quicktemplates2/qquickpresshandler.cpp
+++ b/src/quicktemplates2/qquickpresshandler.cpp
@@ -48,6 +48,8 @@ QQuickPressHandler::QQuickPressHandler()
: control(nullptr)
, longPress(false)
, pressAndHoldSignalIndex(-1)
+ , pressedSignalIndex(-1)
+ , releasedSignalIndex(-1)
, delayedMousePressEvent(nullptr)
{ }
@@ -61,6 +63,21 @@ void QQuickPressHandler::mousePressEvent(QMouseEvent *event)
} else {
timer.stop();
}
+
+ if (pressedSignalIndex == -1)
+ pressedSignalIndex = control->metaObject()->indexOfSignal("pressed(QQuickMouseEvent*)");
+ Q_ASSERT(pressedSignalIndex != -1);
+
+ if (QObjectPrivate::get(control)->isSignalConnected(pressedSignalIndex)) {
+ QQuickMouseEvent mev;
+ mev.reset(pressPos.x(), pressPos.y(), event->button(), event->buttons(),
+ QGuiApplication::keyboardModifiers(), false/*isClick*/, false/*wasHeld*/);
+ mev.setAccepted(true);
+ QQuickMouseEvent *mevPtr = &mev;
+ void *args[] = { nullptr, &mevPtr };
+ QMetaObject::metacall(control, QMetaObject::InvokeMetaMethod, pressedSignalIndex, args);
+ event->setAccepted(mev.isAccepted());
+ }
}
void QQuickPressHandler::mouseMoveEvent(QMouseEvent *event)
@@ -69,10 +86,26 @@ void QQuickPressHandler::mouseMoveEvent(QMouseEvent *event)
timer.stop();
}
-void QQuickPressHandler::mouseReleaseEvent(QMouseEvent *)
+void QQuickPressHandler::mouseReleaseEvent(QMouseEvent *event)
{
- if (!longPress)
+ if (!longPress) {
timer.stop();
+
+ if (releasedSignalIndex == -1)
+ releasedSignalIndex = control->metaObject()->indexOfSignal("released(QQuickMouseEvent*)");
+ Q_ASSERT(releasedSignalIndex != -1);
+
+ if (QObjectPrivate::get(control)->isSignalConnected(releasedSignalIndex)) {
+ QQuickMouseEvent mev;
+ mev.reset(pressPos.x(), pressPos.y(), event->button(), event->buttons(),
+ QGuiApplication::keyboardModifiers(), false/*isClick*/, false/*wasHeld*/);
+ mev.setAccepted(true);
+ QQuickMouseEvent *mevPtr = &mev;
+ void *args[] = { nullptr, &mevPtr };
+ QMetaObject::metacall(control, QMetaObject::InvokeMetaMethod, releasedSignalIndex, args);
+ event->setAccepted(mev.isAccepted());
+ }
+ }
}
void QQuickPressHandler::timerEvent(QTimerEvent *)
@@ -86,8 +119,9 @@ void QQuickPressHandler::timerEvent(QTimerEvent *)
longPress = QObjectPrivate::get(control)->isSignalConnected(pressAndHoldSignalIndex);
if (longPress) {
- QQuickMouseEvent mev(pressPos.x(), pressPos.y(), Qt::LeftButton, Qt::LeftButton,
- QGuiApplication::keyboardModifiers(), false/*isClick*/, true/*wasHeld*/);
+ QQuickMouseEvent mev;
+ mev.reset(pressPos.x(), pressPos.y(), Qt::LeftButton, Qt::LeftButton,
+ QGuiApplication::keyboardModifiers(), false/*isClick*/, true/*wasHeld*/);
mev.setAccepted(true);
// Use fast signal invocation since we already got its index
QQuickMouseEvent *mevPtr = &mev;