QDeclarative::hasActiveFocus should return false for hidden items
authorAlan Alpert <alan.alpert@nokia.com>
Tue, 30 Aug 2011 08:07:24 +0000 (18:07 +1000)
committerQt by Nokia <qt-info@nokia.com>
Tue, 30 Aug 2011 09:34:00 +0000 (11:34 +0200)
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 <qt_sanity_bot@ovi.com>
Reviewed-by: Alan Alpert <alan.alpert@nokia.com>

src/qtquick1/graphicsitems/qdeclarativeitem.cpp
tests/auto/qtquick1/qdeclarativeitem/tst_qdeclarativeitem.cpp

index 00d5fd6..a480cb2 100644 (file)
@@ -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));
 }
 
 /*!
index b244a24..5b71f23 100644 (file)
@@ -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<QDeclarativeItem*>(o);
+    QVERIFY(i);
+    scene.addItem(i);
+    QVERIFY(!i->hasActiveFocus());
+}
+
 QTEST_MAIN(tst_QDeclarativeItem)
 
 #include "tst_qdeclarativeitem.moc"