diff options
author | Martin Jones <martin.jones@nokia.com> | 2012-03-05 15:07:27 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-05 23:31:48 +0100 |
commit | 3f62886ac84b31c5c8f90205583dc65e811ad20b (patch) | |
tree | 5e78818004f64e491621265d7af8a73ee5b9712c /src | |
parent | 43ffdc3fc02eb058d7d458cb16a9c3cf07ea68eb (diff) |
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 <andrew.den-exter@nokia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/quick/items/qquickmousearea.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
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: |