From: Alan Alpert Date: Tue, 30 Aug 2011 08:07:24 +0000 (+1000) Subject: QDeclarative::hasActiveFocus should return false for hidden items X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=1025fa7c5247405a3a7289d928addb740afbf95b;p=konrad%2Fqtdeclarative.git QDeclarative::hasActiveFocus should return false for hidden items Forward-port of a1b2be3c8a64aee832c648c6dcdff003f22318a3 from 4.8 Task-number: QTBUG-21045 Change-Id: I055e4dd18e43ccce92d0cae96b10809adb4dcc3a Reviewed-on: http://codereview.qt.nokia.com/3857 Reviewed-by: Qt Sanity Bot Reviewed-by: Alan Alpert --- diff --git a/src/qtquick1/graphicsitems/qdeclarativeitem.cpp b/src/qtquick1/graphicsitems/qdeclarativeitem.cpp index 00d5fd6..a480cb2 100644 --- a/src/qtquick1/graphicsitems/qdeclarativeitem.cpp +++ b/src/qtquick1/graphicsitems/qdeclarativeitem.cpp @@ -3664,8 +3664,8 @@ void QDeclarativeItem::setSize(const QSizeF &size) bool QDeclarativeItem::hasActiveFocus() const { Q_D(const QDeclarativeItem); - return focusItem() == this || - (d->flags & QGraphicsItem::ItemIsFocusScope && focusItem() != 0); + return (focusItem() && focusItem()->isVisible()) && (focusItem() == this || + (d->flags & QGraphicsItem::ItemIsFocusScope && focusItem() != 0)); } /*! diff --git a/tests/auto/qtquick1/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/qtquick1/qdeclarativeitem/tst_qdeclarativeitem.cpp index b244a24..5b71f23 100644 --- a/tests/auto/qtquick1/qdeclarativeitem/tst_qdeclarativeitem.cpp +++ b/tests/auto/qtquick1/qdeclarativeitem/tst_qdeclarativeitem.cpp @@ -91,6 +91,7 @@ private slots: void testQtQuick11Attributes(); void testQtQuick11Attributes_data(); void qtbug_16871(); + void qtbug_21045(); private: QDeclarativeEngine engine; }; @@ -1365,6 +1366,18 @@ void tst_QDeclarativeItem::qtbug_16871() delete o; } +void tst_QDeclarativeItem::qtbug_21045() +{ + QDeclarativeComponent component(&engine); + QGraphicsScene scene; + component.setData("import QtQuick 1.1\nItem{visible: false; focus: true}", QUrl::fromLocalFile("file:")); + QObject *o = component.create(); + QDeclarativeItem* i = qobject_cast(o); + QVERIFY(i); + scene.addItem(i); + QVERIFY(!i->hasActiveFocus()); +} + QTEST_MAIN(tst_QDeclarativeItem) #include "tst_qdeclarativeitem.moc"