diff options
author | Charles Yin <charles.yin@nokia.com> | 2011-07-29 10:38:35 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-08-02 10:46:54 +0200 |
commit | 09f4bd20d7514f229338667effdf8519f1722b3f (patch) | |
tree | cb907a723793b0102ad3965ba2855c364c32a21b /src/declarative/items | |
parent | 6f146a5d2ea893b13e4cfcd90243e66f7c9a0083 (diff) |
Cancel mousearea pressed state when window is deactivated
Change-Id: I1cc21c338576a2ac3b1e8e282e8e4de3bc63759a
Task-number:QTBUG-19904
Reviewed-on: http://codereview.qt.nokia.com/2357
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src/declarative/items')
-rw-r--r-- | src/declarative/items/qsgcanvas.cpp | 3 | ||||
-rw-r--r-- | src/declarative/items/qsgitem.cpp | 7 | ||||
-rw-r--r-- | src/declarative/items/qsgitem.h | 1 | ||||
-rw-r--r-- | src/declarative/items/qsgmousearea.cpp | 13 | ||||
-rw-r--r-- | src/declarative/items/qsgmousearea_p.h | 2 |
5 files changed, 25 insertions, 1 deletions
diff --git a/src/declarative/items/qsgcanvas.cpp b/src/declarative/items/qsgcanvas.cpp index 2efdd50c73..03b6a72b96 100644 --- a/src/declarative/items/qsgcanvas.cpp +++ b/src/declarative/items/qsgcanvas.cpp @@ -1017,6 +1017,9 @@ bool QSGCanvas::event(QEvent *e) case QSGEvent::SGDragDrop: d->deliverDragEvent(static_cast<QSGDragEvent *>(e)); break; + case QEvent::WindowDeactivate: + rootItem()->windowDeactivateEvent(); + break; default: break; } diff --git a/src/declarative/items/qsgitem.cpp b/src/declarative/items/qsgitem.cpp index ef77bfda02..f94aa96666 100644 --- a/src/declarative/items/qsgitem.cpp +++ b/src/declarative/items/qsgitem.cpp @@ -1714,6 +1714,13 @@ bool QSGItem::childMouseEventFilter(QSGItem *, QEvent *) return false; } +void QSGItem::windowDeactivateEvent() +{ + foreach (QSGItem* item, childItems()) { + item->windowDeactivateEvent(); + } +} + Qt::InputMethodHints QSGItem::inputMethodHints() const { Q_D(const QSGItem); diff --git a/src/declarative/items/qsgitem.h b/src/declarative/items/qsgitem.h index 2cd2082acd..249a2065dd 100644 --- a/src/declarative/items/qsgitem.h +++ b/src/declarative/items/qsgitem.h @@ -370,6 +370,7 @@ protected: virtual void dragExitEvent(QSGDragEvent *event); virtual void dragDropEvent(QSGDragEvent *event); virtual bool childMouseEventFilter(QSGItem *, QEvent *); + virtual void windowDeactivateEvent(); virtual void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); diff --git a/src/declarative/items/qsgmousearea.cpp b/src/declarative/items/qsgmousearea.cpp index 88a617fd71..5bf0867cdb 100644 --- a/src/declarative/items/qsgmousearea.cpp +++ b/src/declarative/items/qsgmousearea.cpp @@ -682,7 +682,7 @@ void QSGMouseArea::hoverLeaveEvent(QHoverEvent *event) setHovered(false); } -void QSGMouseArea::mouseUngrabEvent() +void QSGMouseArea::ungrabMouse() { Q_D(QSGMouseArea); if (d->pressed) { @@ -700,6 +700,11 @@ void QSGMouseArea::mouseUngrabEvent() } } +void QSGMouseArea::mouseUngrabEvent() +{ + ungrabMouse(); +} + bool QSGMouseArea::sendMouseEvent(QGraphicsSceneMouseEvent *event) { Q_D(QSGMouseArea); @@ -794,6 +799,12 @@ void QSGMouseArea::timerEvent(QTimerEvent *event) } } +void QSGMouseArea::windowDeactivateEvent() +{ + ungrabMouse(); + QSGItem::windowDeactivateEvent(); +} + void QSGMouseArea::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) { diff --git a/src/declarative/items/qsgmousearea_p.h b/src/declarative/items/qsgmousearea_p.h index aac829f6a9..ff3863c3bb 100644 --- a/src/declarative/items/qsgmousearea_p.h +++ b/src/declarative/items/qsgmousearea_p.h @@ -223,6 +223,7 @@ protected: virtual void hoverLeaveEvent(QHoverEvent *event); virtual bool childMouseEventFilter(QSGItem *i, QEvent *e); virtual void timerEvent(QTimerEvent *event); + virtual void windowDeactivateEvent(); virtual void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); @@ -231,6 +232,7 @@ protected: private: void handlePress(); void handleRelease(); + void ungrabMouse(); private: Q_DISABLE_COPY(QSGMouseArea) |