if (inverse & QAccessible::Label)
relation |= QAccessible::Labelled;
- if(o == object()) {
- return relation | QAccessible::Self;
- }
-
- QObject *parent = object()->parent();
- if (o->parent() == parent) {
- QAccessibleInterface *sibIface = QAccessible::queryAccessibleInterface(o);
- Q_ASSERT(sibIface);
- QRect wg = rect();
- QRect sg = sibIface->rect();
- if (wg.intersects(sg)) {
- QAccessibleInterface *pIface = 0;
- pIface = sibIface->parent();
- if (pIface && !(sibIface->state().invisible | state().invisible)) {
- int wi = pIface->indexOfChild(this);
- int si = pIface->indexOfChild(sibIface);
-
- if (wi > si)
- relation |= QAccessible::Covers;
- else
- relation |= QAccessible::Covered;
- }
- delete pIface;
- }
- delete sibIface;
-
- return relation;
- }
+ if(o == object())
+ relation |= QAccessible::Self;
return relation;
}
QObject *targetObject = 0;
switch (relation) {
- case QAccessible::Covers:
- if (entry > 0) {
- QAccessibleInterface *pIface = parent();
- if (!pIface)
- return -1;
-
- QRect r = rect();
- int sibCount = pIface->childCount();
- QAccessibleInterface *sibling = 0;
- // FIXME: this code looks very suspicious
- // why start at this index?
- for (int i = pIface->indexOfChild(this) + 2; i <= sibCount && entry; ++i) {
- sibling = pIface->child(i - 1);
- if (!sibling || (sibling->state().invisible)) {
- delete sibling;
- sibling = 0;
- continue;
- }
- if (sibling->rect().intersects(r))
- --entry;
- if (!entry)
- break;
- delete sibling;
- sibling = 0;
- }
- delete pIface;
- *target = sibling;
- if (*target)
- return 0;
- }
- break;
- case QAccessible::Covered:
- if (entry > 0) {
- QAccessibleInterface *pIface = QAccessible::queryAccessibleInterface(parentObject());
- if (!pIface)
- return -1;
-
- QRect r = rect();
- int index = pIface->indexOfChild(this);
- QAccessibleInterface *sibling = 0;
- // FIXME: why end at index?
- for (int i = 0; i < index && entry; ++i) {
- sibling = pIface->child(i);
- Q_ASSERT(sibling);
- if (!sibling || (sibling->state().invisible)) {
- delete sibling;
- sibling = 0;
- continue;
- }
- if (sibling->rect().intersects(r))
- --entry;
- if (!entry)
- break;
- delete sibling;
- sibling = 0;
- }
- delete pIface;
- *target = sibling;
- if (*target)
- return 0;
- }
- break;
-
// Logical
case QAccessible::FocusChild:
{
void statesStructTest();
void navigateHierarchy();
void sliderTest();
- void navigateCovered();
void textAttributes();
void hideShowTest();
QTestAccessibility::clearEvents();
}
-void tst_QAccessibility::navigateCovered()
-{
- {
- QWidget *w = new QWidget(0);
- w->setObjectName(QString("Harry"));
- QWidget *w1 = new QWidget(w);
- w1->setObjectName(QString("1"));
- QWidget *w2 = new QWidget(w);
- w2->setObjectName(QString("2"));
- w->show();
-#if defined(Q_OS_UNIX)
- QCoreApplication::processEvents();
- QTest::qWait(100);
-#endif
-
- w->setFixedSize(6, 6);
- w1->setFixedSize(5, 5);
- w2->setFixedSize(5, 5);
- w2->move(0, 0);
- w1->raise();
-
- QAccessibleInterface *iface1 = QAccessible::queryAccessibleInterface(w1);
- QVERIFY(iface1 != 0);
- QVERIFY(iface1->isValid());
- QAccessibleInterface *iface2 = QAccessible::queryAccessibleInterface(w2);
- QVERIFY(iface2 != 0);
- QVERIFY(iface2->isValid());
- QAccessibleInterface *iface3 = 0;
-
- QCOMPARE(iface1->navigate(QAccessible::Covers, -42, &iface3), -1);
- QVERIFY(iface3 == 0);
- QCOMPARE(iface1->navigate(QAccessible::Covers, 0, &iface3), -1);
- QVERIFY(iface3 == 0);
- QCOMPARE(iface1->navigate(QAccessible::Covers, 2, &iface3), -1);
- QVERIFY(iface3 == 0);
-
- for (int loop = 0; loop < 2; ++loop) {
- for (int x = 0; x < w->width(); ++x) {
- for (int y = 0; y < w->height(); ++y) {
- w1->move(x, y);
- if (w1->geometry().intersects(w2->geometry())) {
- QVERIFY(iface1->relationTo(iface2) & QAccessible::Covers);
- QVERIFY(iface2->relationTo(iface1) & QAccessible::Covered);
- QCOMPARE(iface1->navigate(QAccessible::Covered, 1, &iface3), 0);
- QVERIFY(iface3 != 0);
- QVERIFY(iface3->isValid());
- QCOMPARE(iface3->object(), iface2->object());
- delete iface3; iface3 = 0;
- QCOMPARE(iface2->navigate(QAccessible::Covers, 1, &iface3), 0);
- QVERIFY(iface3 != 0);
- QVERIFY(iface3->isValid());
- QCOMPARE(iface3->object(), iface1->object());
- delete iface3; iface3 = 0;
- } else {
- QVERIFY(!(iface1->relationTo(iface2) & QAccessible::Covers));
- QVERIFY(!(iface2->relationTo(iface1) & QAccessible::Covered));
- QCOMPARE(iface1->navigate(QAccessible::Covered, 1, &iface3), -1);
- QVERIFY(iface3 == 0);
- QCOMPARE(iface1->navigate(QAccessible::Covers, 1, &iface3), -1);
- QVERIFY(iface3 == 0);
- QCOMPARE(iface2->navigate(QAccessible::Covered, 1, &iface3), -1);
- QVERIFY(iface3 == 0);
- QCOMPARE(iface2->navigate(QAccessible::Covers, 1, &iface3), -1);
- QVERIFY(iface3 == 0);
- }
- }
- }
- if (!loop) {
- // switch children for second loop
- w2->raise();
- QAccessibleInterface *temp = iface1;
- iface1 = iface2;
- iface2 = temp;
- }
- }
- delete iface1; iface1 = 0;
- delete iface2; iface2 = 0;
- iface1 = QAccessible::queryAccessibleInterface(w1);
- QVERIFY(iface1 != 0);
- QVERIFY(iface1->isValid());
- iface2 = QAccessible::queryAccessibleInterface(w2);
- QVERIFY(iface2 != 0);
- QVERIFY(iface2->isValid());
-
- w1->move(0,0);
- w2->move(0,0);
- w1->raise();
- QVERIFY(iface1->relationTo(iface2) & QAccessible::Covers);
- QVERIFY(iface2->relationTo(iface1) & QAccessible::Covered);
- QVERIFY(!iface1->state().invisible);
- w1->hide();
- QVERIFY(iface1->state().invisible);
- QVERIFY(!(iface1->relationTo(iface2) & QAccessible::Covers));
- QVERIFY(!(iface2->relationTo(iface1) & QAccessible::Covered));
- QCOMPARE(iface2->navigate(QAccessible::Covered, 1, &iface3), -1);
- QVERIFY(iface3 == 0);
- QCOMPARE(iface1->navigate(QAccessible::Covers, 1, &iface3), -1);
- QVERIFY(iface3 == 0);
-
- delete iface1; iface1 = 0;
- delete iface2; iface2 = 0;
- delete w;
- }
- QTestAccessibility::clearEvents();
-}
-
void tst_QAccessibility::navigateHierarchy()
{
{