Remove all references to QAccessible::(Up|Down|Left|Right)

It is now the resonsibility of the bridge to support this
(by querying for QAccessibleInterface::rect())

The windows bridge (currently the only bridge in need of this) has
already been updated to reflect this in commit
7dca461620

Change-Id: Ief1339ab6edc118e2d47e3875e09fa885db65c2f
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@nokia.com>
bb10
Jan-Arve Saether 2012-01-06 15:51:53 +01:00 committed by Qt by Nokia
parent ad16382135
commit 1133c0dd22
8 changed files with 14 additions and 560 deletions

View File

@ -276,10 +276,6 @@ public:
Unrelated = 0x00000000,
Self = 0x00000001,
Up = 0x00000100,
Down = 0x00000200,
Left = 0x00000400,
Right = 0x00000800,
Covers = 0x00001000,
Covered = 0x00002000,
GeometryMask = 0x0000ff00,

View File

@ -414,120 +414,6 @@ bool QAccessibleAbstractScrollArea::isValid() const
return (QAccessibleWidget::isValid() && abstractScrollArea() && abstractScrollArea()->viewport());
}
int QAccessibleAbstractScrollArea::navigate(QAccessible::RelationFlag relation, int entry, QAccessibleInterface **target) const
{
if (!target)
return -1;
*target = 0;
QWidget *targetWidget = 0;
QWidget *entryWidget = 0;
if (relation == QAccessible::Left || relation == QAccessible::Up || relation == QAccessible::Right || relation == QAccessible::Down) {
QWidgetList children = accessibleChildren();
if (entry < 0 || entry > children.count())
return -1;
if (entry == Self)
entryWidget = abstractScrollArea();
else
entryWidget = children.at(entry - 1);
AbstractScrollAreaElement entryElement = elementType(entryWidget);
// Not one of the most beautiful switches I've ever seen, but I believe it has
// to be like this since each case need special handling.
// It might be possible to make it more general, but I'll leave that as an exercise
// to the reader. :-)
switch (relation) {
case QAccessible::Left:
if (entry < 1)
break;
switch (entryElement) {
case Viewport:
if (!isLeftToRight())
targetWidget = abstractScrollArea()->verticalScrollBar();
break;
case HorizontalContainer:
if (!isLeftToRight())
targetWidget = abstractScrollArea()->cornerWidget();
break;
case VerticalContainer:
if (isLeftToRight())
targetWidget = abstractScrollArea()->viewport();
break;
case CornerWidget:
if (isLeftToRight())
targetWidget = abstractScrollArea()->horizontalScrollBar();
break;
default:
break;
}
break;
case QAccessible::Right:
if (entry < 1)
break;
switch (entryElement) {
case Viewport:
if (isLeftToRight())
targetWidget = abstractScrollArea()->verticalScrollBar();
break;
case HorizontalContainer:
targetWidget = abstractScrollArea()->cornerWidget();
break;
case VerticalContainer:
if (!isLeftToRight())
targetWidget = abstractScrollArea()->viewport();
break;
case CornerWidget:
if (!isLeftToRight())
targetWidget = abstractScrollArea()->horizontalScrollBar();
break;
default:
break;
}
break;
case QAccessible::Up:
if (entry < 1)
break;
switch (entryElement) {
case HorizontalContainer:
targetWidget = abstractScrollArea()->viewport();
break;
case CornerWidget:
targetWidget = abstractScrollArea()->verticalScrollBar();
break;
default:
break;
}
break;
case QAccessible::Down:
if (entry < 1)
break;
switch (entryElement) {
case Viewport:
targetWidget = abstractScrollArea()->horizontalScrollBar();
break;
case VerticalContainer:
targetWidget = abstractScrollArea()->cornerWidget();
break;
default:
break;
}
break;
default:
break;
}
} else {
return QAccessibleWidget::navigate(relation, entry, target);
}
if (qobject_cast<const QScrollBar *>(targetWidget))
targetWidget = targetWidget->parentWidget();
*target = QAccessible::queryAccessibleInterface(targetWidget);
return *target ? 0: -1;
}
QAccessibleInterface *QAccessibleAbstractScrollArea::childAt(int x, int y) const
{
if (!abstractScrollArea()->isVisible())

View File

@ -79,7 +79,6 @@ public:
int childCount() const;
int indexOfChild(const QAccessibleInterface *child) const;
bool isValid() const;
int navigate(QAccessible::RelationFlag relation, int entry, QAccessibleInterface **target) const;
QAccessibleInterface *childAt(int x, int y) const;
//protected:

View File

@ -206,31 +206,10 @@ QAccessibleInterface *QAccessibleMenuItem::child(int index) const
int QAccessibleMenuItem::navigate(QAccessible::RelationFlag relation, int entry, QAccessibleInterface **target) const
{
Q_UNUSED(relation);
Q_UNUSED(entry);
*target = 0;
if (entry < 0) {
return -1;
}
switch (relation) {
case QAccessible::Up:
case QAccessible::Down:{
QAccessibleInterface *parentIface = parent();
if (parentIface) {
int index = parentIface->indexOfChild(this);
if (index != -1) {
index += (relation == QAccessible::Down ? +1 : -1);
if (index >= 0)
*target = parentIface->child(index);
}
}
delete parentIface;
break;
}
default:
break;
}
return *target ? 0 : -1;
return -1;
}
void *QAccessibleMenuItem::interface_cast(QAccessible::InterfaceType t)

View File

@ -98,121 +98,6 @@ QList<QWidget*> childWidgets(const QWidget *widget, bool includeTopLevel)
return widgets;
}
static inline int distance(QWidget *source, QWidget *target,
QAccessible::RelationFlag relation)
{
if (!source || !target)
return -1;
int returnValue = -1;
switch (relation) {
case QAccessible::Up:
if (target->y() <= source->y())
returnValue = source->y() - target->y();
break;
case QAccessible::Down:
if (target->y() >= source->y() + source->height())
returnValue = target->y() - (source->y() + source->height());
break;
case QAccessible::Right:
if (target->x() >= source->x() + source->width())
returnValue = target->x() - (source->x() + source->width());
break;
case QAccessible::Left:
if (target->x() <= source->x())
returnValue = source->x() - target->x();
break;
default:
break;
}
return returnValue;
}
static inline QWidget *mdiAreaNavigate(QWidget *area,
QAccessible::RelationFlag relation, int entry)
{
#if defined(QT_NO_MDIAREA) && defined(QT_NO_WORKSPACE)
Q_UNUSED(area);
#endif
#ifndef QT_NO_MDIAREA
const QMdiArea *mdiArea = qobject_cast<QMdiArea *>(area);
#endif
#ifndef QT_NO_WORKSPACE
const QWorkspace *workspace = qobject_cast<QWorkspace *>(area);
#endif
if (true
#ifndef QT_NO_MDIAREA
&& !mdiArea
#endif
#ifndef QT_NO_WORKSPACE
&& !workspace
#endif
)
return 0;
QWidgetList windows;
#ifndef QT_NO_MDIAREA
if (mdiArea) {
foreach (QMdiSubWindow *window, mdiArea->subWindowList())
windows.append(window);
} else
#endif
{
#ifndef QT_NO_WORKSPACE
foreach (QWidget *window, workspace->windowList())
windows.append(window->parentWidget());
#endif
}
if (windows.isEmpty() || entry < 1 || entry > windows.count())
return 0;
QWidget *source = windows.at(entry - 1);
QMap<int, QWidget *> candidates;
foreach (QWidget *window, windows) {
if (source == window)
continue;
int candidateDistance = distance(source, window, relation);
if (candidateDistance >= 0)
candidates.insert(candidateDistance, window);
}
int minimumDistance = INT_MAX;
QWidget *target = 0;
foreach (QWidget *candidate, candidates) {
switch (relation) {
case QAccessible::Up:
case QAccessible::Down:
if (qAbs(candidate->x() - source->x()) < minimumDistance) {
target = candidate;
minimumDistance = qAbs(candidate->x() - source->x());
}
break;
case QAccessible::Left:
case QAccessible::Right:
if (qAbs(candidate->y() - source->y()) < minimumDistance) {
target = candidate;
minimumDistance = qAbs(candidate->y() - source->y());
}
break;
default:
break;
}
if (minimumDistance == 0)
break;
}
#ifndef QT_NO_WORKSPACE
if (workspace) {
foreach (QWidget *widget, workspace->windowList()) {
if (widget->parentWidget() == target)
target = widget;
}
}
#endif
return target;
}
#ifndef QT_NO_TEXTEDIT
/*!
@ -790,24 +675,6 @@ int QAccessibleMdiArea::indexOfChild(const QAccessibleInterface *child) const
return -1;
}
int QAccessibleMdiArea::navigate(QAccessible::RelationFlag relation, int entry, QAccessibleInterface **target) const
{
*target = 0;
QWidget *targetObject = 0;
switch (relation) {
case QAccessible::Up:
case QAccessible::Down:
case QAccessible::Left:
case QAccessible::Right:
targetObject = mdiAreaNavigate(mdiArea(), relation, entry);
break;
default:
return QAccessibleWidget::navigate(relation, entry, target);
}
*target = QAccessible::queryAccessibleInterface(targetObject);
return *target ? 0: -1;
}
QMdiArea *QAccessibleMdiArea::mdiArea() const
{
return static_cast<QMdiArea *>(object());
@ -881,44 +748,6 @@ int QAccessibleMdiSubWindow::indexOfChild(const QAccessibleInterface *child) con
return -1;
}
int QAccessibleMdiSubWindow::navigate(QAccessible::RelationFlag relation, int entry, QAccessibleInterface **target) const
{
*target = 0;
if (!mdiSubWindow()->parent())
return QAccessibleWidget::navigate(relation, entry, target);
QWidget *targetObject = 0;
QMdiSubWindow *source = mdiSubWindow();
switch (relation) {
case QAccessible::Up:
case QAccessible::Down:
case QAccessible::Left:
case QAccessible::Right: {
if (entry != 0)
break;
QWidget *parent = source->parentWidget();
while (parent && !parent->inherits("QMdiArea"))
parent = parent->parentWidget();
QMdiArea *mdiArea = qobject_cast<QMdiArea *>(parent);
if (!mdiArea)
break;
int index = mdiArea->subWindowList().indexOf(source);
if (index == -1)
break;
if (QWidget *dest = mdiAreaNavigate(mdiArea, relation, index + 1)) {
*target = QAccessible::queryAccessibleInterface(dest);
return *target ? 0 : -1;
}
break;
}
default:
return QAccessibleWidget::navigate(relation, entry, target);
}
*target = QAccessible::queryAccessibleInterface(targetObject);
return *target ? 0: -1;
}
QRect QAccessibleMdiSubWindow::rect() const
{
if (mdiSubWindow()->isHidden())
@ -967,24 +796,6 @@ int QAccessibleWorkspace::indexOfChild(const QAccessibleInterface *child) const
return -1;
}
int QAccessibleWorkspace::navigate(QAccessible::RelationFlag relation, int entry, QAccessibleInterface **target) const
{
*target = 0;
QWidget *targetObject = 0;
switch (relation) {
case QAccessible::Up:
case QAccessible::Down:
case QAccessible::Left:
case QAccessible::Right:
targetObject = mdiAreaNavigate(workspace(), relation, entry);
break;
default:
return QAccessibleWidget::navigate(relation, entry, target);
}
*target = QAccessible::queryAccessibleInterface(targetObject);
return *target ? 0: -1;
}
QWorkspace *QAccessibleWorkspace::workspace() const
{
return static_cast<QWorkspace *>(object());
@ -1056,28 +867,6 @@ QAccessibleInterface *QAccessibleCalendarWidget::child(int index) const
return QAccessible::queryAccessibleInterface(calendarView());
}
int QAccessibleCalendarWidget::navigate(QAccessible::RelationFlag relation, int entry, QAccessibleInterface **target) const
{
*target = 0;
if (entry <= 0 || entry > childCount())
return QAccessibleWidget::navigate(relation, entry, target);
QWidget *targetWidget = 0;
switch (relation) {
case QAccessible::Up:
if (entry == 2)
targetWidget = navigationBar();
break;
case QAccessible::Down:
if (entry == 1 && childCount() == 2)
targetWidget = calendarView();
break;
default:
return QAccessibleWidget::navigate(relation, entry, target);
}
*target = QAccessible::queryAccessibleInterface(targetWidget);
return *target ? 0 : -1;
}
QCalendarWidget *QAccessibleCalendarWidget::calendarWidget() const
{
return static_cast<QCalendarWidget *>(object());

View File

@ -154,7 +154,6 @@ public:
int childCount() const;
QAccessibleInterface *child(int index) const;
int indexOfChild(const QAccessibleInterface *child) const;
int navigate(QAccessible::RelationFlag relation, int entry, QAccessibleInterface **target) const;
protected:
QMdiArea *mdiArea() const;
@ -171,7 +170,6 @@ public:
int childCount() const;
QAccessibleInterface *child(int index) const;
int indexOfChild(const QAccessibleInterface *child) const;
int navigate(QAccessible::RelationFlag relation, int entry, QAccessibleInterface **target) const;
QRect rect() const;
protected:
@ -188,7 +186,6 @@ public:
int childCount() const;
QAccessibleInterface *child(int index) const;
int indexOfChild(const QAccessibleInterface *child) const;
int navigate(QAccessible::RelationFlag relation, int entry, QAccessibleInterface **target) const;
protected:
QWorkspace *workspace() const;
@ -221,7 +218,6 @@ public:
int childCount() const;
int indexOfChild(const QAccessibleInterface *child) const;
int navigate(QAccessible::RelationFlag relation, int entry, QAccessibleInterface **target) const;
QAccessibleInterface *child(int index) const;

View File

@ -827,8 +827,14 @@ HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accChild(VARIANT varChildID, I
if (childIndex) {
acc = accessible->child(childIndex - 1);
} else {
// FIXME
Q_ASSERT(0);
// Yes, some AT clients (Active Accessibility Object Inspector)
// actually ask for the same object. As a consequence, we need to clone ourselves:
if (QAccessibleInterface *par = accessible->parent()) {
const int indexOf = par->indexOfChild(accessible);
QAccessibleInterface *clone = par->child(indexOf);
delete par;
acc = clone;
}
}
}

View File

@ -1450,7 +1450,6 @@ void tst_QAccessibility::menuTest()
QAccessibleInterface *iface2 = 0;
// traverse siblings with navigate(Sibling, ...)
int entry;
iface = interface->child(0);
QVERIFY(iface);
QCOMPARE(iface->role(), QAccessible::MenuItem);
@ -1470,36 +1469,6 @@ void tst_QAccessibility::menuTest()
}
delete iface;
// traverse menu items with navigate(Down, ...)
iface = interface->child(0);
QVERIFY(iface);
QCOMPARE(iface->role(), QAccessible::MenuItem);
for (int child = 0; child < 4; ++child) {
entry = iface->navigate(QAccessible::Down, 1, &iface2);
delete iface;
iface = iface2;
QCOMPARE(entry, 0);
QVERIFY(iface);
QCOMPARE(iface->role(), fileRoles[child + 1]);
}
delete iface;
// traverse menu items with navigate(Up, ...)
iface = interface->child(interface->childCount() - 1);
QVERIFY(iface);
QCOMPARE(iface->role(), QAccessible::MenuItem);
for (int child = 3; child >= 0; --child) {
entry = iface->navigate(QAccessible::Up, 1, &iface2);
delete iface;
iface = iface2;
QCOMPARE(entry, 0);
QVERIFY(iface);
QCOMPARE(iface->role(), fileRoles[child]);
}
delete iface;
// "New" item
iface = interface->child(0);
QVERIFY(iface);
@ -1509,7 +1478,6 @@ void tst_QAccessibility::menuTest()
iface2 = iface->child(0);
delete iface;
iface = iface2;
QCOMPARE(entry, 0);
QVERIFY(iface);
QCOMPARE(iface->role(), QAccessible::PopupMenu);
@ -1701,37 +1669,6 @@ void tst_QAccessibility::mdiAreaTest()
QVERIFY(interface);
QCOMPARE(interface->childCount(), subWindowCount);
// Right, right, right, ...
for (int i = 0; i < subWindowCount; ++i) {
QAccessibleInterface *destination = 0;
int index = interface->navigate(QAccessible::Right, i + 1, &destination);
if (i == subWindowCount - 1) {
QVERIFY(!destination);
QCOMPARE(index, -1);
} else {
QVERIFY(destination);
QCOMPARE(index, 0);
QCOMPARE(destination->object(), (QObject*)subWindows.at(i + 1));
delete destination;
}
}
// Left, left, left, ...
for (int i = subWindowCount; i > 0; --i) {
QAccessibleInterface *destination = 0;
int index = interface->navigate(QAccessible::Left, i, &destination);
if (i == 1) {
QVERIFY(!destination);
QCOMPARE(index, -1);
} else {
QVERIFY(destination);
QCOMPARE(index, 0);
QCOMPARE(destination->object(), (QObject*)subWindows.at(i - 2));
delete destination;
}
}
// ### Add test for Up and Down.
}
QTestAccessibility::clearEvents();
}
@ -1747,7 +1684,6 @@ void tst_QAccessibility::mdiSubWindowTest()
QTest::qWait(150);
#endif
bool isSubWindowsPlacedNextToEachOther = false;
const int subWindowCount = 5;
for (int i = 0; i < subWindowCount; ++i) {
QMdiSubWindow *window = mdiArea.addSubWindow(new QPushButton("QAccessibilityTest"));
@ -1762,8 +1698,6 @@ void tst_QAccessibility::mdiSubWindowTest()
QCoreApplication::processEvents();
QTest::qWait(100);
#endif
if (mdiArea.width() >= minimumWidth)
isSubWindowsPlacedNextToEachOther = true;
}
}
@ -1816,23 +1750,6 @@ void tst_QAccessibility::mdiSubWindowTest()
QVERIFY(interface->state().focused);
testWindow->setGeometry(originalGeometry);
if (isSubWindowsPlacedNextToEachOther) {
// This part of the test can only be run if the sub windows are
// placed next to each other.
QAccessibleInterface *destination = interface->child(0);
QVERIFY(destination);
QCOMPARE(destination->object(), (QObject*)testWindow->widget());
delete destination;
QCOMPARE(interface->navigate(QAccessible::Left, 0, &destination), 0);
QVERIFY(destination);
QCOMPARE(destination->object(), (QObject*)subWindows.at(2));
delete destination;
QCOMPARE(interface->navigate(QAccessible::Right, 0, &destination), 0);
QVERIFY(destination);
QCOMPARE(destination->object(), (QObject*)subWindows.at(4));
delete destination;
}
// rect
const QPoint globalPos = testWindow->mapToGlobal(QPoint(0, 0));
QCOMPARE(interface->rect(), QRect(globalPos, testWindow->size()));
@ -2009,37 +1926,6 @@ void tst_QAccessibility::workspaceTest()
QVERIFY(interface);
QCOMPARE(interface->childCount(), subWindowCount);
// Right, right, right, ...
for (int i = 0; i < subWindowCount; ++i) {
QAccessibleInterface *destination = 0;
int index = interface->navigate(QAccessible::Right, i + 1, &destination);
if (i == subWindowCount - 1) {
QVERIFY(!destination);
QCOMPARE(index, -1);
} else {
QVERIFY(destination);
QCOMPARE(index, 0);
QCOMPARE(destination->object(), (QObject*)subWindows.at(i + 1));
delete destination;
}
}
// Left, left, left, ...
for (int i = subWindowCount; i > 0; --i) {
QAccessibleInterface *destination = 0;
int index = interface->navigate(QAccessible::Left, i, &destination);
if (i == 1) {
QVERIFY(!destination);
QCOMPARE(index, -1);
} else {
QVERIFY(destination);
QCOMPARE(index, 0);
QCOMPARE(destination->object(), (QObject*)subWindows.at(i - 2));
delete destination;
}
}
// ### Add test for Up and Down.
}
QTestAccessibility::clearEvents();
}
@ -2274,79 +2160,6 @@ void tst_QAccessibility::abstractScrollAreaTest()
QWidget *cornerWidget = abstractScrollArea.cornerWidget();
QVERIFY(verifyChild(cornerWidget, interface, 3, globalGeometry));
// Test navigate.
QAccessibleInterface *target = 0;
// viewport -> Up -> NOTHING
const int viewportIndex = indexOfChild(interface, viewport);
QVERIFY(viewportIndex != -1);
QCOMPARE(interface->navigate(QAccessible::Up, viewportIndex, &target), -1);
QVERIFY(!target);
// viewport -> Left -> NOTHING
QCOMPARE(interface->navigate(QAccessible::Left, viewportIndex, &target), -1);
QVERIFY(!target);
// viewport -> Down -> horizontalScrollBarContainer
const int horizontalScrollBarContainerIndex = indexOfChild(interface, horizontalScrollBarContainer);
QVERIFY(horizontalScrollBarContainerIndex != -1);
QCOMPARE(interface->navigate(QAccessible::Down, viewportIndex + 1, &target), 0);
QVERIFY(target);
QCOMPARE(target->object(), static_cast<QObject *>(horizontalScrollBarContainer));
delete target;
target = 0;
// horizontalScrollBarContainer -> Left -> NOTHING
QCOMPARE(interface->navigate(QAccessible::Left, horizontalScrollBarContainerIndex + 1, &target), -1);
QVERIFY(!target);
// horizontalScrollBarContainer -> Down -> NOTHING
QVERIFY(horizontalScrollBarContainerIndex != -1);
QCOMPARE(interface->navigate(QAccessible::Down, horizontalScrollBarContainerIndex + 1, &target), -1);
QVERIFY(!target);
// horizontalScrollBarContainer -> Right -> cornerWidget
const int cornerWidgetIndex = indexOfChild(interface, cornerWidget);
QVERIFY(cornerWidgetIndex != -1);
QCOMPARE(interface->navigate(QAccessible::Right, horizontalScrollBarContainerIndex + 1, &target), 0);
QVERIFY(target);
QCOMPARE(target->object(), static_cast<QObject *>(cornerWidget));
delete target;
target = 0;
// cornerWidget -> Down -> NOTHING
QCOMPARE(interface->navigate(QAccessible::Down, cornerWidgetIndex + 1, &target), -1);
QVERIFY(!target);
// cornerWidget -> Right -> NOTHING
QVERIFY(cornerWidgetIndex != -1);
QCOMPARE(interface->navigate(QAccessible::Right, cornerWidgetIndex + 1, &target), -1);
QVERIFY(!target);
// cornerWidget -> Up -> verticalScrollBarContainer
const int verticalScrollBarContainerIndex = indexOfChild(interface, verticalScrollBarContainer);
QVERIFY(verticalScrollBarContainerIndex != -1);
QCOMPARE(interface->navigate(QAccessible::Up, cornerWidgetIndex + 1, &target), 0);
QVERIFY(target);
QCOMPARE(target->object(), static_cast<QObject *>(verticalScrollBarContainer));
delete target;
target = 0;
// verticalScrollBarContainer -> Right -> NOTHING
QCOMPARE(interface->navigate(QAccessible::Right, verticalScrollBarContainerIndex + 1, &target), -1);
QVERIFY(!target);
// verticalScrollBarContainer -> Up -> NOTHING
QCOMPARE(interface->navigate(QAccessible::Up, verticalScrollBarContainerIndex + 1, &target), -1);
QVERIFY(!target);
// verticalScrollBarContainer -> Left -> viewport
QCOMPARE(interface->navigate(QAccessible::Left, verticalScrollBarContainerIndex + 1, &target), 0);
QVERIFY(target);
QCOMPARE(target->object(), static_cast<QObject *>(viewport));
delete target;
target = 0;
QCOMPARE(verifyHierarchy(interface), 0);
delete interface;
@ -2750,29 +2563,19 @@ void tst_QAccessibility::calendarWidgetTest()
QAccessibleInterface *navigationBarInterface = interface->child(0);
QVERIFY(navigationBarInterface);
QCOMPARE(navigationBarInterface->object(), (QObject*)navigationBar);
delete navigationBarInterface;
navigationBarInterface = 0;
// Navigate to the view via Child.
QAccessibleInterface *calendarViewInterface = interface->child(1);
QVERIFY(calendarViewInterface);
QCOMPARE(calendarViewInterface->object(), (QObject*)calendarView);
delete calendarViewInterface;
calendarViewInterface = 0;
QVERIFY(!interface->child(-1));
// Navigate from navigation bar -> view (Down).
QCOMPARE(interface->navigate(QAccessible::Down, 1, &calendarViewInterface), 0);
QVERIFY(calendarViewInterface);
QCOMPARE(calendarViewInterface->object(), (QObject*)calendarView);
// In order for geometric navigation to work they must share the same parent
QCOMPARE(navigationBarInterface->parent()->object(), calendarViewInterface->parent()->object());
QVERIFY(navigationBarInterface->rect().bottom() < calendarViewInterface->rect().top());
delete calendarViewInterface;
calendarViewInterface = 0;
// Navigate from view -> navigation bar (Up).
QCOMPARE(interface->navigate(QAccessible::Up, 2, &navigationBarInterface), 0);
QVERIFY(navigationBarInterface);
QCOMPARE(navigationBarInterface->object(), (QObject*)navigationBar);
delete navigationBarInterface;
navigationBarInterface = 0;