diff --git a/src/qmlcontrols/kquickcontrolsaddons/mouseeventlistener.h b/src/qmlcontrols/kquickcontrolsaddons/mouseeventlistener.h --- a/src/qmlcontrols/kquickcontrolsaddons/mouseeventlistener.h +++ b/src/qmlcontrols/kquickcontrolsaddons/mouseeventlistener.h @@ -43,6 +43,7 @@ Q_PROPERTY(Qt::MouseButtons buttons READ buttons) Q_PROPERTY(Qt::KeyboardModifiers modifiers READ modifiers) Q_PROPERTY(QScreen* screen READ screen CONSTANT) + Q_PROPERTY(bool accepted READ isAccepted WRITE setAccepted NOTIFY acceptedChanged) public: KDeclarativeMouseEvent(int x, int y, int screenX, int screenY, @@ -69,10 +70,21 @@ Qt::KeyboardModifiers modifiers() const { return m_modifiers; } QScreen* screen() const { return m_screen; } + bool isAccepted() const { return m_accepted; } + void setAccepted(bool accepted) { + if (m_accepted != accepted) { + m_accepted = accepted; + emit acceptedChanged(); + } + } + // only for internal usage void setX(int x) { m_x = x; } void setY(int y) { m_y = y; } +Q_SIGNALS: + void acceptedChanged(); + private: int m_x; int m_y; @@ -82,6 +94,7 @@ Qt::MouseButtons m_buttons; Qt::KeyboardModifiers m_modifiers; QScreen *m_screen; + bool m_accepted = false; }; class KDeclarativeWheelEvent : public QObject diff --git a/src/qmlcontrols/kquickcontrolsaddons/mouseeventlistener.cpp b/src/qmlcontrols/kquickcontrolsaddons/mouseeventlistener.cpp --- a/src/qmlcontrols/kquickcontrolsaddons/mouseeventlistener.cpp +++ b/src/qmlcontrols/kquickcontrolsaddons/mouseeventlistener.cpp @@ -171,6 +171,11 @@ emit pressed(&dme); emit pressedChanged(); + if (dme.isAccepted()) { + me->setAccepted(true); + return; + } + m_pressAndHoldTimer->start(QGuiApplication::styleHints()->mousePressAndHoldInterval()); } @@ -187,6 +192,10 @@ KDeclarativeMouseEvent dme(me->pos().x(), me->pos().y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos())); emit positionChanged(&dme); + + if (dme.isAccepted()) { + me->setAccepted(true); + } } void MouseEventListener::mouseReleaseEvent(QMouseEvent *me) @@ -205,6 +214,10 @@ emit clicked(&dme); m_pressAndHoldTimer->stop(); } + + if (dme.isAccepted()) { + me->setAccepted(true); + } } void MouseEventListener::wheelEvent(QWheelEvent *we) @@ -260,7 +273,12 @@ emit pressed(&dme); emit pressedChanged(); + if (dme.isAccepted()) { + return true; + } + m_pressAndHoldTimer->start(QGuiApplication::styleHints()->mousePressAndHoldInterval()); + break; } case QEvent::HoverMove: { @@ -280,6 +298,10 @@ KDeclarativeMouseEvent dme(myPos.x(), myPos.y(), screenPos.x(), screenPos.y(), Qt::NoButton, Qt::NoButton, he->modifiers(), nullptr); //qDebug() << "positionChanged..." << dme.x() << dme.y(); emit positionChanged(&dme); + + if (dme.isAccepted()) { + return true; + } break; } case QEvent::MouseMove: { @@ -304,6 +326,10 @@ m_pressAndHoldEvent = new KDeclarativeMouseEvent(myPos.x(), myPos.y(), me->screenPos().x(), me->screenPos().y(), me->button(), me->buttons(), me->modifiers(), screenForGlobalPos(me->globalPos())); } emit positionChanged(&dme); + + if (dme.isAccepted()) { + return true; + } break; } case QEvent::MouseButtonRelease: { @@ -321,6 +347,10 @@ emit clicked(&dme); m_pressAndHoldTimer->stop(); } + + if (dme.isAccepted()) { + return true; + } break; } case QEvent::UngrabMouse: {