summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp')
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp59
1 files changed, 58 insertions, 1 deletions
diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
index b1411ea618..b14e68951b 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the test suite of the Qt Toolkit.
@@ -428,6 +428,7 @@ private slots:
void ensureDirtySceneTransform();
void focusScope();
void focusScope2();
+ void focusScopeItemChangedWhileScopeDoesntHaveFocus();
void stackBefore();
void sceneModality();
void panelModality();
@@ -9371,6 +9372,62 @@ void tst_QGraphicsItem::focusScope2()
QCOMPARE(siblingFocusScope->focusItem(), (QGraphicsItem *)siblingChild2);
}
+class FocusScopeItemPrivate;
+class FocusScopeItem : public QGraphicsItem
+{
+ Q_DECLARE_PRIVATE(FocusScopeItem)
+public:
+ FocusScopeItem(QGraphicsItem *parent = 0);
+ QRectF boundingRect() const { return QRectF(); }
+ void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *) { }
+
+ int focusScopeChanged;
+ FocusScopeItemPrivate *d_ptr;
+};
+
+class FocusScopeItemPrivate : QGraphicsItemPrivate
+{
+ Q_DECLARE_PUBLIC(FocusScopeItem)
+public:
+ void focusScopeItemChange(bool)
+ { ++q_func()->focusScopeChanged; }
+};
+
+FocusScopeItem::FocusScopeItem(QGraphicsItem *parent)
+ : QGraphicsItem(*new FocusScopeItemPrivate, parent), focusScopeChanged(0)
+{
+ setFlag(ItemIsFocusable);
+}
+
+void tst_QGraphicsItem::focusScopeItemChangedWhileScopeDoesntHaveFocus()
+{
+ QGraphicsRectItem rect;
+ rect.setFlags(QGraphicsItem::ItemIsFocusScope | QGraphicsItem::ItemIsFocusable);
+
+ FocusScopeItem *child1 = new FocusScopeItem(&rect);
+ FocusScopeItem *child2 = new FocusScopeItem(&rect);
+
+ QCOMPARE(rect.focusScopeItem(), (QGraphicsItem *)0);
+ QCOMPARE(child1->focusScopeChanged, 0);
+ QCOMPARE(child2->focusScopeChanged, 0);
+ child1->setFocus();
+ QCOMPARE(rect.focusScopeItem(), (QGraphicsItem *)child1);
+ QCOMPARE(child1->focusScopeChanged, 1);
+ QCOMPARE(child2->focusScopeChanged, 0);
+ child2->setFocus();
+ QCOMPARE(rect.focusScopeItem(), (QGraphicsItem *)child2);
+ QCOMPARE(child1->focusScopeChanged, 2);
+ QCOMPARE(child2->focusScopeChanged, 1);
+ child1->setFocus();
+ QCOMPARE(rect.focusScopeItem(), (QGraphicsItem *)child1);
+ QCOMPARE(child1->focusScopeChanged, 3);
+ QCOMPARE(child2->focusScopeChanged, 2);
+ child1->clearFocus();
+ QCOMPARE(rect.focusScopeItem(), (QGraphicsItem *)0);
+ QCOMPARE(child1->focusScopeChanged, 4);
+ QCOMPARE(child2->focusScopeChanged, 2);
+}
+
void tst_QGraphicsItem::stackBefore()
{
QGraphicsRectItem parent;