From 3f62886ac84b31c5c8f90205583dc65e811ad20b Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Mon, 5 Mar 2012 15:07:27 +1000 Subject: Handle MouseArea.enabled = false after mouse is pressed. Currently this leaves the MouseArea in a broken state, i.e. still in pressed state, and the next press after it is re-enabled is ignored. In this case we now allow subsequent mouse move or release events to continue. Following the release, no further press will be accepted. Change-Id: I65a890da90e2166ad568505fffdbd3db6c97165b Reviewed-by: Andrew den Exter --- src/quick/items/qquickmousearea.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/quick/items/qquickmousearea.cpp b/src/quick/items/qquickmousearea.cpp index ec2c980879..ef57242319 100644 --- a/src/quick/items/qquickmousearea.cpp +++ b/src/quick/items/qquickmousearea.cpp @@ -697,7 +697,7 @@ void QQuickMouseArea::mousePressEvent(QMouseEvent *event) void QQuickMouseArea::mouseMoveEvent(QMouseEvent *event) { Q_D(QQuickMouseArea); - if (!d->absorb) { + if (!d->absorb && !d->pressed) { QQuickItem::mouseMoveEvent(event); return; } @@ -783,7 +783,7 @@ void QQuickMouseArea::mouseReleaseEvent(QMouseEvent *event) { Q_D(QQuickMouseArea); d->stealMouse = false; - if (!d->absorb) { + if (!d->absorb && !d->pressed) { QQuickItem::mouseReleaseEvent(event); } else { d->saveEvent(event); @@ -820,7 +820,7 @@ void QQuickMouseArea::mouseDoubleClickEvent(QMouseEvent *event) void QQuickMouseArea::hoverEnterEvent(QHoverEvent *event) { Q_D(QQuickMouseArea); - if (!d->absorb) { + if (!d->absorb && !d->pressed) { QQuickItem::hoverEnterEvent(event); } else { d->lastPos = event->posF(); @@ -837,7 +837,7 @@ void QQuickMouseArea::hoverEnterEvent(QHoverEvent *event) void QQuickMouseArea::hoverMoveEvent(QHoverEvent *event) { Q_D(QQuickMouseArea); - if (!d->absorb) { + if (!d->absorb && !d->pressed) { QQuickItem::hoverMoveEvent(event); } else { d->lastPos = event->posF(); @@ -854,7 +854,7 @@ void QQuickMouseArea::hoverMoveEvent(QHoverEvent *event) void QQuickMouseArea::hoverLeaveEvent(QHoverEvent *event) { Q_D(QQuickMouseArea); - if (!d->absorb) + if (!d->absorb && !d->pressed) QQuickItem::hoverLeaveEvent(event); else setHovered(false); @@ -935,7 +935,7 @@ bool QQuickMouseArea::sendMouseEvent(QMouseEvent *event) bool QQuickMouseArea::childMouseEventFilter(QQuickItem *i, QEvent *e) { Q_D(QQuickMouseArea); - if (!d->absorb || !isVisible() || !d->drag || !d->drag->filterChildren()) + if (!d->pressed && (!d->absorb || !isVisible() || !d->drag || !d->drag->filterChildren())) return QQuickItem::childMouseEventFilter(i, e); switch (e->type()) { case QEvent::MouseButtonPress: -- cgit v1.2.3