diff options
author | Andreas Aardal Hanssen <andreas@hanssen.name> | 2012-03-07 20:26:17 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-13 20:07:27 +0100 |
commit | bb364c14157df635cf166b293f8cab6c22534aa1 (patch) | |
tree | e2dcbd8a53a0e2eb077b7e4af131e73dcbdaa113 /src | |
parent | c051ea15c75851132d08f22825d84d4ea3f49241 (diff) |
Fix QDeclarativeItem::hasActiveFocus().
This function returns true if the item (or, in case it's a focus
scope, one of its children,) has focus (i.e., will
receive key events now), or will receive focus once the scene is
activated. It also returns true if the item has not yet been added
to a scene, but has subFocus, implicating that someone has called
setFocus() on it prior to it being added to the scene; the latter
case seen most commonly in unit tests.
Task-number: QTBUG-24681
Change-Id: Ia1265158108d5d856b57e34a8efee2545cd0deeb
Reviewed-by: Andreas Aardal Hanssen <andreas@hanssen.name>
Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/declarative/graphicsitems/qdeclarativeitem.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index a78f8a6a..86d4f6f7 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -3600,8 +3600,11 @@ void QDeclarativeItem::setSize(const QSizeF &size) bool QDeclarativeItem::hasActiveFocus() const { Q_D(const QDeclarativeItem); - return (focusItem() && focusItem()->isVisible()) && (focusItem() == this || - (d->flags & QGraphicsItem::ItemIsFocusScope && focusItem() != 0)); + QGraphicsItem *fi = focusItem(); + QGraphicsScene *s = scene(); + bool hasOrWillGainFocus = fi && fi->isVisible() && (!s || s->focusItem() == fi); + bool isOrIsScopeOfFocusItem = (fi == this || (d->flags & QGraphicsItem::ItemIsFocusScope)); + return hasOrWillGainFocus && isOrIsScopeOfFocusItem; } /*! |