diff options
author | Michael Brasser <michael.brasser@nokia.com> | 2010-07-12 06:21:34 (GMT) |
---|---|---|
committer | Toby Tomkins <toby.tomkins@nokia.com> | 2010-07-26 07:08:03 (GMT) |
commit | acebca36dc84677bb0875297b1739e15025323bb (patch) | |
tree | e66c608e41a3b74d91ee41bcd736dc6c2b1c40af /src | |
parent | cae1bb9909e1cdb6963b29f4a93b03aa81c50880 (diff) | |
download | Qt-acebca36dc84677bb0875297b1739e15025323bb.zip Qt-acebca36dc84677bb0875297b1739e15025323bb.tar.gz Qt-acebca36dc84677bb0875297b1739e15025323bb.tar.bz2 |
wantsFocus should be based on FocusScope chain, not parent chain.
Ancestors of the item with focus should only report wantsFocus as true
when they are a FocusScope or a top-level item.
Reviewed-by: Aaron Kennedy
Reviewed-by: Yann Bodson
(cherry picked from commit 686fca1c78e6d4d2ba597dd75d982c76647c7707)
Diffstat (limited to 'src')
-rw-r--r-- | src/declarative/graphicsitems/qdeclarativeitem.cpp | 7 | ||||
-rw-r--r-- | src/declarative/graphicsitems/qdeclarativeitem_p.h | 4 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 89484b2..a229d4c 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -2397,6 +2397,8 @@ QDeclarativeItem *QDeclarativeItem::childAt(qreal x, qreal y) const void QDeclarativeItemPrivate::focusChanged(bool flag) { Q_Q(QDeclarativeItem); + if (!(flags & QGraphicsItem::ItemIsFocusScope) && parent) + emit q->wantsFocusChanged(flag); //see also QDeclarativeItemPrivate::subFocusItemChange() emit q->focusChanged(flag); } @@ -3098,7 +3100,10 @@ void QDeclarativeItem::setSize(const QSizeF &size) /*! \internal */ bool QDeclarativeItem::wantsFocus() const { - return focusItem() != 0; + Q_D(const QDeclarativeItem); + return focusItem() == this || + (d->flags & QGraphicsItem::ItemIsFocusScope && focusItem() != 0) || + (!parentItem() && focusItem() != 0); } /*! diff --git a/src/declarative/graphicsitems/qdeclarativeitem_p.h b/src/declarative/graphicsitems/qdeclarativeitem_p.h index fb416c2..84ae4ef 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem_p.h +++ b/src/declarative/graphicsitems/qdeclarativeitem_p.h @@ -286,7 +286,9 @@ public: // Reimplemented from QGraphicsItemPrivate virtual void subFocusItemChange() { - emit q_func()->wantsFocusChanged(subFocusItem != 0); + if (flags & QGraphicsItem::ItemIsFocusScope || !parent) + emit q_func()->wantsFocusChanged(subFocusItem != 0); + //see also QDeclarativeItemPrivate::focusChanged } // Reimplemented from QGraphicsItemPrivate |