From beb72b2fbf17a20b4a9d51d75d79f9c3c69bb357 Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Sat, 22 Oct 2011 22:38:14 +0200 Subject: Remove virtual child integers. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes the accessibility apis much simpler and less error prone. Disable the itemviews implementation that is in complex widgets. The itemviews will use the new code from itemviews.h/cpp everywhere now. QToolBox was broken before, now at least it simply exposes all its children. The children are the buttons (tabs of the toolbox) and their contents. Change-Id: I45e218f49f02aebbd678ddfe29f94c2a112a2125 Reviewed-by: Jan-Arve Sæther --- src/gui/accessible/qaccessible.cpp | 6 +- src/gui/accessible/qaccessible.h | 24 +- src/gui/accessible/qaccessible2.cpp | 18 +- src/gui/accessible/qaccessibleobject.cpp | 20 +- src/gui/accessible/qaccessibleobject.h | 12 +- src/plugins/accessible/widgets/complexwidgets.cpp | 30 +- src/plugins/accessible/widgets/complexwidgets.h | 6 +- src/plugins/accessible/widgets/itemviews.cpp | 130 ++--- src/plugins/accessible/widgets/itemviews.h | 68 +-- src/plugins/accessible/widgets/main.cpp | 11 - src/plugins/accessible/widgets/qaccessiblemenu.cpp | 96 +--- src/plugins/accessible/widgets/qaccessiblemenu.h | 37 +- .../accessible/widgets/qaccessiblewidgets.cpp | 427 +++++------------ .../accessible/widgets/qaccessiblewidgets.h | 57 +-- src/plugins/accessible/widgets/rangecontrols.cpp | 61 +-- src/plugins/accessible/widgets/rangecontrols.h | 18 +- src/plugins/accessible/widgets/simplewidgets.cpp | 64 +-- src/plugins/accessible/widgets/simplewidgets.h | 26 +- .../platforms/windows/qwindowsaccessibility.cpp | 111 +++-- src/widgets/accessible/qaccessiblewidget.cpp | 90 +--- src/widgets/accessible/qaccessiblewidget.h | 12 +- src/widgets/itemviews/qlistview.cpp | 12 - src/widgets/itemviews/qtreeview.cpp | 14 - src/widgets/itemviews/qtreeview.h | 2 +- src/widgets/kernel/qwidget.cpp | 2 - tests/auto/integrationtests/macgui/guitest.cpp | 58 ++- tests/auto/integrationtests/macgui/guitest.h | 32 +- tests/auto/integrationtests/macgui/tst_macgui.cpp | 14 +- .../qaccessibility/tst_qaccessibility.cpp | 529 ++++----------------- 29 files changed, 569 insertions(+), 1418 deletions(-) diff --git a/src/gui/accessible/qaccessible.cpp b/src/gui/accessible/qaccessible.cpp index 2aaf66973a..34484ad352 100644 --- a/src/gui/accessible/qaccessible.cpp +++ b/src/gui/accessible/qaccessible.cpp @@ -871,8 +871,7 @@ const QAccessibleInterface *other, int otherChild) const \sa relations(), indexOfChild(), navigate() */ -QAccessible::Relation QAccessibleInterface::relationTo(int, - const QAccessibleInterface *, int) const +QAccessible::Relation QAccessibleInterface::relationTo(const QAccessibleInterface *) const { return Unrelated; } @@ -1206,10 +1205,9 @@ QWindow *QAccessibleInterface::window() const Returns an invalid QVariant if the object doesn't support the action. */ -QVariant QAccessibleInterface::invokeMethod(Method method, int child, const QVariantList ¶ms) +QVariant QAccessibleInterface::invokeMethod(Method method, const QVariantList ¶ms) { Q_UNUSED(method) - Q_UNUSED(child) Q_UNUSED(params) return QVariant(); } diff --git a/src/gui/accessible/qaccessible.h b/src/gui/accessible/qaccessible.h index 7b9b9e12a4..0835793418 100644 --- a/src/gui/accessible/qaccessible.h +++ b/src/gui/accessible/qaccessible.h @@ -369,8 +369,7 @@ public: virtual QWindow *window() const; // relations - virtual Relation relationTo(int child, const QAccessibleInterface *other, - int otherChild) const; + virtual Relation relationTo(const QAccessibleInterface *other) const; virtual QVector > relations() const; virtual int childAt(int x, int y) const = 0; @@ -383,17 +382,16 @@ public: virtual int navigate(RelationFlag relation, int index, QAccessibleInterface **iface) const = 0; // properties and state - virtual QString text(Text t, int child = 0) const = 0; - virtual void setText(Text t, int child, const QString &text) = 0; - virtual QRect rect(int child = 0) const = 0; - virtual Role role(int child = 0) const = 0; - virtual State state(int child = 0) const = 0; + virtual QString text(Text t) const = 0; + virtual void setText(Text t, const QString &text) = 0; + virtual QRect rect() const = 0; + virtual Role role() const = 0; + virtual State state() const = 0; virtual QColor foregroundColor() const; virtual QColor backgroundColor() const; - virtual QVariant invokeMethod(Method method, int child = 0, - const QVariantList ¶ms = QVariantList()); + virtual QVariant invokeMethod(Method method, const QVariantList ¶ms = QVariantList()); inline QSet supportedMethods() { return qvariant_cast >(invokeMethod(ListSupportedMethods)); } @@ -431,18 +429,16 @@ private: class QAccessibleEvent : public QEvent { public: - inline QAccessibleEvent(Type type, int child); - inline int child() const { return c; } + inline QAccessibleEvent(Type type); inline QString value() const { return val; } inline void setValue(const QString &aText) { val = aText; } private: - int c; QString val; }; -inline QAccessibleEvent::QAccessibleEvent(Type atype, int achild) - : QEvent(atype), c(achild) {} +inline QAccessibleEvent::QAccessibleEvent(Type atype) + : QEvent(atype) {} #define QAccessibleInterface_iid "com.trolltech.Qt.QAccessibleInterface" Q_DECLARE_INTERFACE(QAccessibleInterface, QAccessibleInterface_iid) diff --git a/src/gui/accessible/qaccessible2.cpp b/src/gui/accessible/qaccessible2.cpp index f8d06da160..d8bebdc697 100644 --- a/src/gui/accessible/qaccessible2.cpp +++ b/src/gui/accessible/qaccessible2.cpp @@ -401,7 +401,7 @@ QAccessibleSimpleEditableTextInterface::QAccessibleSimpleEditableTextInterface( #ifndef QT_NO_CLIPBOARD static QString textForRange(QAccessibleInterface *iface, int startOffset, int endOffset) { - return iface->text(QAccessible::Value, 0).mid(startOffset, endOffset - startOffset); + return iface->text(QAccessible::Value).mid(startOffset, endOffset - startOffset); } #endif @@ -417,16 +417,16 @@ void QAccessibleSimpleEditableTextInterface::copyText(int startOffset, int endOf void QAccessibleSimpleEditableTextInterface::deleteText(int startOffset, int endOffset) { - QString txt = iface->text(QAccessible::Value, 0); + QString txt = iface->text(QAccessible::Value); txt.remove(startOffset, endOffset - startOffset); - iface->setText(QAccessible::Value, 0, txt); + iface->setText(QAccessible::Value, txt); } void QAccessibleSimpleEditableTextInterface::insertText(int offset, const QString &text) { - QString txt = iface->text(QAccessible::Value, 0); + QString txt = iface->text(QAccessible::Value); txt.insert(offset, text); - iface->setText(QAccessible::Value, 0, txt); + iface->setText(QAccessible::Value, txt); } void QAccessibleSimpleEditableTextInterface::cutText(int startOffset, int endOffset) @@ -446,17 +446,17 @@ void QAccessibleSimpleEditableTextInterface::pasteText(int offset) #ifdef QT_NO_CLIPBOARD Q_UNUSED(offset); #else - QString txt = iface->text(QAccessible::Value, 0); + QString txt = iface->text(QAccessible::Value); txt.insert(offset, QGuiApplication::clipboard()->text()); - iface->setText(QAccessible::Value, 0, txt); + iface->setText(QAccessible::Value, txt); #endif } void QAccessibleSimpleEditableTextInterface::replaceText(int startOffset, int endOffset, const QString &text) { - QString txt = iface->text(QAccessible::Value, 0); + QString txt = iface->text(QAccessible::Value); txt.replace(startOffset, endOffset - startOffset, text); - iface->setText(QAccessible::Value, 0, txt); + iface->setText(QAccessible::Value, txt); } QT_END_NAMESPACE diff --git a/src/gui/accessible/qaccessibleobject.cpp b/src/gui/accessible/qaccessibleobject.cpp index da68579809..695c66654e 100644 --- a/src/gui/accessible/qaccessibleobject.cpp +++ b/src/gui/accessible/qaccessibleobject.cpp @@ -144,13 +144,13 @@ bool QAccessibleObject::isValid() const } /*! \reimp */ -QRect QAccessibleObject::rect(int) const +QRect QAccessibleObject::rect() const { return QRect(); } /*! \reimp */ -void QAccessibleObject::setText(Text, int, const QString &) +void QAccessibleObject::setText(Text, const QString &) { } @@ -227,20 +227,14 @@ int QAccessibleApplication::childAt(int x, int y) const } /*! \reimp */ -QAccessible::Relation QAccessibleApplication::relationTo(int child, const - QAccessibleInterface *other, int otherChild) const +QAccessible::Relation QAccessibleApplication::relationTo(const QAccessibleInterface *other) const { QObject *o = other ? other->object() : 0; if (!o) return Unrelated; if(o == object()) { - if (child && !otherChild) - return Child; - if (!child && otherChild) - return Ancestor; - if (!child && !otherChild) - return Self; + return Self; } return Unrelated; @@ -290,7 +284,7 @@ int QAccessibleApplication::navigate(RelationFlag relation, int, } /*! \reimp */ -QString QAccessibleApplication::text(Text t, int) const +QString QAccessibleApplication::text(Text t) const { switch (t) { case Name: @@ -304,13 +298,13 @@ QString QAccessibleApplication::text(Text t, int) const } /*! \reimp */ -QAccessible::Role QAccessibleApplication::role(int) const +QAccessible::Role QAccessibleApplication::role() const { return Application; } /*! \reimp */ -QAccessible::State QAccessibleApplication::state(int) const +QAccessible::State QAccessibleApplication::state() const { return QGuiApplication::activeWindow() ? Focused : Normal; } diff --git a/src/gui/accessible/qaccessibleobject.h b/src/gui/accessible/qaccessibleobject.h index d562960554..6a02dc86c7 100644 --- a/src/gui/accessible/qaccessibleobject.h +++ b/src/gui/accessible/qaccessibleobject.h @@ -65,8 +65,8 @@ public: QObject *object() const; // properties - QRect rect(int child = 0) const; - void setText(Text t, int child, const QString &text); + QRect rect() const; + void setText(Text t, const QString &text); protected: virtual ~QAccessibleObject(); @@ -86,7 +86,7 @@ public: // relations int childCount() const; int indexOfChild(const QAccessibleInterface*) const; - Relation relationTo(int, const QAccessibleInterface *, int) const; + Relation relationTo(const QAccessibleInterface *other) const; // navigation QAccessibleInterface *parent() const; @@ -95,9 +95,9 @@ public: int navigate(RelationFlag, int, QAccessibleInterface **) const; // properties and state - QString text(Text t, int child = 0) const; - Role role(int child = 0) const; - State state(int child = 0) const; + QString text(Text t) const; + Role role() const; + State state() const; }; #endif // QT_NO_ACCESSIBILITY diff --git a/src/plugins/accessible/widgets/complexwidgets.cpp b/src/plugins/accessible/widgets/complexwidgets.cpp index 5f144b6952..766d18dbff 100644 --- a/src/plugins/accessible/widgets/complexwidgets.cpp +++ b/src/plugins/accessible/widgets/complexwidgets.cpp @@ -68,6 +68,7 @@ QT_BEGIN_NAMESPACE QString Q_GUI_EXPORT qt_accStripAmp(const QString &text); +#if 0 #ifndef QT_NO_ITEMVIEWS /* The MSDN article "Exposing Data Tables through Microsoft Active Accessibility" explains @@ -425,7 +426,7 @@ int QAccessibleItemRow::childCount() const int QAccessibleItemRow::indexOfChild(const QAccessibleInterface *iface) const { - if (!iface || iface->role(0) != Row) + if (!iface || iface->role() != Row) return -1; //### meaningless code? @@ -1437,6 +1438,7 @@ QAccessible::State QAccessibleHeader::state(int child) const return state; } #endif // QT_NO_ITEMVIEWS +#endif // 0 #ifndef QT_NO_TABBAR /*! @@ -1456,14 +1458,14 @@ public: {} QObject *object() const { return 0; } - Role role(int child) const { Q_ASSERT(child == 0); return QAccessible::PageTab; } - State state(int) const { + Role role() const { return QAccessible::PageTab; } + State state() const { QAccessibleInterface *parentInterface = parent(); State state = parentInterface->state(); delete parentInterface; return state; } - QRect rect(int) const { + QRect rect() const { if (!isValid()) return QRect(); @@ -1479,8 +1481,8 @@ public: int childCount() const { return 0; } int indexOfChild(const QAccessibleInterface *) const { return -1; } - QString text(Text, int) const { return qt_accStripAmp(m_parent->tabText(m_index)); } - void setText(Text, int, const QString &) {} + QString text(Text) const { return qt_accStripAmp(m_parent->tabText(m_index)); } + void setText(Text, const QString &) {} QAccessibleInterface *parent() const { return QAccessible::queryAccessibleInterface(m_parent); @@ -1494,17 +1496,12 @@ public: } return -1; } - Relation relationTo(int, const QAccessibleInterface *, int) const + Relation relationTo(const QAccessibleInterface *) const { return QAccessible::Unrelated; } // action interface - int actionCount() { - return 1; - } - - QStringList actionNames() const { return QStringList(pressAction()); @@ -1587,9 +1584,8 @@ int QAccessibleTabBar::childCount() const return tabBar()->count() + 2; } -QString QAccessibleTabBar::text(Text t, int child) const +QString QAccessibleTabBar::text(Text t) const { - Q_ASSERT(child == 0); if (t == QAccessible::Name) { return qt_accStripAmp(tabBar()->tabText(tabBar()->currentIndex())); } @@ -1694,14 +1690,14 @@ int QAccessibleComboBox::indexOfChild(const QAccessibleInterface *child) const } /*! \reimp */ -QString QAccessibleComboBox::text(Text t, int) const +QString QAccessibleComboBox::text(Text t) const { QString str; switch (t) { case Name: #ifndef Q_OS_UNIX // on Linux we use relations for this, name is text (fall through to Value) - str = QAccessibleWidget::text(t, 0); + str = QAccessibleWidget::text(t); break; #endif case Value: @@ -1719,7 +1715,7 @@ QString QAccessibleComboBox::text(Text t, int) const break; } if (str.isEmpty()) - str = QAccessibleWidget::text(t, 0); + str = QAccessibleWidget::text(t); return str; } diff --git a/src/plugins/accessible/widgets/complexwidgets.h b/src/plugins/accessible/widgets/complexwidgets.h index 13fe9beb9f..53997b96ff 100644 --- a/src/plugins/accessible/widgets/complexwidgets.h +++ b/src/plugins/accessible/widgets/complexwidgets.h @@ -99,6 +99,7 @@ public: #endif // QT_NO_SCROLLAREA +#if 0 #ifndef QT_NO_ITEMVIEWS class QAccessibleHeader : public QAccessibleWidget { @@ -225,6 +226,7 @@ private: bool atVP; }; +#endif #endif #ifndef QT_NO_TABBAR @@ -235,7 +237,7 @@ public: explicit QAccessibleTabBar(QWidget *w); int childCount() const; - QString text(Text t, int child) const; + QString text(Text t) const; bool setSelected(int child, bool on, bool extend); QVector selection() const; @@ -261,7 +263,7 @@ public: int indexOfChild(const QAccessibleInterface *child) const; QAccessibleInterface* child(int index) const; - QString text(Text t, int child) const; + QString text(Text t) const; // QAccessibleActionInterface QStringList actionNames() const; diff --git a/src/plugins/accessible/widgets/itemviews.cpp b/src/plugins/accessible/widgets/itemviews.cpp index ae9e95ddb0..6abc27b2a1 100644 --- a/src/plugins/accessible/widgets/itemviews.cpp +++ b/src/plugins/accessible/widgets/itemviews.cpp @@ -222,7 +222,7 @@ QAccessibleTable2Cell *QAccessibleTable2::cell(const QModelIndex &index) const QAccessibleTable2CellInterface *QAccessibleTable2::cellAt(int row, int column) const { - Q_ASSERT(role(0) != QAccessible::Tree); + Q_ASSERT(role() != QAccessible::Tree); QModelIndex index = view->model()->index(row, column); //Q_ASSERT(index.isValid()); if (!index.isValid()) { @@ -357,15 +357,13 @@ QAccessible2::TableModelChange QAccessibleTable2::modelChange() const return change; } -QAccessible::Role QAccessibleTable2::role(int child) const +QAccessible::Role QAccessibleTable2::role() const { - Q_ASSERT(child == 0); return m_role; } -QAccessible::State QAccessibleTable2::state(int child) const +QAccessible::State QAccessibleTable2::state() const { - Q_ASSERT(child == 0); return QAccessible::Normal; } @@ -393,37 +391,35 @@ int QAccessibleTable2::childCount() const int QAccessibleTable2::indexOfChild(const QAccessibleInterface *iface) const { - Q_ASSERT(iface->role(0) != QAccessible::TreeItem); // should be handled by tree class - if (iface->role(0) == QAccessible::Cell || iface->role(0) == QAccessible::ListItem) { + Q_ASSERT(iface->role() != QAccessible::TreeItem); // should be handled by tree class + if (iface->role() == QAccessible::Cell || iface->role() == QAccessible::ListItem) { const QAccessibleTable2Cell* cell = static_cast(iface); return logicalIndex(cell->m_index); - } else if (iface->role(0) == QAccessible::ColumnHeader){ + } else if (iface->role() == QAccessible::ColumnHeader){ const QAccessibleTable2HeaderCell* cell = static_cast(iface); return cell->index + (verticalHeader() ? 1 : 0) + 1; - } else if (iface->role(0) == QAccessible::RowHeader){ + } else if (iface->role() == QAccessible::RowHeader){ const QAccessibleTable2HeaderCell* cell = static_cast(iface); return (cell->index+1) * (view->model()->rowCount()+1) + 1; - } else if (iface->role(0) == QAccessible::Pane) { + } else if (iface->role() == QAccessible::Pane) { return 1; // corner button } else { qWarning() << "WARNING QAccessibleTable2::indexOfChild Fix my children..." - << iface->role(0) << iface->text(QAccessible::Name, 0); + << iface->role() << iface->text(QAccessible::Name); } // FIXME: we are in denial of our children. this should stop. return -1; } -QString QAccessibleTable2::text(Text t, int child) const +QString QAccessibleTable2::text(Text t) const { - Q_ASSERT(child == 0); if (t == QAccessible::Description) return view->accessibleDescription(); return view->accessibleName(); } -QRect QAccessibleTable2::rect(int child) const +QRect QAccessibleTable2::rect() const { - Q_ASSERT(!child); if (!view->isVisible()) return QRect(); QPoint pos = view->mapToGlobal(QPoint(0, 0)); @@ -469,27 +465,11 @@ int QAccessibleTable2::navigate(RelationFlag relation, int index, QAccessibleInt return -1; } -QAccessible::Relation QAccessibleTable2::relationTo(int, const QAccessibleInterface *, int) const +QAccessible::Relation QAccessibleTable2::relationTo(const QAccessibleInterface *) const { return QAccessible::Unrelated; } -#ifndef QT_NO_ACTION -int QAccessibleTable2::userActionCount(int) const -{ - return 0; -} -QString QAccessibleTable2::actionText(int, Text, int) const -{ - return QString(); -} -bool QAccessibleTable2::doAction(int, int, const QVariantList &) -{ - return false; -} -#endif - - // TREE VIEW QModelIndex QAccessibleTree::indexFromLogical(int row, int column) const @@ -541,7 +521,7 @@ int QAccessibleTree::rowCount() const int QAccessibleTree::indexOfChild(const QAccessibleInterface *iface) const { - if (iface->role(0) == QAccessible::TreeItem) { + if (iface->role() == QAccessible::TreeItem) { const QAccessibleTable2Cell* cell = static_cast(iface); const QTreeView *treeView = qobject_cast(view); Q_ASSERT(treeView); @@ -552,13 +532,13 @@ int QAccessibleTree::indexOfChild(const QAccessibleInterface *iface) const //qDebug() << "QAccessibleTree::indexOfChild r " << row << " c " << column << "index " << index; Q_ASSERT(index > treeView->model()->columnCount()); return index; - } else if (iface->role(0) == QAccessible::ColumnHeader){ + } else if (iface->role() == QAccessible::ColumnHeader){ const QAccessibleTable2HeaderCell* cell = static_cast(iface); //qDebug() << "QAccessibleTree::indexOfChild header " << cell->index << "is: " << cell->index + 1; return cell->index + 1; } else { qWarning() << "WARNING QAccessibleTable2::indexOfChild invalid child" - << iface->role(0) << iface->text(QAccessible::Name, 0); + << iface->role() << iface->text(QAccessible::Name); } // FIXME: add scrollbars and don't just ignore them return -1; @@ -596,7 +576,7 @@ int QAccessibleTree::navigate(RelationFlag relation, int index, QAccessibleInter return QAccessibleTable2::navigate(relation, index, iface); } -QAccessible::Relation QAccessibleTree::relationTo(int, const QAccessibleInterface *, int) const +QAccessible::Relation QAccessibleTree::relationTo(const QAccessibleInterface *) const { return QAccessible::Unrelated; } @@ -695,7 +675,7 @@ int QAccessibleTable2Cell::columnIndex() const int QAccessibleTable2Cell::rowIndex() const { - if (role(0) == QAccessible::TreeItem) { + if (role() == QAccessible::TreeItem) { const QTreeView *treeView = qobject_cast(view); Q_ASSERT(treeView); int row = treeView->d_func()->viewIndex(m_index); @@ -723,20 +703,18 @@ QAccessibleTable2Interface* QAccessibleTable2Cell::table() const return QAccessible::queryAccessibleInterface(view)->table2Interface(); } -QAccessible::Role QAccessibleTable2Cell::role(int child) const +QAccessible::Role QAccessibleTable2Cell::role() const { - Q_ASSERT(child == 0); return m_role; } -QAccessible::State QAccessibleTable2Cell::state(int child) const +QAccessible::State QAccessibleTable2Cell::state() const { - Q_ASSERT(child == 0); State st = Normal; QRect globalRect = view->rect(); globalRect.translate(view->mapToGlobal(QPoint(0,0))); - if (!globalRect.intersects(rect(0))) + if (!globalRect.intersects(rect())) st |= Invisible; if (view->selectionModel()->isSelected(m_index)) @@ -768,10 +746,8 @@ bool QAccessibleTable2Cell::isExpandable() const return view->model()->hasChildren(m_index); } -QRect QAccessibleTable2Cell::rect(int child) const +QRect QAccessibleTable2Cell::rect() const { - Q_ASSERT(child == 0); - QRect r; r = view->visualRect(m_index); @@ -781,9 +757,8 @@ QRect QAccessibleTable2Cell::rect(int child) const return r; } -QString QAccessibleTable2Cell::text(Text t, int child) const +QString QAccessibleTable2Cell::text(Text t) const { - Q_ASSERT(child == 0); QAbstractItemModel *model = view->model(); QString value; switch (t) { @@ -802,9 +777,8 @@ QString QAccessibleTable2Cell::text(Text t, int child) const return value; } -void QAccessibleTable2Cell::setText(Text /*t*/, int child, const QString &text) +void QAccessibleTable2Cell::setText(Text /*t*/, const QString &text) { - Q_ASSERT(child == 0); if (!(m_index.flags() & Qt::ItemIsEditable)) return; view->model()->setData(m_index, text); @@ -888,12 +862,10 @@ int QAccessibleTable2Cell::navigate(RelationFlag relation, int index, QAccessibl return -1; } -QAccessible::Relation QAccessibleTable2Cell::relationTo(int child, const QAccessibleInterface *other, int otherChild) const +QAccessible::Relation QAccessibleTable2Cell::relationTo(const QAccessibleInterface *other) const { - Q_ASSERT(child == 0); - Q_ASSERT(otherChild == 0); // we only check for parent-child relationships in trees - if (m_role == QAccessible::TreeItem && other->role(0) == QAccessible::TreeItem) { + if (m_role == QAccessible::TreeItem && other->role() == QAccessible::TreeItem) { QModelIndex otherIndex = static_cast(other)->m_index; // is the other our parent? if (otherIndex.parent() == m_index) @@ -905,46 +877,26 @@ QAccessible::Relation QAccessibleTable2Cell::relationTo(int child, const QAccess return QAccessible::Unrelated; } -#ifndef QT_NO_ACTION -int QAccessibleTable2Cell::userActionCount(int) const -{ - return 0; -} - -QString QAccessibleTable2Cell::actionText(int, Text, int) const -{ - return QString(); -} - -bool QAccessibleTable2Cell::doAction(int, int, const QVariantList &) -{ - return false; -} - QAccessibleTable2HeaderCell::QAccessibleTable2HeaderCell(QAbstractItemView *view_, int index_, Qt::Orientation orientation_) : view(view_), index(index_), orientation(orientation_) { Q_ASSERT(index_ >= 0); } -QAccessible::Role QAccessibleTable2HeaderCell::role(int child) const +QAccessible::Role QAccessibleTable2HeaderCell::role() const { - Q_ASSERT(child == 0); if (orientation == Qt::Horizontal) return QAccessible::ColumnHeader; return QAccessible::RowHeader; } -QAccessible::State QAccessibleTable2HeaderCell::state(int child) const +QAccessible::State QAccessibleTable2HeaderCell::state() const { - Q_ASSERT(child == 0); return QAccessible::Normal; } -QRect QAccessibleTable2HeaderCell::rect(int child) const +QRect QAccessibleTable2HeaderCell::rect() const { - Q_ASSERT(child == 0); - QHeaderView *header = 0; if (false) { #ifndef QT_NO_TABLEVIEW @@ -968,9 +920,8 @@ QRect QAccessibleTable2HeaderCell::rect(int child) const : QRect(zero.x(), zero.y() + sectionPos, header->width(), sectionSize); } -QString QAccessibleTable2HeaderCell::text(Text t, int child) const +QString QAccessibleTable2HeaderCell::text(Text t) const { - Q_ASSERT(child == 0); QAbstractItemModel *model = view->model(); QString value; switch (t) { @@ -989,7 +940,7 @@ QString QAccessibleTable2HeaderCell::text(Text t, int child) const return value; } -void QAccessibleTable2HeaderCell::setText(Text, int, const QString &) +void QAccessibleTable2HeaderCell::setText(Text, const QString &) { return; } @@ -1031,27 +982,6 @@ QAccessible::Relation QAccessibleTable2HeaderCell::relationTo(int, const QAccess return QAccessible::Unrelated; } -#ifndef QT_NO_ACTION -int QAccessibleTable2HeaderCell::userActionCount(int) const -{ - return 0; -} - -QString QAccessibleTable2HeaderCell::actionText(int, Text, int) const -{ - return QString(); -} - -bool QAccessibleTable2HeaderCell::doAction(int, int, const QVariantList &) -{ - return false; -} -#endif - - - -#endif - #endif // QT_NO_ITEMVIEWS QT_END_NAMESPACE diff --git a/src/plugins/accessible/widgets/itemviews.h b/src/plugins/accessible/widgets/itemviews.h index 41d2b6c4ef..deee866c34 100644 --- a/src/plugins/accessible/widgets/itemviews.h +++ b/src/plugins/accessible/widgets/itemviews.h @@ -67,10 +67,10 @@ public: virtual ~QAccessibleTable2(); QObject *object() const { return view; } - Role role(int child) const; - State state(int child) const; - QString text(Text t, int child) const; - QRect rect(int child) const; + Role role() const; + State state() const; + QString text(Text t) const; + QRect rect() const; int childAt(int x, int y) const; int childCount() const; @@ -79,14 +79,9 @@ public: QAccessibleInterface *parent() const; QAccessibleInterface *child(int index) const; int navigate(RelationFlag relation, int index, QAccessibleInterface **iface) const; - Relation relationTo(int child, const QAccessibleInterface *other, int otherChild) const; + Relation relationTo(const QAccessibleInterface *other) const; -#ifndef QT_NO_ACTION - int userActionCount(int child) const; - QString actionText(int action, Text t, int child) const; - bool doAction(int action, int child, const QVariantList ¶ms); -#endif - QVariant invokeMethodEx(Method, int, const QVariantList &) { return QVariant(); } + QVariant invokeMethod(Method, const QVariantList &) { return QVariant(); } // table2 interface virtual QAccessibleTable2CellInterface *cellAt(int row, int column) const; @@ -165,7 +160,7 @@ public: int rowCount() const; int navigate(RelationFlag relation, int index, QAccessibleInterface **iface) const; - Relation relationTo(int child, const QAccessibleInterface *other, int otherChild) const; + Relation relationTo(const QAccessibleInterface *other) const; // table2 interface QAccessibleTable2CellInterface *cellAt(int row, int column) const; @@ -183,31 +178,25 @@ public: QAccessibleTable2Cell(QAbstractItemView *view, const QModelIndex &m_index, QAccessible::Role role); QObject *object() const { return 0; } - Role role(int child) const; - State state(int child) const; - QRect rect(int child) const; + Role role() const; + State state() const; + QRect rect() const; bool isValid() const; int childAt(int, int) const { return 0; } int childCount() const { return 0; } int indexOfChild(const QAccessibleInterface *) const { return -1; } - QString text(Text t, int child) const; - void setText(Text t, int child, const QString &text); + QString text(Text t) const; + void setText(Text t, const QString &text); QAccessibleInterface *parent() const; QAccessibleInterface *child(int) const; int navigate(RelationFlag relation, int m_index, QAccessibleInterface **iface) const; - Relation relationTo(int child, const QAccessibleInterface *other, int otherChild) const; + Relation relationTo(const QAccessibleInterface *other) const; bool isExpandable() const; -#ifndef QT_NO_ACTION - int userActionCount(int child) const; - QString actionText(int action, Text t, int child) const; - bool doAction(int action, int child, const QVariantList ¶ms); -#endif - // cell interface virtual int columnExtent() const; virtual QList columnHeaderCells() const; @@ -238,29 +227,23 @@ public: QAccessibleTable2HeaderCell(QAbstractItemView *view, int index, Qt::Orientation orientation); QObject *object() const { return 0; } - Role role(int child) const; - State state(int child) const; - QRect rect(int child) const; + Role role() const; + State state() const; + QRect rect() const; bool isValid() const; int childAt(int, int) const { return 0; } int childCount() const { return 0; } int indexOfChild(const QAccessibleInterface *) const { return -1; } - QString text(Text t, int child) const; - void setText(Text t, int child, const QString &text); + QString text(Text t) const; + void setText(Text t, const QString &text); QAccessibleInterface *parent() const; QAccessibleInterface *child(int index) const; int navigate(RelationFlag relation, int index, QAccessibleInterface **iface) const; Relation relationTo(int child, const QAccessibleInterface *other, int otherChild) const; -#ifndef QT_NO_ACTION - int userActionCount(int child) const; - QString actionText(int action, Text t, int child) const; - bool doAction(int action, int child, const QVariantList ¶ms); -#endif - private: QAbstractItemView *view; int index; @@ -281,17 +264,17 @@ public: {} QObject *object() const { return 0; } - Role role(int child) const { Q_ASSERT(child == 0); return QAccessible::Pane; } - State state(int child) const { Q_ASSERT(child == 0); return QAccessible::Normal; } - QRect rect(int child) const { Q_ASSERT(child == 0); return QRect(); } + Role role() const { return QAccessible::Pane; } + State state() const { return QAccessible::Normal; } + QRect rect() const { return QRect(); } bool isValid() const { return true; } int childAt(int, int) const { return 0; } int childCount() const { return 0; } int indexOfChild(const QAccessibleInterface *) const { return -1; } - QString text(Text, int) const { return QString(); } - void setText(Text, int, const QString &) {} + QString text(Text) const { return QString(); } + void setText(Text, const QString &) {} QAccessibleInterface *parent() const { return QAccessible::queryAccessibleInterface(view); @@ -312,11 +295,6 @@ public: return QAccessible::Unrelated; } -#ifndef QT_NO_ACTION - int userActionCount(int) const { return 0; } - QString actionText(int, Text, int) const { return QString(); } - bool doAction(int, int, const QVariantList &) { return false; } -#endif private: QAbstractItemView *view; }; diff --git a/src/plugins/accessible/widgets/main.cpp b/src/plugins/accessible/widgets/main.cpp index fb6bd1e95c..d7c8459c22 100644 --- a/src/plugins/accessible/widgets/main.cpp +++ b/src/plugins/accessible/widgets/main.cpp @@ -255,7 +255,6 @@ QAccessibleInterface *AccessibleFactory::create(const QString &classname, QObjec iface = new QAccessibleMenu(widget); #endif #ifndef QT_NO_ITEMVIEWS -#ifdef Q_OS_UNIX } else if (classname == QLatin1String("QAbstractItemView")) { if (qobject_cast(widget)) { iface = new QAccessibleTree(widget); @@ -270,16 +269,6 @@ QAccessibleInterface *AccessibleFactory::create(const QString &classname, QObjec } else { iface = new QAccessibleTable2(widget->parentWidget()); } -#else - } else if (classname == QLatin1String("QHeaderView")) { - iface = new QAccessibleHeader(widget); - } else if (classname == QLatin1String("QAbstractItemView")) { - iface = new QAccessibleItemView(widget); - } else if (classname == QLatin1String("QWidget") - && widget->objectName() == QLatin1String("qt_scrollarea_viewport") - && qobject_cast(widget->parentWidget())) { - iface = new QAccessibleItemView(widget); -#endif // Q_OS_UNIX #endif // QT_NO_ITEMVIEWS #ifndef QT_NO_TABBAR } else if (classname == QLatin1String("QTabBar")) { diff --git a/src/plugins/accessible/widgets/qaccessiblemenu.cpp b/src/plugins/accessible/widgets/qaccessiblemenu.cpp index 8e0f2a0c1a..13a5fe424d 100644 --- a/src/plugins/accessible/widgets/qaccessiblemenu.cpp +++ b/src/plugins/accessible/widgets/qaccessiblemenu.cpp @@ -71,12 +71,6 @@ int QAccessibleMenu::childCount() const return menu()->actions().count(); } -QRect QAccessibleMenu::rect(int child) const -{ - Q_ASSERT(child == 0); - return QAccessibleWidget::rect(child); -} - int QAccessibleMenu::childAt(int x, int y) const { QAction *act = menu()->actionAt(menu()->mapFromGlobal(QPoint(x,y))); @@ -85,11 +79,10 @@ int QAccessibleMenu::childAt(int x, int y) const return menu()->actions().indexOf(act) + 1; } -QString QAccessibleMenu::text(Text t, int child) const +QString QAccessibleMenu::text(Text t) const { - Q_ASSERT(child == 0); - QString tx = QAccessibleWidget::text(t, child); - if (tx.size()) + QString tx = QAccessibleWidget::text(t); + if (!tx.isEmpty()) return tx; if (t == Name) @@ -97,19 +90,11 @@ QString QAccessibleMenu::text(Text t, int child) const return tx; } -QAccessible::Role QAccessibleMenu::role(int child) const +QAccessible::Role QAccessibleMenu::role() const { - Q_ASSERT(child == 0); return PopupMenu; } -QAccessible::State QAccessibleMenu::state(int child) const -{ - Q_ASSERT(child == 0); - State s = QAccessibleWidget::state(child); - return s; -} - QAccessibleInterface *QAccessibleMenu::child(int index) const { if (index < childCount()) @@ -144,7 +129,7 @@ int QAccessibleMenu::navigate(RelationFlag relation, int entry, QAccessibleInter int QAccessibleMenu::indexOfChild( const QAccessibleInterface *child ) const { int index = -1; - Role r = child->role(0); + Role r = child->role(); if ((r == MenuItem || r == Separator) && menu()) { index = menu()->actions().indexOf(qobject_cast(child->object())); if (index != -1) @@ -155,7 +140,7 @@ int QAccessibleMenu::indexOfChild( const QAccessibleInterface *child ) const #ifndef QT_NO_MENUBAR QAccessibleMenuBar::QAccessibleMenuBar(QWidget *w) -: QAccessibleWidget(w) + : QAccessibleWidget(w, MenuBar) { Q_ASSERT(menuBar()); } @@ -170,12 +155,6 @@ int QAccessibleMenuBar::childCount() const return menuBar()->actions().count(); } -QRect QAccessibleMenuBar::rect(int child) const -{ - Q_ASSERT(child == 0); - return QAccessibleWidget::rect(child); -} - QAccessibleInterface *QAccessibleMenuBar::child(int index) const { if (index < childCount()) @@ -195,7 +174,7 @@ int QAccessibleMenuBar::navigate(RelationFlag relation, int entry, QAccessibleIn int QAccessibleMenuBar::indexOfChild(const QAccessibleInterface *child) const { int index = -1; - Role r = child->role(0); + Role r = child->role(); if ((r == MenuItem || r == Separator) && menuBar()) { index = menuBar()->actions().indexOf(qobject_cast(child->object())); if (index != -1) @@ -204,25 +183,6 @@ int QAccessibleMenuBar::indexOfChild(const QAccessibleInterface *child) const return index; } -QString QAccessibleMenuBar::text(Text t, int child) const -{ - Q_ASSERT(child == 0); - return QAccessibleWidget::text(t, child); -} - -QAccessible::Role QAccessibleMenuBar::role(int child) const -{ - Q_ASSERT(child == 0); - return MenuBar; -} - -QAccessible::State QAccessibleMenuBar::state(int child) const -{ - Q_ASSERT(child == 0); - State s = QAccessibleWidget::state(child); - return s; -} - #endif // QT_NO_MENUBAR QAccessibleMenuItem::QAccessibleMenuItem(QWidget *owner, QAction *action) : m_action(action), m_owner(owner) @@ -235,8 +195,12 @@ QAccessibleMenuItem::~QAccessibleMenuItem() int QAccessibleMenuItem::childAt(int x, int y ) const { for (int i = childCount(); i >= 0; --i) { - if (rect(i).contains(x,y)) + QAccessibleInterface *childInterface = child(i); + if (childInterface->rect().contains(x,y)) { + delete childInterface; return i; + } + delete childInterface; } return -1; } @@ -249,7 +213,7 @@ int QAccessibleMenuItem::childCount() const int QAccessibleMenuItem::indexOfChild(const QAccessibleInterface * child) const { Q_ASSERT(child == 0); - if (child->role(0) == PopupMenu && child->object() == m_action->menu()) + if (child->role() == PopupMenu && child->object() == m_action->menu()) return 1; return -1; @@ -318,9 +282,8 @@ QObject *QAccessibleMenuItem::object() const return m_action; } -QRect QAccessibleMenuItem::rect(int child) const +QRect QAccessibleMenuItem::rect() const { - Q_ASSERT(child == 0); QRect rect; QWidget *own = owner(); #ifndef QT_NO_MENUBAR @@ -338,31 +301,27 @@ QRect QAccessibleMenuItem::rect(int child) const return rect; } -QAccessible::Relation QAccessibleMenuItem::relationTo ( int child, const QAccessibleInterface * other, int otherChild ) const +QAccessible::Relation QAccessibleMenuItem::relationTo(const QAccessibleInterface *other) const { - Q_ASSERT(child == 0); if (other->object() == owner()) { return Child; } - Q_UNUSED(child) Q_UNUSED(other) - Q_UNUSED(otherChild) // ### return Unrelated; } -QAccessible::Role QAccessibleMenuItem::role(int) const +QAccessible::Role QAccessibleMenuItem::role() const { return m_action->isSeparator() ? Separator : MenuItem; } -void QAccessibleMenuItem::setText ( Text /*t*/, int /*child*/, const QString & /*text */) +void QAccessibleMenuItem::setText ( Text /*t*/, const QString & /*text */) { } -QAccessible::State QAccessibleMenuItem::state(int child) const +QAccessible::State QAccessibleMenuItem::state() const { - Q_ASSERT(child == 0); QAccessible::State s = Normal; QWidget *own = owner(); @@ -389,9 +348,8 @@ QAccessible::State QAccessibleMenuItem::state(int child) const return s; } -QString QAccessibleMenuItem::text ( Text t, int child ) const +QString QAccessibleMenuItem::text(Text t) const { - Q_ASSERT(child == 0); QString str; switch (t) { case Name: @@ -416,22 +374,6 @@ QString QAccessibleMenuItem::text ( Text t, int child ) const return str; } - -QString QAccessibleMenuItem::actionText(int action, Text text, int child) const -{ - Q_ASSERT(child == 0); - if (!m_action || m_action->isSeparator()) - return QString(); - - if (text == Name && ((action == Press) || (action == DefaultAction))) { - if (m_action->menu()) { - return QMenu::tr("Open"); - } - return QMenu::tr("Execute"); - } - return QString(); -} - QStringList QAccessibleMenuItem::actionNames() const { QStringList actions; diff --git a/src/plugins/accessible/widgets/qaccessiblemenu.h b/src/plugins/accessible/widgets/qaccessiblemenu.h index 2ac8b37b6e..ae5c4ba8cd 100644 --- a/src/plugins/accessible/widgets/qaccessiblemenu.h +++ b/src/plugins/accessible/widgets/qaccessiblemenu.h @@ -61,10 +61,8 @@ public: int childCount() const; int childAt(int x, int y) const; - QRect rect(int child) const; - QString text(Text t, int child) const; - Role role(int child) const; - State state(int child) const; + QString text(Text t) const; + Role role() const; QAccessibleInterface *child(int index) const; QAccessibleInterface *parent() const; int navigate(RelationFlag relation, int entry, QAccessibleInterface **target) const; @@ -83,12 +81,8 @@ public: QAccessibleInterface *child(int index) const; int childCount() const; - QRect rect(int child) const; - QString text(Text t, int child) const; - Role role(int child) const; - State state(int child) const; int navigate(RelationFlag relation, int entry, QAccessibleInterface **target) const; - int indexOfChild( const QAccessibleInterface *child ) const; + int indexOfChild(const QAccessibleInterface *child) const; protected: QMenuBar *menuBar() const; @@ -103,22 +97,21 @@ public: explicit QAccessibleMenuItem(QWidget *owner, QAction *w); virtual ~QAccessibleMenuItem(); - virtual QString actionText ( int action, Text t, int child ) const; - virtual int childAt ( int x, int y ) const; - virtual int childCount () const; - virtual int indexOfChild ( const QAccessibleInterface * child ) const; - virtual bool isValid () const; + virtual int childAt(int x, int y) const; + virtual int childCount() const; + virtual int indexOfChild(const QAccessibleInterface * child) const; + virtual bool isValid() const; QAccessibleInterface *parent() const; QAccessibleInterface *child(int index) const; - virtual int navigate ( RelationFlag relation, int entry, QAccessibleInterface ** target ) const; - virtual QObject * object () const; - virtual QRect rect ( int child ) const; - virtual Relation relationTo ( int child, const QAccessibleInterface * other, int otherChild ) const; - virtual Role role ( int child ) const; - virtual void setText ( Text t, int child, const QString & text ); - virtual State state ( int child ) const; - virtual QString text ( Text t, int child ) const; + virtual int navigate(RelationFlag relation, int entry, QAccessibleInterface ** target) const; + virtual QObject * object() const; + virtual QRect rect() const; + virtual Relation relationTo(const QAccessibleInterface *other) const; + virtual Role role() const; + virtual void setText(Text t, const QString & text ); + virtual State state() const; + virtual QString text(Text t) const; // QAccessibleActionInterface QStringList actionNames() const; diff --git a/src/plugins/accessible/widgets/qaccessiblewidgets.cpp b/src/plugins/accessible/widgets/qaccessiblewidgets.cpp index 31a3aa7032..d2d56065d0 100644 --- a/src/plugins/accessible/widgets/qaccessiblewidgets.cpp +++ b/src/plugins/accessible/widgets/qaccessiblewidgets.cpp @@ -262,18 +262,18 @@ QTextEdit *QAccessibleTextEdit::textEdit() const return static_cast(widget()); } -QString QAccessibleTextEdit::text(Text t, int) const +QString QAccessibleTextEdit::text(Text t) const { if (t == Value) return textEdit()->toPlainText(); - return QAccessibleWidget::text(t, 0); + return QAccessibleWidget::text(t); } -void QAccessibleTextEdit::setText(Text t, int, const QString &text) +void QAccessibleTextEdit::setText(Text t, const QString &text) { if (t != Value) { - QAccessibleWidget::setText(t, 0, text); + QAccessibleWidget::setText(t, text); return; } if (textEdit()->isReadOnly()) @@ -282,7 +282,7 @@ void QAccessibleTextEdit::setText(Text t, int, const QString &text) textEdit()->setText(text); } -QVariant QAccessibleTextEdit::invokeMethod(QAccessible::Method method, int, +QVariant QAccessibleTextEdit::invokeMethod(QAccessible::Method method, const QVariantList ¶ms) { switch (method) { @@ -290,7 +290,7 @@ QVariant QAccessibleTextEdit::invokeMethod(QAccessible::Method method, int, QSet set; set << ListSupportedMethods << SetCursorPosition << GetCursorPosition; return QVariant::fromValue(set | qvariant_cast >( - QAccessibleWidget::invokeMethod(method, 0, params))); + QAccessibleWidget::invokeMethod(method, params))); } case SetCursorPosition: setCursorPosition(params.value(0).toInt()); @@ -298,7 +298,7 @@ QVariant QAccessibleTextEdit::invokeMethod(QAccessible::Method method, int, case GetCursorPosition: return textEdit()->textCursor().position(); default: - return QAccessibleWidget::invokeMethod(method, 0, params); + return QAccessibleWidget::invokeMethod(method, params); } } @@ -775,72 +775,6 @@ QAccessibleToolBox::QAccessibleToolBox(QWidget *widget) Q_ASSERT(qobject_cast(widget)); } -QString QAccessibleToolBox::text(Text textType, int child) const -{ - if (textType != Value || child <= 0 || child > toolBox()->count()) - return QAccessibleWidget::text(textType, child); - return toolBox()->itemText(child - 1); -} - -void QAccessibleToolBox::setText(Text textType, int child, const QString &text) -{ - if (textType != Value || child <= 0 || child > toolBox()->count()) { - QAccessibleWidget::setText(textType, child, text); - return; - } - toolBox()->setItemText(child - 1, text); -} - -QAccessible::State QAccessibleToolBox::state(int child) const -{ - QWidget *childWidget = toolBox()->widget(child - 1); - if (!childWidget) - return QAccessibleWidget::state(child); - QAccessible::State childState = QAccessible::Normal; - if (toolBox()->currentWidget() == childWidget) - childState |= QAccessible::Expanded; - else - childState |= QAccessible::Collapsed; - return childState; -} - -QVariant QAccessibleToolBox::invokeMethod(QAccessible::Method, int, const QVariantList &) -{ - return QVariant(); -} - -int QAccessibleToolBox::childCount() const -{ - return toolBox()->count(); -} - -int QAccessibleToolBox::indexOfChild(const QAccessibleInterface *child) const -{ - if (!child) - return -1; - QWidget *childWidget = qobject_cast(child->object()); - if (!childWidget) - return -1; - int index = toolBox()->indexOf(childWidget); - if (index != -1) - ++index; - return index; -} - -int QAccessibleToolBox::navigate(RelationFlag relation, int entry, QAccessibleInterface **target) const -{ - *target = 0; - if (entry <= 0 || entry > toolBox()->count()) - return QAccessibleWidget::navigate(relation, entry, target); - int index = -1; - if (relation == QAccessible::Up) - index = entry - 2; - else if (relation == QAccessible::Down) - index = entry; - *target = QAccessible::queryAccessibleInterface(toolBox()->widget(index)); - return *target ? 0: -1; -} - QToolBox * QAccessibleToolBox::toolBox() const { return static_cast(object()); @@ -855,25 +789,6 @@ QAccessibleMdiArea::QAccessibleMdiArea(QWidget *widget) Q_ASSERT(qobject_cast(widget)); } -QAccessible::State QAccessibleMdiArea::state(int child) const -{ - if (child < 0) - return QAccessibleWidget::state(child); - if (child == 0) - return QAccessible::Normal; - QList subWindows = mdiArea()->subWindowList(); - if (subWindows.isEmpty() || child > subWindows.count()) - return QAccessibleWidget::state(child); - if (subWindows.at(child - 1) == mdiArea()->activeSubWindow()) - return QAccessible::Focused; - return QAccessible::Normal; -} - -QVariant QAccessibleMdiArea::invokeMethod(QAccessible::Method, int, const QVariantList &) -{ - return QVariant(); -} - int QAccessibleMdiArea::childCount() const { return mdiArea()->subWindowList().count(); @@ -927,28 +842,26 @@ QAccessibleMdiSubWindow::QAccessibleMdiSubWindow(QWidget *widget) Q_ASSERT(qobject_cast(widget)); } -QString QAccessibleMdiSubWindow::text(Text textType, int child) const +QString QAccessibleMdiSubWindow::text(Text textType) const { - if (textType == QAccessible::Name && (child == 0 || child == 1)) { + if (textType == QAccessible::Name) { QString title = mdiSubWindow()->windowTitle(); title.replace(QLatin1String("[*]"), QLatin1String("")); return title; } - return QAccessibleWidget::text(textType, child); + return QAccessibleWidget::text(textType); } -void QAccessibleMdiSubWindow::setText(Text textType, int child, const QString &text) +void QAccessibleMdiSubWindow::setText(Text textType, const QString &text) { - if (textType == QAccessible::Name && (child == 0 || child == 1)) + if (textType == QAccessible::Name) mdiSubWindow()->setWindowTitle(text); else - QAccessibleWidget::setText(textType, child, text); + QAccessibleWidget::setText(textType, text); } -QAccessible::State QAccessibleMdiSubWindow::state(int child) const +QAccessible::State QAccessibleMdiSubWindow::state() const { - if (child != 0 || !mdiSubWindow()->parent()) - return QAccessibleWidget::state(child); QAccessible::State state = QAccessible::Normal | QAccessible::Focusable; if (!mdiSubWindow()->isMaximized()) state |= (QAccessible::Movable | QAccessible::Sizeable); @@ -964,11 +877,6 @@ QAccessible::State QAccessibleMdiSubWindow::state(int child) const return state; } -QVariant QAccessibleMdiSubWindow::invokeMethod(QAccessible::Method, int, const QVariantList &) -{ - return QVariant(); -} - int QAccessibleMdiSubWindow::childCount() const { if (mdiSubWindow()->widget()) @@ -1026,23 +934,14 @@ int QAccessibleMdiSubWindow::navigate(RelationFlag relation, int entry, QAccessi return *target ? 0: -1; } -QRect QAccessibleMdiSubWindow::rect(int child) const +QRect QAccessibleMdiSubWindow::rect() const { if (mdiSubWindow()->isHidden()) return QRect(); if (!mdiSubWindow()->parent()) - return QAccessibleWidget::rect(child); + return QAccessibleWidget::rect(); const QPoint pos = mdiSubWindow()->mapToGlobal(QPoint(0, 0)); - if (child == 0) - return QRect(pos, mdiSubWindow()->size()); - if (child == 1 && mdiSubWindow()->widget()) { - if (mdiSubWindow()->widget()->isHidden()) - return QRect(); - const QRect contentsRect = mdiSubWindow()->contentsRect(); - return QRect(pos.x() + contentsRect.x(), pos.y() + contentsRect.y(), - contentsRect.width(), contentsRect.height()); - } - return QRect(); + return QRect(pos, mdiSubWindow()->size()); } int QAccessibleMdiSubWindow::childAt(int x, int y) const @@ -1051,10 +950,12 @@ int QAccessibleMdiSubWindow::childAt(int x, int y) const return -1; if (!mdiSubWindow()->parent()) return QAccessibleWidget::childAt(x, y); - const QRect globalGeometry = rect(0); + const QRect globalGeometry = rect(); if (!globalGeometry.isValid()) return -1; - const QRect globalChildGeometry = rect(1); + QAccessibleInterface *childIface = child(0); + const QRect globalChildGeometry = childIface->rect(); + delete childIface; if (globalChildGeometry.isValid() && globalChildGeometry.contains(QPoint(x, y))) return 1; if (globalGeometry.contains(QPoint(x, y))) @@ -1076,25 +977,6 @@ QAccessibleWorkspace::QAccessibleWorkspace(QWidget *widget) Q_ASSERT(qobject_cast(widget)); } -QAccessible::State QAccessibleWorkspace::state(int child) const -{ - if (child < 0) - return QAccessibleWidget::state(child); - if (child == 0) - return QAccessible::Normal; - QWidgetList subWindows = workspace()->windowList(); - if (subWindows.isEmpty() || child > subWindows.count()) - return QAccessibleWidget::state(child); - if (subWindows.at(child - 1) == workspace()->activeWindow()) - return QAccessible::Focused; - return QAccessible::Normal; -} - -QVariant QAccessibleWorkspace::invokeMethod(QAccessible::Method, int, const QVariantList &) -{ - return QVariant(); -} - int QAccessibleWorkspace::childCount() const { return workspace()->windowList().count(); @@ -1163,10 +1045,8 @@ QAccessibleTextBrowser::QAccessibleTextBrowser(QWidget *widget) Q_ASSERT(qobject_cast(widget)); } -QAccessible::Role QAccessibleTextBrowser::role(int child) const +QAccessible::Role QAccessibleTextBrowser::role() const { - if (child != 0) - return QAccessibleTextEdit::role(child); return QAccessible::StaticText; } #endif // QT_NO_TEXTBROWSER @@ -1275,15 +1155,6 @@ QAccessibleInterface *QAccessibleDockWidget::child(int index) const return 0; } -int QAccessibleDockWidget::childAt(int x, int y) const -{ - for (int i = childCount(); i >= 0; --i) { - if (rect(i).contains(x,y)) - return i; - } - return -1; -} - int QAccessibleDockWidget::childCount() const { return dockWidget()->widget() ? 2 : 1; @@ -1292,7 +1163,7 @@ int QAccessibleDockWidget::childCount() const int QAccessibleDockWidget::indexOfChild(const QAccessibleInterface *child) const { if (child) { - if (child->role(0) == TitleBar) { + if (child->role() == TitleBar) { return 1; } else { return 2; //### @@ -1301,60 +1172,25 @@ int QAccessibleDockWidget::indexOfChild(const QAccessibleInterface *child) const return -1; } -QAccessible::Role QAccessibleDockWidget::role(int child) const -{ - switch (child) { - case 0: - return Window; - case 1: - return TitleBar; - case 2: - //### - break; - default: - break; - } - return NoRole; -} - -QAccessible::State QAccessibleDockWidget::state(int child) const +QAccessible::Role QAccessibleDockWidget::role() const { - //### mark tabified widgets as invisible - return QAccessibleWidget::state(child); + return Window; } -QRect QAccessibleDockWidget::rect(int child) const +QRect QAccessibleDockWidget::rect() const { QRect rect; - bool mapToGlobal = true; - if (child == 0) { - if (dockWidget()->isFloating()) { - rect = dockWidget()->frameGeometry(); - mapToGlobal = false; - } else { - rect = dockWidget()->rect(); - } - }else if (child == 1) { - QDockWidgetLayout *layout = qobject_cast(dockWidget()->layout()); - rect = layout->titleArea(); - }else if (child == 2) { - if (dockWidget()->widget()) - rect = dockWidget()->widget()->geometry(); - } - if (rect.isNull()) - return rect; - if (mapToGlobal) + if (dockWidget()->isFloating()) { + rect = dockWidget()->frameGeometry(); + } else { + rect = dockWidget()->rect(); rect.moveTopLeft(dockWidget()->mapToGlobal(rect.topLeft())); + } return rect; } -QVariant QAccessibleDockWidget::invokeMethod(QAccessible::Method, int, const QVariantList &) -{ - return QVariant(); -} - QDockWidget *QAccessibleDockWidget::dockWidget() const { return static_cast(object()); @@ -1426,7 +1262,7 @@ int QAccessibleTitleBar::navigate(RelationFlag relation, int entry, QAccessibleI return -1; } -QAccessible::Relation QAccessibleTitleBar::relationTo(int /*child*/, const QAccessibleInterface * /*other*/, int /*otherChild*/) const +QAccessible::Relation QAccessibleTitleBar::relationTo(const QAccessibleInterface * /*otherChild*/) const { return Unrelated; //### } @@ -1448,72 +1284,49 @@ int QAccessibleTitleBar::childCount() const return count; } -QString QAccessibleTitleBar::text(Text t, int child) const +QString QAccessibleTitleBar::text(Text t) const { - if (!child) { - if (t == Name || t == Value) { - return qt_accStripAmp(dockWidget()->windowTitle()); - } + if (t == Name || t == Value) { + return qt_accStripAmp(dockWidget()->windowTitle()); } return QString(); } -QAccessible::State QAccessibleTitleBar::state(int child) const +QAccessible::State QAccessibleTitleBar::state() const { QAccessible::State state = Normal; - if (child) { - QDockWidgetLayout *layout = dockWidgetLayout(); - QAbstractButton *b = static_cast(layout->widgetForRole((QDockWidgetLayout::Role)child)); - if (b) { - if (b->isDown()) - state |= Pressed; - } - } else { - QDockWidget *w = dockWidget(); - if (w->testAttribute(Qt::WA_WState_Visible) == false) - state |= Invisible; - if (w->focusPolicy() != Qt::NoFocus && w->isActiveWindow()) - state |= Focusable; - if (w->hasFocus()) - state |= Focused; - if (!w->isEnabled()) - state |= Unavailable; - } + + QDockWidget *w = dockWidget(); + if (w->testAttribute(Qt::WA_WState_Visible) == false) + state |= Invisible; + if (w->focusPolicy() != Qt::NoFocus && w->isActiveWindow()) + state |= Focusable; + if (w->hasFocus()) + state |= Focused; + if (!w->isEnabled()) + state |= Unavailable; return state; } -QRect QAccessibleTitleBar::rect(int child) const +QRect QAccessibleTitleBar::rect() const { bool mapToGlobal = true; QRect rect; - if (child == 0) { - if (dockWidget()->isFloating()) { - rect = dockWidget()->frameGeometry(); - if (dockWidget()->widget()) { - QPoint globalPos = dockWidget()->mapToGlobal(dockWidget()->widget()->rect().topLeft()); - globalPos.ry()--; - rect.setBottom(globalPos.y()); - mapToGlobal = false; - } - } else { - QDockWidgetLayout *layout = qobject_cast(dockWidget()->layout()); - rect = layout->titleArea(); - } - }else if (child >= 1 && child <= childCount()) { - QDockWidgetLayout *layout = dockWidgetLayout(); - int index = 1; - for (int role = QDockWidgetLayout::CloseButton; role <= QDockWidgetLayout::FloatButton; ++role) { - QWidget *w = layout->widgetForRole((QDockWidgetLayout::Role)role); - if (!w || !w->isVisible()) - continue; - if (index == child) { - rect = w->geometry(); - break; - } - ++index; + + if (dockWidget()->isFloating()) { + rect = dockWidget()->frameGeometry(); + if (dockWidget()->widget()) { + QPoint globalPos = dockWidget()->mapToGlobal(dockWidget()->widget()->rect().topLeft()); + globalPos.ry()--; + rect.setBottom(globalPos.y()); + mapToGlobal = false; } + } else { + QDockWidgetLayout *layout = qobject_cast(dockWidget()->layout()); + rect = layout->titleArea(); } + if (rect.isNull()) return rect; @@ -1525,8 +1338,12 @@ QRect QAccessibleTitleBar::rect(int child) const int QAccessibleTitleBar::childAt(int x, int y) const { for (int i = childCount(); i >= 0; --i) { - if (rect(i).contains(x,y)) + QAccessibleInterface *childIface = child(i - 1); + if (childIface->rect().contains(x,y)) { + delete childIface; return i; + } + delete childIface; } return -1; } @@ -1546,73 +1363,57 @@ QDockWidget *QAccessibleTitleBar::dockWidget() const return m_dockWidget; } -QString QAccessibleTitleBar::actionText(int action, Text t, int child) const -{ - QString str; - if (child >= 1 && child <= childCount()) { - if (t == Name) { - switch (action) { - case Press: - case DefaultAction: - if (child == QDockWidgetLayout::CloseButton) { - str = QDockWidget::tr("Close"); - } else if (child == QDockWidgetLayout::FloatButton) { - str = dockWidget()->isFloating() ? QDockWidget::tr("Dock") - : QDockWidget::tr("Float"); - } - break; - default: - break; - } - } - } - return str; -} - -bool QAccessibleTitleBar::doAction(int action, int child, const QVariantList& /*params*/) +//QString QAccessibleTitleBar::actionText(int action, Text t, int child) const +//{ +// QString str; +// if (child >= 1 && child <= childCount()) { +// if (t == Name) { +// switch (action) { +// case Press: +// case DefaultAction: +// if (child == QDockWidgetLayout::CloseButton) { +// str = QDockWidget::tr("Close"); +// } else if (child == QDockWidgetLayout::FloatButton) { +// str = dockWidget()->isFloating() ? QDockWidget::tr("Dock") +// : QDockWidget::tr("Float"); +// } +// break; +// default: +// break; +// } +// } +// } +// return str; +//} + +//bool QAccessibleTitleBar::doAction(int action, int child, const QVariantList& /*params*/) +//{ +// if (!child || !dockWidget()->isEnabled()) +// return false; + +// switch (action) { +// case DefaultAction: +// case Press: { +// QDockWidgetLayout *layout = dockWidgetLayout(); +// QAbstractButton *btn = static_cast(layout->widgetForRole((QDockWidgetLayout::Role)child)); +// if (btn) +// btn->animateClick(); +// return true; +// break;} +// default: +// break; +// } + +// return false; +//} + +QAccessible::Role QAccessibleTitleBar::role() const +{ + return TitleBar; +} + +void QAccessibleTitleBar::setText(Text /*t*/, const QString &/*text*/) { - if (!child || !dockWidget()->isEnabled()) - return false; - - switch (action) { - case DefaultAction: - case Press: { - QDockWidgetLayout *layout = dockWidgetLayout(); - QAbstractButton *btn = static_cast(layout->widgetForRole((QDockWidgetLayout::Role)child)); - if (btn) - btn->animateClick(); - return true; - break;} - default: - break; - } - - return false; -} - -int QAccessibleTitleBar::userActionCount (int /*child*/) const -{ - return 0; -} - -QAccessible::Role QAccessibleTitleBar::role(int child) const -{ - switch (child) { - case 0: - return TitleBar; - break; - default: - if (child >= 1 && child <= childCount()) - return PushButton; - break; - } - - return NoRole; -} - -void QAccessibleTitleBar::setText(Text /*t*/, int /*child*/, const QString &/*text*/) -{ - } bool QAccessibleTitleBar::isValid() const diff --git a/src/plugins/accessible/widgets/qaccessiblewidgets.h b/src/plugins/accessible/widgets/qaccessiblewidgets.h index c28f9b0f33..04de22bb1e 100644 --- a/src/plugins/accessible/widgets/qaccessiblewidgets.h +++ b/src/plugins/accessible/widgets/qaccessiblewidgets.h @@ -73,10 +73,10 @@ class QAccessibleTextEdit : public QAccessibleWidget, public QAccessibleTextInte public: explicit QAccessibleTextEdit(QWidget *o); - QString text(Text t, int child) const; - void setText(Text t, int control, const QString &text); + QString text(Text t) const; + void setText(Text t, const QString &text); - QVariant invokeMethod(QAccessible::Method method, int child, const QVariantList ¶ms); + QVariant invokeMethod(QAccessible::Method method, const QVariantList ¶ms); // QAccessibleTextInterface void addSelection(int startOffset, int endOffset); @@ -139,13 +139,11 @@ class QAccessibleToolBox : public QAccessibleWidget public: explicit QAccessibleToolBox(QWidget *widget); - QString text(Text textType, int child) const; - void setText(Text textType, int child, const QString &text); - State state(int child) const; - QVariant invokeMethod(QAccessible::Method method, int child, const QVariantList ¶ms); - int childCount() const; - int indexOfChild(const QAccessibleInterface *child) const; - int navigate(RelationFlag relation, int entry, QAccessibleInterface **target) const; +// FIXME we currently expose the toolbox but it is not keyboard navigatable +// and the accessible hierarchy is not exactly beautiful. +// int childCount() const; +// QAccessibleInterface *child(int index) const; +// int indexOfChild(const QAccessibleInterface *child) const; protected: QToolBox *toolBox() const; @@ -157,8 +155,6 @@ class QAccessibleMdiArea : public QAccessibleWidget public: explicit QAccessibleMdiArea(QWidget *widget); - State state(int child) const; - QVariant invokeMethod(QAccessible::Method method, int child, const QVariantList ¶ms); int childCount() const; int indexOfChild(const QAccessibleInterface *child) const; int navigate(RelationFlag relation, int entry, QAccessibleInterface **target) const; @@ -172,14 +168,13 @@ class QAccessibleMdiSubWindow : public QAccessibleWidget public: explicit QAccessibleMdiSubWindow(QWidget *widget); - QString text(Text textType, int child) const; - void setText(Text textType, int child, const QString &text); - State state(int child) const; - QVariant invokeMethod(QAccessible::Method method, int child, const QVariantList ¶ms); + QString text(Text textType) const; + void setText(Text textType, const QString &text); + State state() const; int childCount() const; int indexOfChild(const QAccessibleInterface *child) const; int navigate(RelationFlag relation, int entry, QAccessibleInterface **target) const; - QRect rect(int child) const; + QRect rect() const; int childAt(int x, int y) const; protected: @@ -193,8 +188,6 @@ class QAccessibleWorkspace : public QAccessibleWidget public: explicit QAccessibleWorkspace(QWidget *widget); - State state(int child) const; - QVariant invokeMethod(QAccessible::Method method, int child, const QVariantList ¶ms); int childCount() const; int indexOfChild(const QAccessibleInterface *child) const; int navigate(RelationFlag relation, int entry, QAccessibleInterface **target) const; @@ -218,7 +211,7 @@ class QAccessibleTextBrowser : public QAccessibleTextEdit public: explicit QAccessibleTextBrowser(QWidget *widget); - Role role(int child) const; + Role role() const; }; #endif // QT_NO_TEXTBROWSER @@ -253,12 +246,9 @@ public: QAccessibleInterface *child(int index) const; int indexOfChild(const QAccessibleInterface *child) const; int childCount() const; - QRect rect (int child ) const; - Role role(int child) const; - State state(int child) const; - int childAt(int x, int y) const; + QRect rect () const; + Role role() const; - QVariant invokeMethod(QAccessible::Method method, int child, const QVariantList ¶ms); QDockWidget *dockWidget() const; }; @@ -266,25 +256,22 @@ class QAccessibleTitleBar : public QAccessibleInterface { public: explicit QAccessibleTitleBar(QDockWidget *widget); - QString actionText(int action, Text t, int child) const; - bool doAction(int action, int child, const QVariantList& params = QVariantList()); - int userActionCount ( int child) const; + QAccessibleInterface *parent() const; QAccessibleInterface *child(int index) const; int navigate(RelationFlag relation, int entry, QAccessibleInterface **iface) const; int indexOfChild(const QAccessibleInterface *child) const; int childCount() const; - Relation relationTo(int child, const QAccessibleInterface *other, int otherChild) const; - void setText(Text t, int child, const QString &text); - QString text(Text t, int child) const; - Role role(int child) const; - QRect rect (int child) const; - State state(int child) const; + Relation relationTo(const QAccessibleInterface *other) const; + void setText(Text t, const QString &text); + QString text(Text t) const; + Role role() const; + QRect rect () const; + State state() const; int childAt(int x, int y) const; QObject *object() const; bool isValid() const; - QPointer m_dockWidget; QDockWidget *dockWidget() const; diff --git a/src/plugins/accessible/widgets/rangecontrols.cpp b/src/plugins/accessible/widgets/rangecontrols.cpp index 9eac2730b2..db10a1bff3 100644 --- a/src/plugins/accessible/widgets/rangecontrols.cpp +++ b/src/plugins/accessible/widgets/rangecontrols.cpp @@ -80,12 +80,11 @@ QAbstractSpinBox *QAccessibleAbstractSpinBox::abstractSpinBox() const return qobject_cast(object()); } -QString QAccessibleAbstractSpinBox::text(Text t, int child) const +QString QAccessibleAbstractSpinBox::text(Text t) const { - Q_UNUSED(child) if (t == QAccessible::Value) return abstractSpinBox()->text(); - return QAccessibleWidget::text(t, 0); + return QAccessibleWidget::text(t); } QVariant QAccessibleAbstractSpinBox::currentValue() @@ -116,21 +115,6 @@ QVariant QAccessibleAbstractSpinBox::minimumValue() return abstractSpinBox()->property("minimum"); } -QVariant QAccessibleAbstractSpinBox::invokeMethod(Method method, int child, const QVariantList ¶ms) -{ - switch (method) { - case ListSupportedMethods: { - QSet set; - set << ListSupportedMethods; - return QVariant::fromValue(set | qvariant_cast >( - QAccessibleWidget::invokeMethod(method, child, params))); - } - default: - return QAccessibleWidget::invokeMethod(method, child, params); - } -} - - /*! \class QAccessibleSpinBox \brief The QAccessibleSpinBox class implements the QAccessibleInterface for spinbox widgets. @@ -176,17 +160,11 @@ QDoubleSpinBox *QAccessibleDoubleSpinBox::doubleSpinBox() const return static_cast(object()); } -QVariant QAccessibleDoubleSpinBox::invokeMethod(QAccessible::Method, int, const QVariantList &) -{ - return QVariant(); -} - -QString QAccessibleDoubleSpinBox::text(Text textType, int child) const +QString QAccessibleDoubleSpinBox::text(Text textType) const { - Q_UNUSED(child) if (textType == Value) return doubleSpinBox()->textFromValue(doubleSpinBox()->value()); - return QAccessibleWidget::text(textType, 0); + return QAccessibleWidget::text(textType); } #endif // QT_NO_SPINBOX @@ -217,11 +195,11 @@ QScrollBar *QAccessibleScrollBar::scrollBar() const return qobject_cast(object()); } -QString QAccessibleScrollBar::text(Text t, int child) const +QString QAccessibleScrollBar::text(Text t) const { if (t == Value) return QString::number(scrollBar()->value()); - return QAccessibleAbstractSlider::text(t, child); + return QAccessibleAbstractSlider::text(t); } #endif // QT_NO_SCROLLBAR @@ -252,12 +230,12 @@ QSlider *QAccessibleSlider::slider() const return qobject_cast(object()); } -QString QAccessibleSlider::text(Text t, int child) const +QString QAccessibleSlider::text(Text t) const { if (t == Value) return QString::number(slider()->value()); - return QAccessibleAbstractSlider::text(t, child); + return QAccessibleAbstractSlider::text(t); } QAccessibleAbstractSlider::QAccessibleAbstractSlider(QWidget *w, Role r) @@ -266,20 +244,6 @@ QAccessibleAbstractSlider::QAccessibleAbstractSlider(QWidget *w, Role r) Q_ASSERT(qobject_cast(w)); } -QVariant QAccessibleAbstractSlider::invokeMethod(Method method, int child, const QVariantList ¶ms) -{ - switch (method) { - case ListSupportedMethods: { - QSet set; - set << ListSupportedMethods; - return QVariant::fromValue(set | qvariant_cast >( - QAccessibleWidget::invokeMethod(method, child, params))); - } - default: - return QAccessibleWidget::invokeMethod(method, child, params); - } -} - QVariant QAccessibleAbstractSlider::currentValue() { return abstractSlider()->value(); @@ -316,17 +280,12 @@ QAccessibleDial::QAccessibleDial(QWidget *widget) addControllingSignal(QLatin1String("valueChanged(int)")); } -QString QAccessibleDial::text(Text textType, int) const +QString QAccessibleDial::text(Text textType) const { if (textType == Value) return QString::number(dial()->value()); - return QAccessibleAbstractSlider::text(textType, 0); -} - -QVariant QAccessibleDial::invokeMethod(Method, int, const QVariantList &) -{ - return QVariant(); + return QAccessibleAbstractSlider::text(textType); } QDial *QAccessibleDial::dial() const diff --git a/src/plugins/accessible/widgets/rangecontrols.h b/src/plugins/accessible/widgets/rangecontrols.h index 827c305c49..6719329cd8 100644 --- a/src/plugins/accessible/widgets/rangecontrols.h +++ b/src/plugins/accessible/widgets/rangecontrols.h @@ -64,11 +64,7 @@ class QAccessibleAbstractSpinBox: public QAccessibleWidget, public QAccessibleVa public: explicit QAccessibleAbstractSpinBox(QWidget *w); - QString text(Text t, int child) const; - - bool doAction(int action, int child, const QVariantList ¶ms); - - QVariant invokeMethod(Method method, int child, const QVariantList ¶ms); + QString text(Text t) const; // QAccessibleValueInterface QVariant currentValue(); @@ -96,8 +92,7 @@ class QAccessibleDoubleSpinBox : public QAccessibleAbstractSpinBox public: explicit QAccessibleDoubleSpinBox(QWidget *widget); - QVariant invokeMethod(QAccessible::Method method, int child, const QVariantList ¶ms); - QString text(Text t, int child) const; + QString text(Text t) const; protected: QDoubleSpinBox *doubleSpinBox() const; @@ -110,8 +105,6 @@ class QAccessibleAbstractSlider: public QAccessibleWidget, public QAccessibleVal public: explicit QAccessibleAbstractSlider(QWidget *w, Role r = Slider); - QVariant invokeMethod(Method method, int child, const QVariantList ¶ms); - // QAccessibleValueInterface QVariant currentValue(); void setCurrentValue(const QVariant &value); @@ -127,7 +120,7 @@ class QAccessibleScrollBar : public QAccessibleAbstractSlider { public: explicit QAccessibleScrollBar(QWidget *w); - QString text(Text t, int child) const; + QString text(Text t) const; protected: QScrollBar *scrollBar() const; @@ -139,7 +132,7 @@ class QAccessibleSlider : public QAccessibleAbstractSlider { public: explicit QAccessibleSlider(QWidget *w); - QString text(Text t, int child) const; + QString text(Text t) const; protected: QSlider *slider() const; @@ -152,8 +145,7 @@ class QAccessibleDial : public QAccessibleAbstractSlider public: explicit QAccessibleDial(QWidget *w); - QString text(Text textType, int child) const; - QVariant invokeMethod(Method method, int child, const QVariantList ¶ms); + QString text(Text textType) const; protected: QDial *dial() const; diff --git a/src/plugins/accessible/widgets/simplewidgets.cpp b/src/plugins/accessible/widgets/simplewidgets.cpp index f518fa9241..f83c9fe30e 100644 --- a/src/plugins/accessible/widgets/simplewidgets.cpp +++ b/src/plugins/accessible/widgets/simplewidgets.cpp @@ -105,9 +105,8 @@ QAbstractButton *QAccessibleButton::button() const } /*! \reimp */ -QString QAccessibleButton::text(Text t, int child) const +QString QAccessibleButton::text(Text t) const { - Q_ASSERT(child == 0); QString str; switch (t) { case Accelerator: @@ -130,13 +129,12 @@ QString QAccessibleButton::text(Text t, int child) const break; } if (str.isEmpty()) - str = QAccessibleWidget::text(t, child); + str = QAccessibleWidget::text(t); return qt_accStripAmp(str); } -QAccessible::State QAccessibleButton::state(int child) const +QAccessible::State QAccessibleButton::state() const { - Q_ASSERT(child == 0); State state = QAccessibleWidget::state(); QAbstractButton *b = button(); @@ -261,7 +259,7 @@ bool QAccessibleToolButton::isSplitButton() const #endif } -QAccessible::State QAccessibleToolButton::state(int) const +QAccessible::State QAccessibleToolButton::state() const { QAccessible::State st = QAccessibleButton::state(); if (toolButton()->autoRaise()) @@ -295,7 +293,7 @@ QAccessibleInterface *QAccessibleToolButton::child(int index) const Returns the button's text label, depending on the text \a t, and the \a child. */ -QString QAccessibleToolButton::text(Text t, int) const +QString QAccessibleToolButton::text(Text t) const { QString str; switch (t) { @@ -312,16 +310,6 @@ QString QAccessibleToolButton::text(Text t, int) const return qt_accStripAmp(str); } -/*! - \internal - - Returns the number of actions. 1 to trigger the button, 2 to show the menu. -*/ -int QAccessibleToolButton::actionCount(int) const -{ - return 1; -} - /* The three different tool button types can have the following actions: | DelayedPopup | ShowMenuAction + (PressedAction || CheckedAction) | @@ -379,9 +367,8 @@ QAccessibleDisplay::QAccessibleDisplay(QWidget *w, Role role) { } -QAccessible::Role QAccessibleDisplay::role(int child) const +QAccessible::Role QAccessibleDisplay::role() const { - Q_ASSERT(child == 0); QLabel *l = qobject_cast(object()); if (l) { if (l->pixmap()) @@ -399,12 +386,11 @@ QAccessible::Role QAccessibleDisplay::role(int child) const return ProgressBar; #endif } - return QAccessibleWidget::role(child); + return QAccessibleWidget::role(); } -QString QAccessibleDisplay::text(Text t, int child) const +QString QAccessibleDisplay::text(Text t) const { - Q_ASSERT(child == 0); QString str; switch (t) { case Name: @@ -437,17 +423,13 @@ QString QAccessibleDisplay::text(Text t, int child) const break; } if (str.isEmpty()) - str = QAccessibleWidget::text(t, child);; + str = QAccessibleWidget::text(t); return qt_accStripAmp(str); } -QAccessible::Relation QAccessibleDisplay::relationTo(int child, const QAccessibleInterface *other, - int otherChild) const +QAccessible::Relation QAccessibleDisplay::relationTo(const QAccessibleInterface *other) const { - Q_ASSERT(child == 0); - Relation relation = QAccessibleWidget::relationTo(child, other, otherChild); - if (child || otherChild) - return relation; + Relation relation = QAccessibleWidget::relationTo(other); QObject *o = other->object(); QLabel *label = qobject_cast(object()); @@ -560,9 +542,8 @@ QLineEdit *QAccessibleLineEdit::lineEdit() const return qobject_cast(object()); } -QString QAccessibleLineEdit::text(Text t, int child) const +QString QAccessibleLineEdit::text(Text t) const { - Q_ASSERT(child == 0); QString str; switch (t) { case Value: @@ -573,14 +554,14 @@ QString QAccessibleLineEdit::text(Text t, int child) const break; } if (str.isEmpty()) - str = QAccessibleWidget::text(t, child);; + str = QAccessibleWidget::text(t);; return qt_accStripAmp(str); } -void QAccessibleLineEdit::setText(Text t, int control, const QString &text) +void QAccessibleLineEdit::setText(Text t, const QString &text) { - if (t != Value || control) { - QAccessibleWidget::setText(t, control, text); + if (t != Value) { + QAccessibleWidget::setText(t, text); return; } @@ -593,10 +574,9 @@ void QAccessibleLineEdit::setText(Text t, int control, const QString &text) lineEdit()->setText(newText); } -QAccessible::State QAccessibleLineEdit::state(int child) const +QAccessible::State QAccessibleLineEdit::state() const { - Q_ASSERT(child == 0); - State state = QAccessibleWidget::state(child); + State state = QAccessibleWidget::state(); QLineEdit *l = lineEdit(); if (l->isReadOnly()) @@ -614,17 +594,15 @@ QAccessible::State QAccessibleLineEdit::state(int child) const return state; } -QVariant QAccessibleLineEdit::invokeMethod(QAccessible::Method method, int child, +QVariant QAccessibleLineEdit::invokeMethod(QAccessible::Method method, const QVariantList ¶ms) { - Q_ASSERT(child == 0); - switch (method) { case ListSupportedMethods: { QSet set; set << ListSupportedMethods << SetCursorPosition << GetCursorPosition; return QVariant::fromValue(set | qvariant_cast >( - QAccessibleWidget::invokeMethod(method, child, params))); + QAccessibleWidget::invokeMethod(method, params))); } case SetCursorPosition: setCursorPosition(params.value(0).toInt()); @@ -632,7 +610,7 @@ QVariant QAccessibleLineEdit::invokeMethod(QAccessible::Method method, int child case GetCursorPosition: return cursorPosition(); default: - return QAccessibleWidget::invokeMethod(method, child, params); + return QAccessibleWidget::invokeMethod(method, params); } } diff --git a/src/plugins/accessible/widgets/simplewidgets.h b/src/plugins/accessible/widgets/simplewidgets.h index 8642f8d9b9..25c3150386 100644 --- a/src/plugins/accessible/widgets/simplewidgets.h +++ b/src/plugins/accessible/widgets/simplewidgets.h @@ -62,8 +62,8 @@ class QAccessibleButton : public QAccessibleWidget public: QAccessibleButton(QWidget *w, Role r); - QString text(Text t, int child = 0) const; - State state(int child = 0) const; + QString text(Text t) const; + State state() const; QStringList actionNames() const; void doAction(const QString &actionName); @@ -79,16 +79,12 @@ class QAccessibleToolButton : public QAccessibleButton public: QAccessibleToolButton(QWidget *w, Role role); - State state(int) const; + State state() const; int childCount() const; QAccessibleInterface *child(int index) const; - QString text(Text t, int child) const; - - int actionCount(int child) const; - QString actionText(int action, Text text, int child) const; - bool doAction(int action, int child, const QVariantList ¶ms); + QString text(Text t) const; // QAccessibleActionInterface QStringList actionNames() const; @@ -107,10 +103,10 @@ class QAccessibleDisplay : public QAccessibleWidget, public QAccessibleImageInte public: explicit QAccessibleDisplay(QWidget *w, Role role = StaticText); - QString text(Text t, int child) const; - Role role(int child) const; + QString text(Text t) const; + Role role() const; - Relation relationTo(int child, const QAccessibleInterface *other, int otherChild) const; + Relation relationTo(const QAccessibleInterface *other) const; int navigate(RelationFlag, int entry, QAccessibleInterface **target) const; // QAccessibleImageInterface @@ -127,10 +123,10 @@ class QAccessibleLineEdit : public QAccessibleWidget, public QAccessibleTextInte public: explicit QAccessibleLineEdit(QWidget *o, const QString &name = QString()); - QString text(Text t, int child) const; - void setText(Text t, int control, const QString &text); - State state(int child) const; - QVariant invokeMethod(QAccessible::Method method, int child, const QVariantList ¶ms); + QString text(Text t) const; + void setText(Text t, const QString &text); + State state() const; + QVariant invokeMethod(QAccessible::Method method, const QVariantList ¶ms); // QAccessibleTextInterface void addSelection(int startOffset, int endOffset); diff --git a/src/plugins/platforms/windows/qwindowsaccessibility.cpp b/src/plugins/platforms/windows/qwindowsaccessibility.cpp index 66afb636a2..ee8ecc162e 100644 --- a/src/plugins/platforms/windows/qwindowsaccessibility.cpp +++ b/src/plugins/platforms/windows/qwindowsaccessibility.cpp @@ -50,6 +50,7 @@ #include #include +#include #include #include #include @@ -277,6 +278,8 @@ void showDebug(const char* funcName, const QAccessibleInterface *iface) # define showDebug(f, iface) #endif +typedef QSharedPointer QAIPointer; + // This stuff is used for widgets/items with no window handle: typedef QMap > NotifyMap; Q_GLOBAL_STATIC(NotifyMap, qAccessibleRecentSentEvents) @@ -448,6 +451,11 @@ public: private: ULONG ref; QAccessibleInterface *accessible; + + QAIPointer childPointer(VARIANT varID) + { + return QAIPointer(accessible->child(varID.lVal - 1)); + } }; static inline BSTR QStringToBSTR(const QString &str) @@ -790,18 +798,20 @@ HRESULT STDMETHODCALLTYPE QWindowsAccessible::accLocation(long *pxLeft, long *py if (!accessible->isValid()) return E_FAIL; - QRect rect = accessible->rect(varID.lVal); - if (rect.isValid()) { - *pxLeft = rect.x(); - *pyTop = rect.y(); - *pcxWidth = rect.width(); - *pcyHeight = rect.height(); + QRect rect; + if (varID.lVal) { + QAIPointer child = QAIPointer(accessible->child(varID.lVal - 1)); + if (child->isValid()) + rect = child->rect(); } else { - *pxLeft = 0; - *pyTop = 0; - *pcxWidth = 0; - *pcyHeight = 0; + rect = accessible->rect(); } + + *pxLeft = rect.x(); + *pyTop = rect.y(); + *pcxWidth = rect.width(); + *pcyHeight = rect.height(); + return S_OK; } @@ -998,7 +1008,16 @@ HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accDescription(VARIANT varID, if (!accessible->isValid()) return E_FAIL; - QString descr = accessible->text(Description, varID.lVal); + + QString descr; + if (varID.lVal) { + QAIPointer child = childPointer(varID); + if (!child) + return E_FAIL; + descr = child->text(Description); + } else { + descr = accessible->text(Description); + } if (descr.size()) { *pszDescription = QStringToBSTR(descr); return S_OK; @@ -1014,7 +1033,15 @@ HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accHelp(VARIANT varID, BSTR *p if (!accessible->isValid()) return E_FAIL; - QString help = accessible->text(Help, varID.lVal); + QString help; + if (varID.lVal) { + QAIPointer child = childPointer(varID); + if (!child) + return E_FAIL; + help = child->text(Help); + } else { + help = accessible->text(Help); + } if (help.size()) { *pszHelp = QStringToBSTR(help); return S_OK; @@ -1038,7 +1065,7 @@ HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accKeyboardShortcut(VARIANT va *pszKeyboardShortcut = 0; if (QAccessibleActionInterface *actionIface = accessible->actionInterface()) { - const QString def = actionIface->actionNames().value(0); + const QString def = actionIface->actionNames().value(0); // I CRASH YOU if (!def.isEmpty()) { const QString keyBoardShortCut = actionIface->keyBindingsForAction(def).value(0); if (!keyBoardShortCut.isEmpty()) @@ -1055,9 +1082,17 @@ HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accName(VARIANT varID, BSTR* p if (!accessible->isValid()) return E_FAIL; - QString n = accessible->text(Name, varID.lVal); - if (n.size()) { - *pszName = QStringToBSTR(n); + QString name; + if (varID.lVal) { + QAIPointer child = childPointer(varID); + if (!child) + return E_FAIL; + name = child->text(Name); + } else { + name = accessible->text(Name); + } + if (name.size()) { + *pszName = QStringToBSTR(name); return S_OK; } @@ -1078,7 +1113,16 @@ HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accRole(VARIANT varID, VARIANT if (!accessible->isValid()) return E_FAIL; - Role role = accessible->role(varID.lVal); + Role role; + if (varID.lVal) { + QAIPointer child = childPointer(varID); + if (!child) + return E_FAIL; + role = child->role(); + } else { + role = accessible->role(); + } + if (role != NoRole) { if (role == LayeredPane) role = QAccessible::Pane; @@ -1097,8 +1141,18 @@ HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accState(VARIANT varID, VARIAN if (!accessible->isValid()) return E_FAIL; + State state; + if (varID.lVal) { + QAIPointer child = childPointer(varID); + if (!child.data()) + return E_FAIL; + state = child->state(); + } else { + state = accessible->state(); + } + (*pvarState).vt = VT_I4; - (*pvarState).lVal = accessible->state(varID.lVal); + (*pvarState).lVal = state; return S_OK; } @@ -1106,10 +1160,15 @@ HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accState(VARIANT varID, VARIAN HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accValue(VARIANT varID, BSTR* pszValue) { showDebug(__FUNCTION__, accessible); - if (!accessible->isValid()) + if (!accessible->isValid() || varID.lVal) return E_FAIL; - QString value = accessible->text(Value, varID.lVal); + QString value; + if (accessible->valueInterface()) { + value = QString::number(accessible->valueInterface()->currentValue().toDouble()); + } else { + value = accessible->text(Value); + } if (!value.isNull()) { *pszValue = QStringToBSTR(value); return S_OK; @@ -1197,19 +1256,15 @@ HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accSelection(VARIANT *pvarChil int cc = accessible->childCount(); QVector sel(cc); int selIndex = 0; - for (int i = 1; i <= cc; ++i) { - QAccessibleInterface *child = 0; - int i2 = accessible->navigate(Child, i, &child); + for (int i = 0; i < cc; ++i) { bool isSelected = false; + QAccessibleInterface *child = accessible->child(i); if (child) { - isSelected = child->state(0) & Selected; + isSelected = child->state() & Selected; delete child; - child = 0; - } else { - isSelected = accessible->state(i2) & Selected; } if (isSelected) - sel[selIndex++] = i; + sel[selIndex++] = i+1; } sel.resize(selIndex); if (sel.isEmpty()) { diff --git a/src/widgets/accessible/qaccessiblewidget.cpp b/src/widgets/accessible/qaccessiblewidget.cpp index 6f3e661f2d..9afb45c45e 100644 --- a/src/widgets/accessible/qaccessiblewidget.cpp +++ b/src/widgets/accessible/qaccessiblewidget.cpp @@ -244,13 +244,8 @@ int QAccessibleWidget::childAt(int x, int y) const } /*! \reimp */ -QRect QAccessibleWidget::rect(int child) const +QRect QAccessibleWidget::rect() const { - if (child) { - qWarning("QAccessibleWidget::rect: This implementation does not support subelements! " - "(ID %d unknown for %s)", child, widget()->metaObject()->className()); - } - QWidget *w = widget(); if (!w->isVisible()) return QRect(); @@ -353,8 +348,7 @@ static inline bool isAncestor(const QObject *obj, const QObject *child) /*! \reimp */ -QAccessible::Relation QAccessibleWidget::relationTo(int child, - const QAccessibleInterface *other, int otherChild) const +QAccessible::Relation QAccessibleWidget::relationTo(const QAccessibleInterface *other) const { Relation relation = Unrelated; if (d->asking == this) // recursive call @@ -378,7 +372,7 @@ QAccessible::Relation QAccessibleWidget::relationTo(int child, // test for passive relationships. // d->asking protects from endless recursion. d->asking = this; - int inverse = other->relationTo(otherChild, this, child); + int inverse = other->relationTo(this); d->asking = 0; if (inverse & Controller) @@ -387,12 +381,7 @@ QAccessible::Relation QAccessibleWidget::relationTo(int child, relation |= Labelled; if(o == object()) { - if (child && !otherChild) - return relation | Child; - if (!child && otherChild) - return relation | Ancestor; - if (!child && !otherChild) - return relation | Self; + return relation | Self; } QObject *parent = object()->parent(); @@ -403,12 +392,12 @@ QAccessible::Relation QAccessibleWidget::relationTo(int child, relation |= Sibling; QAccessibleInterface *sibIface = QAccessible::queryAccessibleInterface(o); Q_ASSERT(sibIface); - QRect wg = rect(0); - QRect sg = sibIface->rect(0); + QRect wg = rect(); + QRect sg = sibIface->rect(); if (wg.intersects(sg)) { QAccessibleInterface *pIface = 0; pIface = sibIface->parent(); - if (pIface && !((sibIface->state(0) | state(0)) & Invisible)) { + if (pIface && !((sibIface->state() | state()) & Invisible)) { int wi = pIface->indexOfChild(this); int si = pIface->indexOfChild(sibIface); @@ -508,7 +497,7 @@ int QAccessibleWidget::navigate(RelationFlag relation, int entry, if (!pIface) return -1; - QRect startg = rect(0); + QRect startg = rect(); QPoint startc = startg.center(); QAccessibleInterface *candidate = 0; int mindist = 100000; @@ -517,13 +506,13 @@ int QAccessibleWidget::navigate(RelationFlag relation, int entry, QAccessibleInterface *sibling = 0; sibling = pIface->child(i); Q_ASSERT(sibling); - if ((relationTo(0, sibling, 0) & Self) || (sibling->state(0) & QAccessible::Invisible)) { + if ((relationTo(sibling) & Self) || (sibling->state() & QAccessible::Invisible)) { //ignore ourself and invisible siblings delete sibling; continue; } - QRect sibg = sibling->rect(0); + QRect sibg = sibling->rect(); QPoint sibc = sibg.center(); QPoint sibp; QPoint startp; @@ -590,7 +579,7 @@ int QAccessibleWidget::navigate(RelationFlag relation, int entry, if (!pIface) return -1; - QRect r = rect(0); + QRect r = rect(); int sibCount = pIface->childCount(); QAccessibleInterface *sibling = 0; for (int i = pIface->indexOfChild(this) + 1; i <= sibCount && entry; ++i) { @@ -600,7 +589,7 @@ int QAccessibleWidget::navigate(RelationFlag relation, int entry, sibling = 0; continue; } - if (sibling->rect(0).intersects(r)) + if (sibling->rect().intersects(r)) --entry; if (!entry) break; @@ -619,18 +608,18 @@ int QAccessibleWidget::navigate(RelationFlag relation, int entry, if (!pIface) return -1; - QRect r = rect(0); + QRect r = rect(); int index = pIface->indexOfChild(this); QAccessibleInterface *sibling = 0; for (int i = 1; i < index && entry; ++i) { sibling = pIface->child(i - 1); Q_ASSERT(sibling); - if (!sibling || (sibling->state(0) & Invisible)) { + if (!sibling || (sibling->state() & Invisible)) { delete sibling; sibling = 0; continue; } - if (sibling->rect(0).intersects(r)) + if (sibling->rect().intersects(r)) --entry; if (!entry) break; @@ -682,7 +671,7 @@ int QAccessibleWidget::navigate(RelationFlag relation, int entry, for (int i = 0; i < sibCount && entry; ++i) { candidate = pIface->child(i); Q_ASSERT(candidate); - if (candidate->relationTo(0, this, 0) & Label) + if (candidate->relationTo(this) & Label) --entry; if (!entry) break; @@ -691,7 +680,7 @@ int QAccessibleWidget::navigate(RelationFlag relation, int entry, candidate = 0; } if (!candidate) { - if (pIface->relationTo(0, this, 0) & Label) + if (pIface->relationTo(this) & Label) --entry; if (!entry) candidate = pIface; @@ -718,7 +707,7 @@ int QAccessibleWidget::navigate(RelationFlag relation, int entry, QAccessibleInterface *candidate = QAccessible::queryAccessibleInterface(sender); if (!candidate) continue; - if (candidate->relationTo(0, this, 0)&Controller) + if (candidate->relationTo(this) & Controller) senders << sender; delete candidate; } @@ -767,7 +756,7 @@ int QAccessibleWidget::indexOfChild(const QAccessibleInterface *child) const extern QString qt_setWindowTitle_helperHelper(const QString &, const QWidget*); /*! \reimp */ -QString QAccessibleWidget::text(Text t, int child) const +QString QAccessibleWidget::text(Text t) const { QString str; @@ -777,7 +766,7 @@ QString QAccessibleWidget::text(Text t, int child) const str = d->name; } else if (!widget()->accessibleName().isEmpty()) { str = widget()->accessibleName(); - } else if (!child && widget()->isWindow()) { + } else if (widget()->isWindow()) { if (widget()->isMinimized()) str = qt_setWindowTitle_helperHelper(widget()->windowIconText(), widget()); else @@ -847,31 +836,14 @@ QStringList QAccessibleWidget::keyBindingsForAction(const QString & /* actionNam } /*! \reimp */ -QAccessible::Role QAccessibleWidget::role(int child) const +QAccessible::Role QAccessibleWidget::role() const { - if (!child) - return d->role; - - QWidgetList childList = childWidgets(widget()); - if (childList.count() > 0 && child <= childList.count()) { - QWidget *targetWidget = childList.at(child - 1); - QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(targetWidget); - if (iface) { - QAccessible::Role role = iface->role(0); - delete iface; - return role; - } - } - - return NoRole; + return d->role; } /*! \reimp */ -QAccessible::State QAccessibleWidget::state(int child) const +QAccessible::State QAccessibleWidget::state() const { - if (child) - return Normal; - QAccessible::State state = Normal; QWidget *w = widget(); @@ -903,22 +875,6 @@ QColor QAccessibleWidget::backgroundColor() const return widget()->palette().color(widget()->backgroundRole()); } -QVariant QAccessibleWidget::invokeMethod(Method method, int child, const QVariantList & /*params*/) -{ - if (child) - return QVariant(); - - switch (method) { - case ListSupportedMethods: { - QSet set; - set << ListSupportedMethods << ForegroundColor << BackgroundColor; - return QVariant::fromValue(set); - } - default: - return QVariant(); - } -} - QT_END_NAMESPACE #endif //QT_NO_ACCESSIBILITY diff --git a/src/widgets/accessible/qaccessiblewidget.h b/src/widgets/accessible/qaccessiblewidget.h index e3b5a86356..87edf75f0e 100644 --- a/src/widgets/accessible/qaccessiblewidget.h +++ b/src/widgets/accessible/qaccessiblewidget.h @@ -63,29 +63,27 @@ public: QWindow *window() const; int childCount() const; int indexOfChild(const QAccessibleInterface *child) const; - Relation relationTo(int child, const QAccessibleInterface *other, int otherChild) const; + Relation relationTo(const QAccessibleInterface *other) const; int childAt(int x, int y) const; - QRect rect(int child = 0) const; + QRect rect() const; QAccessibleInterface *parent() const; QAccessibleInterface *child(int index) const; int navigate(RelationFlag rel, int entry, QAccessibleInterface **target) const; - QString text(Text t, int child = 0) const; - Role role(int child = 0) const; - State state(int child = 0) const; + QString text(Text t) const; + Role role() const; + State state() const; QColor foregroundColor() const; QColor backgroundColor() const; - QVariant invokeMethod(Method method, int child, const QVariantList ¶ms); // QAccessibleActionInterface QStringList actionNames() const; void doAction(const QString &actionName); QStringList keyBindingsForAction(const QString &actionName) const; - protected: ~QAccessibleWidget(); QWidget *widget() const; diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp index ee20d8880b..44ae7246c4 100644 --- a/src/widgets/itemviews/qlistview.cpp +++ b/src/widgets/itemviews/qlistview.cpp @@ -3169,11 +3169,7 @@ void QListView::currentChanged(const QModelIndex ¤t, const QModelIndex &pr if (QAccessible::isActive()) { if (current.isValid()) { int entry = visualIndex(current) + 1; -#ifdef Q_OS_UNIX QAccessible::updateAccessibility(this, entry, QAccessible::Focus); -#else - QAccessible::updateAccessibility(viewport(), entry, QAccessible::Focus); -#endif } } #endif @@ -3192,20 +3188,12 @@ void QListView::selectionChanged(const QItemSelection &selected, QModelIndex sel = selected.indexes().value(0); if (sel.isValid()) { int entry = visualIndex(sel) + 1; -#ifdef Q_OS_UNIX QAccessible::updateAccessibility(this, entry, QAccessible::Selection); -#else - QAccessible::updateAccessibility(viewport(), entry, QAccessible::Selection); -#endif } QModelIndex desel = deselected.indexes().value(0); if (desel.isValid()) { int entry = visualIndex(desel) + 1; -#ifdef Q_OS_UNIX QAccessible::updateAccessibility(this, entry, QAccessible::SelectionRemove); -#else - QAccessible::updateAccessibility(viewport(), entry, QAccessible::SelectionRemove); -#endif } } #endif diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index 25cb29ffd2..5674162b05 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -3749,29 +3749,15 @@ void QTreeView::selectionChanged(const QItemSelection &selected, // ### does not work properly for selection ranges. QModelIndex sel = selected.indexes().value(0); if (sel.isValid()) { -#ifdef Q_OS_UNIX int entry = (visualIndex(sel) + (header()?1:0))*sel.model()->columnCount()+sel.column() + 1; Q_ASSERT(entry > 0); QAccessible::updateAccessibility(this, entry, QAccessible::Selection); -#else - int entry = visualIndex(sel) + 1; - if (header()) - ++entry; - QAccessible::updateAccessibility(viewport(), entry, QAccessible::Selection); -#endif } QModelIndex desel = deselected.indexes().value(0); if (desel.isValid()) { -#ifdef Q_OS_UNIX int entry = (visualIndex(desel) + (header()?1:0))*desel.model()->columnCount()+desel.column() + 1; Q_ASSERT(entry > 0); QAccessible::updateAccessibility(this, entry, QAccessible::SelectionRemove); -#else - int entry = visualIndex(desel) + 1; - if (header()) - ++entry; - QAccessible::updateAccessibility(viewport(), entry, QAccessible::SelectionRemove); -#endif } } #endif diff --git a/src/widgets/itemviews/qtreeview.h b/src/widgets/itemviews/qtreeview.h index 47cac2faed..bf8d016e31 100644 --- a/src/widgets/itemviews/qtreeview.h +++ b/src/widgets/itemviews/qtreeview.h @@ -218,7 +218,7 @@ protected: void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); private: - friend class QAccessibleItemView; + //friend class QAccessibleItemView; friend class QAccessibleTable2; friend class QAccessibleTree; friend class QAccessibleTable2Cell; diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 9cf9a550a8..e5ebfba851 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -8192,8 +8192,6 @@ bool QWidget::event(QEvent *event) case QEvent::AccessibilityDescription: case QEvent::AccessibilityHelp: { QAccessibleEvent *ev = static_cast(event); - if (ev->child()) - return false; switch (ev->type()) { #ifndef QT_NO_TOOLTIP case QEvent::AccessibilityDescription: diff --git a/tests/auto/integrationtests/macgui/guitest.cpp b/tests/auto/integrationtests/macgui/guitest.cpp index ac8b66ba9b..e5245528cb 100644 --- a/tests/auto/integrationtests/macgui/guitest.cpp +++ b/tests/auto/integrationtests/macgui/guitest.cpp @@ -58,13 +58,12 @@ class PrintTest : public TestBase { public: - bool operator()(InterfaceChildPair candidate) + bool operator()(QAccessibleInterface *candidate) { qDebug() << ""; - qDebug() << "Name" << candidate.iface->text(QAccessible::Name, candidate.possibleChild); - qDebug() << "Pos" << candidate.iface->rect(candidate.possibleChild); - if (candidate.possibleChild == 0) - qDebug() << "Number of children" << candidate.iface->childCount(); + qDebug() << "Name" << candidate->text(QAccessible::Name); + qDebug() << "Pos" << candidate->rect(); + qDebug() << "Number of children" << candidate->childCount(); return false; } }; @@ -76,9 +75,9 @@ public: QString text; QAccessible::Text textType; - bool operator()(InterfaceChildPair candidate) + bool operator()(QAccessibleInterface *candidate) { - return (candidate.iface->text(textType, candidate.possibleChild) == text); + return (candidate->text(textType) == text); } }; @@ -86,66 +85,63 @@ void WidgetNavigator::printAll(QWidget *widget) { QAccessibleInterface * const iface = QAccessible::queryAccessibleInterface(widget); deleteInDestructor(iface); - printAll(InterfaceChildPair(iface, 0)); + printAll(iface); } -void WidgetNavigator::printAll(InterfaceChildPair interface) +void WidgetNavigator::printAll(QAccessibleInterface *interface) { PrintTest printTest; - recursiveSearch(&printTest, interface.iface, interface.possibleChild); + recursiveSearch(&printTest, interface); } -InterfaceChildPair WidgetNavigator::find(QAccessible::Text textType, const QString &text, QWidget *start) +QAccessibleInterface *WidgetNavigator::find(QAccessible::Text textType, const QString &text, QWidget *start) { - QAccessibleInterface * const iface = QAccessible::queryAccessibleInterface(start); + QAccessibleInterface *const iface = QAccessible::queryAccessibleInterface(start); deleteInDestructor(iface); return find(textType, text, iface); } -InterfaceChildPair WidgetNavigator::find(QAccessible::Text textType, const QString &text, QAccessibleInterface *start) +QAccessibleInterface *WidgetNavigator::find(QAccessible::Text textType, const QString &text, QAccessibleInterface *start) { NameTest nameTest(text, textType); - return recursiveSearch(&nameTest, start, 0); + return recursiveSearch(&nameTest, start); } /* Recursiveley navigates the accessible hiearchy looking for an interface that passsed the Test (meaning it returns true). */ -InterfaceChildPair WidgetNavigator::recursiveSearch(TestBase *test, QAccessibleInterface *iface, int possibleChild) +QAccessibleInterface *WidgetNavigator::recursiveSearch(TestBase *test, QAccessibleInterface *iface) { - QStack todoInterfaces; - todoInterfaces.push(InterfaceChildPair(iface, possibleChild)); + QStack todoInterfaces; + todoInterfaces.push(iface); while (todoInterfaces.isEmpty() == false) { - InterfaceChildPair testInterface = todoInterfaces.pop(); + QAccessibleInterface *testInterface = todoInterfaces.pop(); if ((*test)(testInterface)) return testInterface; - if (testInterface.possibleChild != 0) - continue; - - const int numChildren = testInterface.iface->childCount(); + const int numChildren = testInterface->childCount(); for (int i = 0; i < numChildren; ++i) { - QAccessibleInterface *childInterface = testInterface.iface->child(i); + QAccessibleInterface *childInterface = testInterface->child(i); if (childInterface) { - todoInterfaces.push(InterfaceChildPair(childInterface, 0)); + todoInterfaces.push(childInterface); deleteInDestructor(childInterface); } } } - return InterfaceChildPair(); + return 0; } -void WidgetNavigator::deleteInDestructor(QAccessibleInterface * interface) +void WidgetNavigator::deleteInDestructor(QAccessibleInterface *interface) { interfaces.insert(interface); } -QWidget *WidgetNavigator::getWidget(InterfaceChildPair interface) +QWidget *WidgetNavigator::getWidget(QAccessibleInterface *interface) { - return qobject_cast(interface.iface->object()); + return qobject_cast(interface->object()); } WidgetNavigator::~WidgetNavigator() @@ -275,7 +271,7 @@ void DelayedAction::run() Schedules a mouse click at an interface using a singleShot timer. Only one click can be scheduled at a time. */ -ClickLaterAction::ClickLaterAction(InterfaceChildPair interface, Qt::MouseButtons buttons) +ClickLaterAction::ClickLaterAction(QAccessibleInterface *interface, Qt::MouseButtons buttons) { this->useInterface = true; this->interface = interface; @@ -296,7 +292,7 @@ ClickLaterAction::ClickLaterAction(QWidget *widget, Qt::MouseButtons buttons) void ClickLaterAction::run() { if (useInterface) { - const QPoint globalCenter = interface.iface->rect(interface.possibleChild).center(); + const QPoint globalCenter = interface->rect().center(); NativeEvents::mouseClick(globalCenter, buttons); } else { // use widget const QSize halfSize = widget->size() / 2; @@ -306,7 +302,7 @@ void ClickLaterAction::run() DelayedAction::run(); } -void GuiTester::clickLater(InterfaceChildPair interface, Qt::MouseButtons buttons, int delay) +void GuiTester::clickLater(QAccessibleInterface *interface, Qt::MouseButtons buttons, int delay) { clearSequence(); addToSequence(new ClickLaterAction(interface, buttons), delay); diff --git a/tests/auto/integrationtests/macgui/guitest.h b/tests/auto/integrationtests/macgui/guitest.h index 432021c54a..170fc5c19c 100644 --- a/tests/auto/integrationtests/macgui/guitest.h +++ b/tests/auto/integrationtests/macgui/guitest.h @@ -54,23 +54,9 @@ QT_USE_NAMESPACE - Simulating platform mouse and keybord events. */ -/* - InterfaceChildPair specifies an accessibilty interface item. -*/ -class InterfaceChildPair { -public: - InterfaceChildPair() : iface(0), possibleChild(0) {} - InterfaceChildPair(QAccessibleInterface *iface, int possibleChild) - :iface(iface), possibleChild(possibleChild) - { } - - QAccessibleInterface *iface; - int possibleChild; -}; - class TestBase { public: - virtual bool operator()(InterfaceChildPair candidate) = 0; + virtual bool operator()(QAccessibleInterface *candidate) = 0; virtual ~TestBase() {} }; @@ -83,15 +69,15 @@ public: ~WidgetNavigator(); void printAll(QWidget *widget); - void printAll(InterfaceChildPair interface); + void printAll(QAccessibleInterface *interface); - InterfaceChildPair find(QAccessible::Text textType, const QString &text, QWidget *start); - InterfaceChildPair find(QAccessible::Text textType, const QString &text, QAccessibleInterface *start); + QAccessibleInterface *find(QAccessible::Text textType, const QString &text, QWidget *start); + QAccessibleInterface *find(QAccessible::Text textType, const QString &text, QAccessibleInterface *start); - InterfaceChildPair recursiveSearch(TestBase *test, QAccessibleInterface *iface, int possibleChild); + QAccessibleInterface *recursiveSearch(TestBase *test, QAccessibleInterface *iface); void deleteInDestructor(QAccessibleInterface * interface); - static QWidget *getWidget(InterfaceChildPair interface); + static QWidget *getWidget(QAccessibleInterface *interface); private: QSet interfaces; }; @@ -141,13 +127,13 @@ class ClickLaterAction : public DelayedAction { Q_OBJECT public: - ClickLaterAction(InterfaceChildPair interface, Qt::MouseButtons buttons = Qt::LeftButton); + ClickLaterAction(QAccessibleInterface *interface, Qt::MouseButtons buttons = Qt::LeftButton); ClickLaterAction(QWidget *widget, Qt::MouseButtons buttons = Qt::LeftButton); protected slots: void run(); private: bool useInterface; - InterfaceChildPair interface; + QAccessibleInterface *interface; QWidget *widget; Qt::MouseButtons buttons; }; @@ -168,7 +154,7 @@ public: protected slots: void exitLoopSlot(); protected: - void clickLater(InterfaceChildPair interface, Qt::MouseButtons buttons = Qt::LeftButton, int delay = 300); + void clickLater(QAccessibleInterface *interface, Qt::MouseButtons buttons = Qt::LeftButton, int delay = 300); void clickLater(QWidget *widget, Qt::MouseButtons buttons = Qt::LeftButton, int delay = 300); void clearSequence(); diff --git a/tests/auto/integrationtests/macgui/tst_macgui.cpp b/tests/auto/integrationtests/macgui/tst_macgui.cpp index 1552db21ab..9ff2897aa8 100644 --- a/tests/auto/integrationtests/macgui/tst_macgui.cpp +++ b/tests/auto/integrationtests/macgui/tst_macgui.cpp @@ -116,8 +116,8 @@ void tst_MacGui::dummy() box->show(); // Find the "OK" button and schedule a press. - InterfaceChildPair interface = wn.find(QAccessible::Name, "OK", box); - QVERIFY(interface.iface); + QAccessibleInterface *interface = wn.find(QAccessible::Name, "OK", box); + QVERIFY(interface); const int delay = 1000; clickLater(interface, Qt::LeftButton, delay); @@ -142,8 +142,8 @@ void tst_MacGui::splashScreenModality() box.show(); // Find the "OK" button and schedule a press. - InterfaceChildPair interface = wn.find(QAccessible::Name, "OK", &box); - QVERIFY(interface.iface); + QAccessibleInterface *interface = wn.find(QAccessible::Name, "OK", &box); + QVERIFY(interface); const int delay = 1000; clickLater(interface, Qt::LeftButton, delay); @@ -220,8 +220,8 @@ void tst_MacGui::spinBoxArrowButtons() const QImage noFocus = grabWindowContents(&colorWidget).toImage(); // Set focus by clicking the less button. - InterfaceChildPair lessInterface = wn.find(QAccessible::Name, "Less", &spinBox); - QVERIFY(lessInterface.iface); + QAccessibleInterface *lessInterface = wn.find(QAccessible::Name, "Less", &spinBox); + QVERIFY(lessInterface); const int delay = 500; clickLater(lessInterface, Qt::LeftButton, delay); const int timeout = 1; @@ -231,7 +231,7 @@ void tst_MacGui::spinBoxArrowButtons() const QImage focus = grabWindowContents(&colorWidget).toImage(); // Compare the arrow area of the less button to see if it moved. - const QRect lessRect = lessInterface.iface->rect(lessInterface.possibleChild); + const QRect lessRect = lessInterface->rect(); const QRect lessLocalRect(colorWidget.mapFromGlobal(lessRect.topLeft()), colorWidget.mapFromGlobal(lessRect.bottomRight())); const QRect compareRect = lessLocalRect.adjusted(5, 3, -5, -7); QVERIFY(noFocus.copy(compareRect) == focus.copy(compareRect)); diff --git a/tests/auto/integrationtests/qaccessibility/tst_qaccessibility.cpp b/tests/auto/integrationtests/qaccessibility/tst_qaccessibility.cpp index fc583d8bd8..93a8dbe219 100644 --- a/tests/auto/integrationtests/qaccessibility/tst_qaccessibility.cpp +++ b/tests/auto/integrationtests/qaccessibility/tst_qaccessibility.cpp @@ -196,6 +196,13 @@ static int verifyHierarchy(QAccessibleInterface *iface) return errorAt; } +QRect childRect(QAccessibleInterface *iface, int index = 0) +{ + QAccessibleInterface *child = iface->child(index); + QRect rect = child->rect(); + delete child; + return rect; +} //TESTED_FILES= @@ -246,10 +253,6 @@ private slots: void abstractScrollAreaTest(); void scrollAreaTest(); - void listViewTest(); - void treeWidgetTest(); - void tableWidgetTest(); - void tableViewTest(); void table2ListTest(); void table2TreeTest(); @@ -344,11 +347,11 @@ class QtTestAccessibleWidgetIface: public QAccessibleWidget { public: QtTestAccessibleWidgetIface(QtTestAccessibleWidget *w): QAccessibleWidget(w) {} - QString text(Text t, int control = 0) const + QString text(Text t) const { if (t == Help) return QString::fromLatin1("Help yourself"); - return QAccessibleWidget::text(t, control); + return QAccessibleWidget::text(t); } static QAccessibleInterface *ifaceFactory(const QString &key, QObject *o) { @@ -434,7 +437,7 @@ void tst_QAccessibility::customWidget() QVERIFY(iface->isValid()); QCOMPARE(iface->object(), (QObject*)widget); QCOMPARE(iface->object()->objectName(), QString("Heinz")); - QCOMPARE(iface->text(QAccessible::Help, 0), QString("Help yourself")); + QCOMPARE(iface->text(QAccessible::Help), QString("Help yourself")); delete iface; delete widget; @@ -623,8 +626,8 @@ void tst_QAccessibility::navigateCovered() for (int y = 0; y < w->height(); ++y) { w1->move(x, y); if (w1->geometry().intersects(w2->geometry())) { - QVERIFY(iface1->relationTo(0, iface2, 0) & QAccessible::Covers); - QVERIFY(iface2->relationTo(0, iface1, 0) & QAccessible::Covered); + 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()); @@ -636,8 +639,8 @@ void tst_QAccessibility::navigateCovered() QCOMPARE(iface3->object(), iface1->object()); delete iface3; iface3 = 0; } else { - QVERIFY(!(iface1->relationTo(0, iface2, 0) & QAccessible::Covers)); - QVERIFY(!(iface2->relationTo(0, iface1, 0) & QAccessible::Covered)); + 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); @@ -669,13 +672,13 @@ void tst_QAccessibility::navigateCovered() w1->move(0,0); w2->move(0,0); w1->raise(); - QVERIFY(iface1->relationTo(0, iface2, 0) & QAccessible::Covers); - QVERIFY(iface2->relationTo(0, iface1, 0) & QAccessible::Covered); + QVERIFY(iface1->relationTo(iface2) & QAccessible::Covers); + QVERIFY(iface2->relationTo(iface1) & QAccessible::Covered); QVERIFY(!(iface1->state() & QAccessible::Invisible)); w1->hide(); QVERIFY(iface1->state() & QAccessible::Invisible); - QVERIFY(!(iface1->relationTo(0, iface2, 0) & QAccessible::Covers)); - QVERIFY(!(iface2->relationTo(0, iface1, 0) & QAccessible::Covered)); + 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); @@ -967,6 +970,7 @@ void tst_QAccessibility::actionTest() { QPushButton *button = new QPushButton; button->show(); + button->clearFocus(); QCOMPARE(button->hasFocus(), false); QAccessibleInterface *interface = QAccessible::queryAccessibleInterface(button); QAccessibleActionInterface *actions = interface->actionInterface(); @@ -996,7 +1000,7 @@ void tst_QAccessibility::applicationTest() QLatin1String name = QLatin1String("My Name"); qApp->setApplicationName(name); QAccessibleInterface *interface = QAccessible::queryAccessibleInterface(qApp); - QCOMPARE(interface->text(QAccessible::Name, 0), name); + QCOMPARE(interface->text(QAccessible::Name), name); QCOMPARE(interface->role(), QAccessible::Application); delete interface; } @@ -1013,7 +1017,7 @@ void tst_QAccessibility::mainWindowTest() QVERIFY_EVENT(mw, 0, QAccessible::ObjectShow); QAccessibleInterface *interface = QAccessible::queryAccessibleInterface(mw); - QCOMPARE(interface->text(QAccessible::Name, 0), name); + QCOMPARE(interface->text(QAccessible::Name), name); QCOMPARE(interface->role(), QAccessible::Window); delete interface; delete mw; @@ -1463,19 +1467,19 @@ void tst_QAccessibility::menuTest() QVERIFY(interface->rect().contains(iAction->rect())); #endif - QCOMPARE(iFile->text(QAccessible::Name, 0), QString("File")); - QCOMPARE(iEdit->text(QAccessible::Name, 0), QString("Edit")); - QCOMPARE(iSeparator->text(QAccessible::Name, 0), QString()); - QCOMPARE(iHelp->text(QAccessible::Name, 0), QString("Help")); - QCOMPARE(iAction->text(QAccessible::Name, 0), QString("Action!")); + QCOMPARE(iFile->text(QAccessible::Name), QString("File")); + QCOMPARE(iEdit->text(QAccessible::Name), QString("Edit")); + QCOMPARE(iSeparator->text(QAccessible::Name), QString()); + QCOMPARE(iHelp->text(QAccessible::Name), QString("Help")); + QCOMPARE(iAction->text(QAccessible::Name), QString("Action!")); // TODO: Currently not working, task to fix is #100019. #ifndef Q_OS_MAC - QCOMPARE(iFile->text(QAccessible::Accelerator, 0), tr("Alt+F")); - QCOMPARE(iEdit->text(QAccessible::Accelerator, 0), tr("Alt+E")); - QCOMPARE(iSeparator->text(QAccessible::Accelerator, 0), QString()); - QCOMPARE(iHelp->text(QAccessible::Accelerator, 0), tr("Alt+H")); - QCOMPARE(iAction->text(QAccessible::Accelerator, 0), QString()); + QCOMPARE(iFile->text(QAccessible::Accelerator), tr("Alt+F")); + QCOMPARE(iEdit->text(QAccessible::Accelerator), tr("Alt+E")); + QCOMPARE(iSeparator->text(QAccessible::Accelerator), QString()); + QCOMPARE(iHelp->text(QAccessible::Accelerator), tr("Alt+H")); + QCOMPARE(iAction->text(QAccessible::Accelerator), QString()); #endif QVERIFY(iFile->actionInterface()); @@ -1662,7 +1666,7 @@ void tst_QAccessibility::spinBoxTest() const QRect widgetRect = spinBox->geometry(); const QRect accessibleRect = interface->rect(); QCOMPARE(accessibleRect, widgetRect); - QCOMPARE(interface->text(QAccessible::Value, 0), QLatin1String("3")); + QCOMPARE(interface->text(QAccessible::Value), QLatin1String("3")); // one child, the line edit const int numChildren = interface->childCount(); @@ -1670,7 +1674,7 @@ void tst_QAccessibility::spinBoxTest() QAccessibleInterface *lineEdit = interface->child(0); QCOMPARE(lineEdit->role(), QAccessible::EditableText); - QCOMPARE(lineEdit->text(QAccessible::Value, 0), QLatin1String("3")); + QCOMPARE(lineEdit->text(QAccessible::Value), QLatin1String("3")); delete lineEdit; QVERIFY(interface->valueInterface()); @@ -1704,9 +1708,11 @@ void tst_QAccessibility::doubleSpinBoxTest() // Test that we get valid rects for all the spinbox child interfaces. const int numChildren = interface->childCount(); - for (int i = 1; i <= numChildren; ++i) { - const QRect childRect = interface->rect(i); + for (int i = 0; i < numChildren; ++i) { + QAccessibleInterface *childIface = interface->child(i); + const QRect childRect = childIface->rect(); QVERIFY(childRect.isValid()); + delete childIface; } delete doubleSpinBox; @@ -1724,7 +1730,7 @@ void tst_QAccessibility::textEditTest() edit.show(); QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(&edit); - QCOMPARE(iface->text(QAccessible::Value, 0), text); + QCOMPARE(iface->text(QAccessible::Value), text); QCOMPARE(iface->textInterface()->textAtOffset(8, QAccessible2::WordBoundary, &startOffset, &endOffset), QString("world")); QCOMPARE(startOffset, 6); QCOMPARE(endOffset, 11); @@ -1751,7 +1757,7 @@ void tst_QAccessibility::textBrowserTest() QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(&textBrowser); QVERIFY(iface); QCOMPARE(iface->role(), QAccessible::StaticText); - QCOMPARE(iface->text(QAccessible::Value, 0), text); + QCOMPARE(iface->text(QAccessible::Value), text); int startOffset; int endOffset; QCOMPARE(iface->textInterface()->textAtOffset(8, QAccessible2::WordBoundary, &startOffset, &endOffset), QString("world")); @@ -1860,15 +1866,11 @@ void tst_QAccessibility::mdiSubWindowTest() QCOMPARE(interface->childCount(), 1); // setText / text - QCOMPARE(interface->text(QAccessible::Name, 0), QString()); - QCOMPARE(interface->text(QAccessible::Name, 1), QString()); + QCOMPARE(interface->text(QAccessible::Name), QString()); testWindow->setWindowTitle(QLatin1String("ReplaceMe")); - QCOMPARE(interface->text(QAccessible::Name, 0), QLatin1String("ReplaceMe")); - QCOMPARE(interface->text(QAccessible::Name, 1), QLatin1String("ReplaceMe")); - interface->setText(QAccessible::Name, 0, QLatin1String("TitleSetOnWindow")); - QCOMPARE(interface->text(QAccessible::Name, 0), QLatin1String("TitleSetOnWindow")); - interface->setText(QAccessible::Name, 1, QLatin1String("TitleSetOnChild")); - QCOMPARE(interface->text(QAccessible::Name, 0), QLatin1String("TitleSetOnChild")); + QCOMPARE(interface->text(QAccessible::Name), QLatin1String("ReplaceMe")); + interface->setText(QAccessible::Name, QLatin1String("TitleSetOnWindow")); + QCOMPARE(interface->text(QAccessible::Name), QLatin1String("TitleSetOnWindow")); mdiArea.setActiveSubWindow(testWindow); @@ -1919,17 +1921,17 @@ void tst_QAccessibility::mdiSubWindowTest() QCOMPARE(interface->rect(), QRect(globalPos, testWindow->size())); testWindow->hide(); QCOMPARE(interface->rect(), QRect()); - QCOMPARE(interface->rect(1), QRect()); + QCOMPARE(childRect(interface), QRect()); testWindow->showMinimized(); - QCOMPARE(interface->rect(1), QRect()); + QCOMPARE(childRect(interface), QRect()); testWindow->showNormal(); testWindow->widget()->hide(); - QCOMPARE(interface->rect(1), QRect()); + QCOMPARE(childRect(interface), QRect()); testWindow->widget()->show(); const QRect widgetGeometry = testWindow->contentsRect(); const QPoint globalWidgetPos = QPoint(globalPos.x() + widgetGeometry.x(), globalPos.y() + widgetGeometry.y()); - QCOMPARE(interface->rect(1), QRect(globalWidgetPos, widgetGeometry.size())); + QCOMPARE(childRect(interface), QRect(globalWidgetPos, widgetGeometry.size())); // childAt QCOMPARE(interface->childAt(-10, 0), -1); @@ -1962,19 +1964,19 @@ void tst_QAccessibility::lineEditTest() le->setText(secret); le->setEchoMode(QLineEdit::Normal); QVERIFY(!(iface->state() & QAccessible::Protected)); - QCOMPARE(iface->text(QAccessible::Value, 0), secret); + QCOMPARE(iface->text(QAccessible::Value), secret); le->setEchoMode(QLineEdit::NoEcho); QVERIFY(iface->state() & QAccessible::Protected); - QVERIFY(iface->text(QAccessible::Value, 0).isEmpty()); + QVERIFY(iface->text(QAccessible::Value).isEmpty()); le->setEchoMode(QLineEdit::Password); QVERIFY(iface->state() & QAccessible::Protected); - QVERIFY(iface->text(QAccessible::Value, 0).isEmpty()); + QVERIFY(iface->text(QAccessible::Value).isEmpty()); le->setEchoMode(QLineEdit::PasswordEchoOnEdit); QVERIFY(iface->state() & QAccessible::Protected); - QVERIFY(iface->text(QAccessible::Value, 0).isEmpty()); + QVERIFY(iface->text(QAccessible::Value).isEmpty()); le->setEchoMode(QLineEdit::Normal); QVERIFY(!(iface->state() & QAccessible::Protected)); - QCOMPARE(iface->text(QAccessible::Value, 0), secret); + QCOMPARE(iface->text(QAccessible::Value), secret); QWidget *toplevel = new QWidget; le->setParent(toplevel); @@ -1999,7 +2001,7 @@ void tst_QAccessibility::lineEditTest() le->setText(QLatin1String("500")); le->setValidator(new QIntValidator()); - iface->setText(QAccessible::Value, 0, QLatin1String("This text is not a number")); + iface->setText(QAccessible::Value, QLatin1String("This text is not a number")); QCOMPARE(le->text(), QLatin1String("500")); delete iface; @@ -2141,13 +2143,12 @@ void tst_QAccessibility::dialogButtonBoxTest() QApplication::processEvents(); QCOMPARE(iface->childCount(), 3); QCOMPARE(iface->role(), QAccessible::Grouping); - QCOMPARE(iface->role(1), QAccessible::PushButton); - QCOMPARE(iface->role(2), QAccessible::PushButton); - QCOMPARE(iface->role(3), QAccessible::PushButton); QStringList actualOrder; QAccessibleInterface *child; QAccessibleInterface *leftmost; child = iface->child(0); + QCOMPARE(child->role(), QAccessible::PushButton); + // first find the leftmost button while (child->navigate(QAccessible::Left, 1, &leftmost) != -1) { delete child; @@ -2158,7 +2159,7 @@ void tst_QAccessibility::dialogButtonBoxTest() // then traverse from left to right to find the correct order of the buttons int right = 0; while (right != -1) { - actualOrder << leftmost->text(QAccessible::Name, 0); + actualOrder << leftmost->text(QAccessible::Name); right = leftmost->navigate(QAccessible::Right, 1, &child); delete leftmost; leftmost = child; @@ -2219,7 +2220,7 @@ void tst_QAccessibility::dialogButtonBoxTest() actualOrder.clear(); int right = 0; while (right != -1) { - actualOrder << other->text(QAccessible::Name, 0); + actualOrder << other->text(QAccessible::Name); right = other->navigate(QAccessible::Down, 1, &child); delete other; other = child; @@ -2252,7 +2253,7 @@ void tst_QAccessibility::dialTest() QVERIFY(interface); QCOMPARE(interface->childCount(), 0); - QCOMPARE(interface->text(QAccessible::Value, 0), QString::number(dial.value())); + QCOMPARE(interface->text(QAccessible::Value), QString::number(dial.value())); QCOMPARE(interface->rect(), dial.geometry()); QAccessibleValueInterface *valueIface = interface->valueInterface(); @@ -2459,345 +2460,8 @@ void tst_QAccessibility::scrollAreaTest() QTestAccessibility::clearEvents(); } -void tst_QAccessibility::listViewTest() -{ -#if defined(Q_OS_UNIX) - QSKIP( "Accessible table1 interface is no longer supported on X11."); -#else - { - QListView listView; - QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(&listView); - QVERIFY(iface); - QCOMPARE(iface->childCount(), 1); - delete iface; - } - { - QListWidget listView; - listView.addItem(tr("A")); - listView.addItem(tr("B")); - listView.addItem(tr("C")); - listView.resize(400,400); - listView.show(); - QTest::qWait(1); // Need this for indexOfchild to work. - - QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(&listView); - QCOMPARE((int)iface->role(), (int)QAccessible::Client); - QCOMPARE((int)iface->role(1), (int)QAccessible::List); - QCOMPARE(iface->childCount(), 1); - QAccessibleInterface *child; - iface->navigate(QAccessible::Child, 1, &child); - delete iface; - iface = child; - QCOMPARE(iface->text(QAccessible::Name, 1), QString("A")); - QCOMPARE(iface->text(QAccessible::Name, 2), QString("B")); - QCOMPARE(iface->text(QAccessible::Name, 3), QString("C")); - - QCOMPARE(iface->childCount(), 3); - - QAccessibleInterface *childA = 0; - QCOMPARE(iface->navigate(QAccessible::Child, 1, &childA), 0); - QVERIFY(childA); - QCOMPARE(iface->indexOfChild(childA), 1); - QCOMPARE(childA->text(QAccessible::Name, 1), QString("A")); - delete childA; - - QAccessibleInterface *childB = 0; - QCOMPARE(iface->navigate(QAccessible::Child, 2, &childB), 0); - QVERIFY(childB); - QCOMPARE(iface->indexOfChild(childB), 2); - QCOMPARE(childB->text(QAccessible::Name, 1), QString("B")); - delete childB; - - QAccessibleInterface *childC = 0; - QCOMPARE(iface->navigate(QAccessible::Child, 3, &childC), 0); - QVERIFY(childC); - QCOMPARE(iface->indexOfChild(childC), 3); - QCOMPARE(childC->text(QAccessible::Name, 1), QString("C")); - delete childC; - QTestAccessibility::clearEvents(); - - // Check for events - QTest::mouseClick(listView.viewport(), Qt::LeftButton, 0, listView.visualItemRect(listView.item(1)).center()); - QTest::mouseClick(listView.viewport(), Qt::LeftButton, 0, listView.visualItemRect(listView.item(2)).center()); - QVERIFY(QTestAccessibility::events().contains(QTestAccessibilityEvent(listView.viewport(), 2, QAccessible::Selection))); - QVERIFY(QTestAccessibility::events().contains(QTestAccessibilityEvent(listView.viewport(), 3, QAccessible::Selection))); - delete iface; - } - QTestAccessibility::clearEvents(); -#endif -} - -void tst_QAccessibility::treeWidgetTest() -{ -#if defined(Q_OS_UNIX) - QSKIP( "Accessible table1 interface is no longer supported on X11."); -#else - QWidget *w = new QWidget; - QTreeWidget *tree = new QTreeWidget(w); - QHBoxLayout *l = new QHBoxLayout(w); - l->addWidget(tree); - for (int i = 0; i < 10; ++i) { - QStringList strings = QStringList() << QString::fromAscii("row: %1").arg(i) - << QString("column 1") << QString("column 2"); - - tree->addTopLevelItem(new QTreeWidgetItem(strings)); - } - w->show(); - - QAccessibleInterface *acc = QAccessible::queryAccessibleInterface(tree); - QAccessibleInterface *accViewport = 0; - int entry = acc->navigate(QAccessible::Child, 1, &accViewport); - QVERIFY(accViewport); - QCOMPARE(entry, 0); - QAccessibleInterface *accTreeItem = 0; - entry = accViewport->navigate(QAccessible::Child, 1, &accTreeItem); - QCOMPARE(entry, 0); - - QAccessibleInterface *accTreeItem2 = 0; - entry = accTreeItem->navigate(QAccessible::Sibling, 3, &accTreeItem2); - QCOMPARE(entry, 0); - QCOMPARE(accTreeItem2->text(QAccessible::Name, 0), QLatin1String("row: 1")); - - // test selected/focused state - QItemSelectionModel *selModel = tree->selectionModel(); - QVERIFY(selModel); - selModel->select(QItemSelection(tree->model()->index(0, 0), tree->model()->index(3, 0)), QItemSelectionModel::Select); - selModel->setCurrentIndex(tree->model()->index(1, 0), QItemSelectionModel::Current); - - for (int i = 1; i < 10 ; ++i) { - QAccessible::State expected; - if (i <= 5 && i >= 2) - expected = QAccessible::Selected; - if (i == 3) - expected |= QAccessible::Focused; - - QCOMPARE(accViewport->state(i) & (QAccessible::Focused | QAccessible::Selected), expected); - } - - // Test sanity of its navigation functions - QCOMPARE(verifyHierarchy(acc), 0); - - delete accTreeItem2; - delete accTreeItem; - delete accViewport; - delete acc; - delete w; - - QTestAccessibility::clearEvents(); -#endif -} - -void tst_QAccessibility::tableWidgetTest() -{ -#if defined(Q_OS_UNIX) - QSKIP( "Accessible table1 interface is no longer supported on X11."); -#else - { - QWidget *topLevel = new QWidget; - QTableWidget *w = new QTableWidget(8,4,topLevel); - for (int r = 0; r < 8; ++r) { - for (int c = 0; c < 4; ++c) { - w->setItem(r, c, new QTableWidgetItem(tr("%1,%2").arg(c).arg(r))); - } - } - w->resize(100, 100); - topLevel->show(); - - QAccessibleInterface *client = QAccessible::queryAccessibleInterface(w); - QCOMPARE(client->role(), QAccessible::Client); - QCOMPARE(client->childCount(), 3); - QAccessibleInterface *view = 0; - view = client->child(0); - QCOMPARE(view->role(), QAccessible::Table); - QAccessibleInterface *ifRow; - ifRow = view->child(1); - QCOMPARE(ifRow->role(), QAccessible::Row); - QAccessibleInterface *item; - int entry = ifRow->navigate(QAccessible::Child, 1, &item); - QCOMPARE(entry, 1); - QCOMPARE(item , (QAccessibleInterface*)0); - QCOMPARE(ifRow->text(QAccessible::Name, 2), QLatin1String("0,0")); - QCOMPARE(ifRow->text(QAccessible::Name, 3), QLatin1String("1,0")); - - QCOMPARE(verifyHierarchy(client), 0); - - delete ifRow; - delete view; - delete client; - delete w; - delete topLevel; - } - QTestAccessibility::clearEvents(); -#endif -} - -class QtTestTableModel: public QAbstractTableModel -{ - Q_OBJECT - -signals: - void invalidIndexEncountered() const; - -public: - QtTestTableModel(int rows = 0, int columns = 0, QObject *parent = 0) - : QAbstractTableModel(parent), - row_count(rows), - column_count(columns) {} - - int rowCount(const QModelIndex& = QModelIndex()) const { return row_count; } - int columnCount(const QModelIndex& = QModelIndex()) const { return column_count; } - - QVariant data(const QModelIndex &idx, int role) const - { - if (!idx.isValid() || idx.row() >= row_count || idx.column() >= column_count) { - qWarning() << "Invalid modelIndex [%d,%d,%p]" << idx; - emit invalidIndexEncountered(); - return QVariant(); - } - - if (role == Qt::DisplayRole || role == Qt::EditRole) - return QString("[%1,%2,%3]").arg(idx.row()).arg(idx.column()).arg(0); - - return QVariant(); - } - - void removeLastRow() - { - beginRemoveRows(QModelIndex(), row_count - 1, row_count - 1); - --row_count; - endRemoveRows(); - } - - void removeAllRows() - { - beginRemoveRows(QModelIndex(), 0, row_count - 1); - row_count = 0; - endRemoveRows(); - } - - void removeLastColumn() - { - beginRemoveColumns(QModelIndex(), column_count - 1, column_count - 1); - --column_count; - endRemoveColumns(); - } - - void removeAllColumns() - { - beginRemoveColumns(QModelIndex(), 0, column_count - 1); - column_count = 0; - endRemoveColumns(); - } - - void reset() - { - QAbstractTableModel::reset(); - } - - int row_count; - int column_count; -}; - -class QtTestDelegate : public QItemDelegate -{ -public: - QtTestDelegate(QWidget *parent = 0) : QItemDelegate(parent) {} - - virtual QSize sizeHint(const QStyleOptionViewItem &/*option*/, const QModelIndex &/*index*/) const - { - return QSize(100,50); - } -}; - -void tst_QAccessibility::tableViewTest() -{ -#if defined(Q_OS_UNIX) - QSKIP( "Accessible table1 interface is no longer supported on X11."); -#else - { - QtTestTableModel *model = new QtTestTableModel(3, 4); - QTableView *w = new QTableView(); - w->setModel(model); - w->setItemDelegate(new QtTestDelegate(w)); - w->resize(450,200); - w->resizeColumnsToContents(); - w->resizeRowsToContents(); - w->show(); - - QAccessibleInterface *client = QAccessible::queryAccessibleInterface(w); - QAccessibleInterface *table2; - client->navigate(QAccessible::Child, 1, &table2); - QVERIFY(table2); - QCOMPARE(table2->role(1), QAccessible::Row); - QAccessibleInterface *toprow = 0; - table2->navigate(QAccessible::Child, 1, &toprow); - QVERIFY(toprow); - QCOMPARE(toprow->role(1), QAccessible::RowHeader); - QCOMPARE(toprow->role(2), QAccessible::ColumnHeader); - delete toprow; - - // call childAt() for each child until we reach the bottom, - // and do it for each row in the table - for (int y = 1; y < 5; ++y) { // this includes the special header - for (int x = 1; x < 6; ++x) { - QCOMPARE(client->role(), QAccessible::Client); - QRect globalRect = client->rect(); - QVERIFY(globalRect.isValid()); - // make sure we don't hit the vertical header ##### - QPoint p = globalRect.topLeft() + QPoint(8, 8); - p.ry() += 50 * (y - 1); - p.rx() += 100 * (x - 1); - int index = client->childAt(p.x(), p.y()); - QCOMPARE(index, 1); - QCOMPARE(client->role(index), QAccessible::Table); - - // navigate to table/viewport - QAccessibleInterface *table; - client->navigate(QAccessible::Child, index, &table); - QVERIFY(table); - index = table->childAt(p.x(), p.y()); - QCOMPARE(index, y); - QCOMPARE(table->role(index), QAccessible::Row); - QAccessibleInterface *row; - QCOMPARE(table->role(1), QAccessible::Row); - - // navigate to the row - table->navigate(QAccessible::Child, index, &row); - QVERIFY(row); - QCOMPARE(row->role(1), QAccessible::RowHeader); - index = row->childAt(p.x(), p.y()); - QVERIFY(index > 0); - if (x == 1 && y == 1) { - QCOMPARE(row->role(index), QAccessible::RowHeader); - QCOMPARE(row->text(QAccessible::Name, index), QLatin1String("")); - } else if (x > 1 && y > 1) { - QCOMPARE(row->role(index), QAccessible::Cell); - QCOMPARE(row->text(QAccessible::Name, index), QString::fromAscii("[%1,%2,0]").arg(y - 2).arg(x - 2)); - } else if (x == 1) { - QCOMPARE(row->role(index), QAccessible::RowHeader); - QCOMPARE(row->text(QAccessible::Name, index), QString::fromAscii("%1").arg(y - 1)); - } else if (y == 1) { - QCOMPARE(row->role(index), QAccessible::ColumnHeader); - QCOMPARE(row->text(QAccessible::Name, index), QString::fromAscii("%1").arg(x - 1)); - } - delete table; - delete row; - } - } - delete table2; - delete client; - delete w; - delete model; - } - QTestAccessibility::clearEvents(); -#endif -} - void tst_QAccessibility::table2ListTest() { -#if !defined(Q_OS_UNIX) - QSKIP( "Accessible table2 interface is currently only supported on X11."); -#else QListWidget *listView = new QListWidget; listView->addItem("Oslo"); listView->addItem("Berlin"); @@ -2818,7 +2482,7 @@ void tst_QAccessibility::table2ListTest() child1 = iface->child(0); QVERIFY(child1); QCOMPARE(iface->indexOfChild(child1), 1); - QCOMPARE(child1->text(QAccessible::Name, 0), QString("Oslo")); + QCOMPARE(child1->text(QAccessible::Name), QString("Oslo")); QCOMPARE(child1->role(), QAccessible::ListItem); delete child1; @@ -2826,14 +2490,14 @@ void tst_QAccessibility::table2ListTest() child2 = iface->child(1); QVERIFY(child2); QCOMPARE(iface->indexOfChild(child2), 2); - QCOMPARE(child2->text(QAccessible::Name, 0), QString("Berlin")); + QCOMPARE(child2->text(QAccessible::Name), QString("Berlin")); delete child2; QAccessibleInterface *child3 = 0; child3 = iface->child(2); QVERIFY(child3); QCOMPARE(iface->indexOfChild(child3), 3); - QCOMPARE(child3->text(QAccessible::Name, 0), QString("Brisbane")); + QCOMPARE(child3->text(QAccessible::Name), QString("Brisbane")); delete child3; QTestAccessibility::clearEvents(); @@ -2855,10 +2519,10 @@ void tst_QAccessibility::table2ListTest() QCOMPARE(table2->rowCount(), 4); QAccessibleTable2CellInterface *cell1; QVERIFY(cell1 = table2->cellAt(0,0)); - QCOMPARE(cell1->text(QAccessible::Name, 0), QString("Oslo")); + QCOMPARE(cell1->text(QAccessible::Name), QString("Oslo")); QAccessibleTable2CellInterface *cell4; QVERIFY(cell4 = table2->cellAt(3,0)); - QCOMPARE(cell4->text(QAccessible::Name, 0), QString("Munich")); + QCOMPARE(cell4->text(QAccessible::Name), QString("Munich")); QCOMPARE(cell4->role(), QAccessible::ListItem); QCOMPARE(cell4->rowIndex(), 3); QCOMPARE(cell4->columnIndex(), 0); @@ -2869,14 +2533,10 @@ void tst_QAccessibility::table2ListTest() delete iface; delete listView; QTestAccessibility::clearEvents(); -#endif } void tst_QAccessibility::table2TreeTest() { -#if !defined(Q_OS_UNIX) - QSKIP( "Accessible table2 interface is currently only supported on X11."); -#else QTreeWidget *treeView = new QTreeWidget; treeView->setColumnCount(2); QTreeWidgetItem *header = new QTreeWidgetItem; @@ -2924,7 +2584,7 @@ void tst_QAccessibility::table2TreeTest() header1 = iface->child(0); QVERIFY(header1); QCOMPARE(iface->indexOfChild(header1), 1); - QCOMPARE(header1->text(QAccessible::Name, 0), QString("Artist")); + QCOMPARE(header1->text(QAccessible::Name), QString("Artist")); QCOMPARE(header1->role(), QAccessible::ColumnHeader); delete header1; @@ -2932,7 +2592,7 @@ void tst_QAccessibility::table2TreeTest() child1 = iface->child(2); QVERIFY(child1); QCOMPARE(iface->indexOfChild(child1), 3); - QCOMPARE(child1->text(QAccessible::Name, 0), QString("Spain")); + QCOMPARE(child1->text(QAccessible::Name), QString("Spain")); QCOMPARE(child1->role(), QAccessible::TreeItem); QVERIFY(!(child1->state() & QAccessible::Expanded)); delete child1; @@ -2941,7 +2601,7 @@ void tst_QAccessibility::table2TreeTest() child2 = iface->child(4); QVERIFY(child2); QCOMPARE(iface->indexOfChild(child2), 5); - QCOMPARE(child2->text(QAccessible::Name, 0), QString("Austria")); + QCOMPARE(child2->text(QAccessible::Name), QString("Austria")); delete child2; QTestAccessibility::clearEvents(); @@ -2953,10 +2613,10 @@ void tst_QAccessibility::table2TreeTest() QCOMPARE(table2->rowCount(), 2); QAccessibleTable2CellInterface *cell1; QVERIFY(cell1 = table2->cellAt(0,0)); - QCOMPARE(cell1->text(QAccessible::Name, 0), QString("Spain")); + QCOMPARE(cell1->text(QAccessible::Name), QString("Spain")); QAccessibleTable2CellInterface *cell2; QVERIFY(cell2 = table2->cellAt(1,0)); - QCOMPARE(cell2->text(QAccessible::Name, 0), QString("Austria")); + QCOMPARE(cell2->text(QAccessible::Name), QString("Austria")); QCOMPARE(cell2->role(), QAccessible::TreeItem); QCOMPARE(cell2->rowIndex(), 1); QCOMPARE(cell2->columnIndex(), 0); @@ -2976,11 +2636,11 @@ void tst_QAccessibility::table2TreeTest() QCOMPARE(table2->columnCount(), 2); QCOMPARE(table2->rowCount(), 5); cell1 = table2->cellAt(1,0); - QCOMPARE(cell1->text(QAccessible::Name, 0), QString("Picasso")); + QCOMPARE(cell1->text(QAccessible::Name), QString("Picasso")); QCOMPARE(iface->indexOfChild(cell1), 5); // 1 based + 2 header + 2 for root item cell2 = table2->cellAt(4,0); - QCOMPARE(cell2->text(QAccessible::Name, 0), QString("Klimt")); + QCOMPARE(cell2->text(QAccessible::Name), QString("Klimt")); QCOMPARE(cell2->role(), QAccessible::TreeItem); QCOMPARE(cell2->rowIndex(), 4); QCOMPARE(cell2->columnIndex(), 0); @@ -2992,14 +2652,10 @@ void tst_QAccessibility::table2TreeTest() delete iface; QTestAccessibility::clearEvents(); -#endif } void tst_QAccessibility::table2TableTest() { -#if !defined(Q_OS_UNIX) - QSKIP( "Accessible table2 interface is currently only supported on X11."); -#else QTableWidget *tableView = new QTableWidget(3, 3); tableView->setColumnCount(3); QStringList hHeader; @@ -3038,7 +2694,7 @@ void tst_QAccessibility::table2TableTest() QAccessibleInterface *child1 = iface->child(2); QVERIFY(child1); QCOMPARE(iface->indexOfChild(child1), 3); - QCOMPARE(child1->text(QAccessible::Name, 0), QString("h2")); + QCOMPARE(child1->text(QAccessible::Name), QString("h2")); QCOMPARE(child1->role(), QAccessible::ColumnHeader); QVERIFY(!(child1->state() & QAccessible::Expanded)); delete child1; @@ -3046,7 +2702,7 @@ void tst_QAccessibility::table2TableTest() QAccessibleInterface *child2 = iface->child(10); QVERIFY(child2); QCOMPARE(iface->indexOfChild(child2), 11); - QCOMPARE(child2->text(QAccessible::Name, 0), QString("1.1")); + QCOMPARE(child2->text(QAccessible::Name), QString("1.1")); QAccessibleTable2CellInterface *cell2Iface = static_cast(child2); QCOMPARE(cell2Iface->rowIndex(), 1); QCOMPARE(cell2Iface->columnIndex(), 1); @@ -3054,7 +2710,7 @@ void tst_QAccessibility::table2TableTest() QAccessibleInterface *child3 = iface->child(11); QCOMPARE(iface->indexOfChild(child3), 12); - QCOMPARE(child3->text(QAccessible::Name, 0), QString("1.2")); + QCOMPARE(child3->text(QAccessible::Name), QString("1.2")); delete child3; QTestAccessibility::clearEvents(); @@ -3066,12 +2722,12 @@ void tst_QAccessibility::table2TableTest() QCOMPARE(table2->rowCount(), 3); QAccessibleTable2CellInterface *cell1; QVERIFY(cell1 = table2->cellAt(0,0)); - QCOMPARE(cell1->text(QAccessible::Name, 0), QString("0.0")); + QCOMPARE(cell1->text(QAccessible::Name), QString("0.0")); QCOMPARE(iface->indexOfChild(cell1), 6); QAccessibleTable2CellInterface *cell2; QVERIFY(cell2 = table2->cellAt(0,1)); - QCOMPARE(cell2->text(QAccessible::Name, 0), QString("0.1")); + QCOMPARE(cell2->text(QAccessible::Name), QString("0.1")); QCOMPARE(cell2->role(), QAccessible::Cell); QCOMPARE(cell2->rowIndex(), 0); QCOMPARE(cell2->columnIndex(), 1); @@ -3080,7 +2736,7 @@ void tst_QAccessibility::table2TableTest() QAccessibleTable2CellInterface *cell3; QVERIFY(cell3 = table2->cellAt(1,2)); - QCOMPARE(cell3->text(QAccessible::Name, 0), QString("1.2")); + QCOMPARE(cell3->text(QAccessible::Name), QString("1.2")); QCOMPARE(cell3->role(), QAccessible::Cell); QCOMPARE(cell3->rowIndex(), 1); QCOMPARE(cell3->columnIndex(), 2); @@ -3099,7 +2755,6 @@ void tst_QAccessibility::table2TableTest() delete tableView; QTestAccessibility::clearEvents(); -#endif } void tst_QAccessibility::calendarWidgetTest() @@ -3112,7 +2767,6 @@ void tst_QAccessibility::calendarWidgetTest() QVERIFY(interface); QCOMPARE(interface->role(), QAccessible::Table); QVERIFY(!interface->rect().isValid()); - QVERIFY(!interface->rect(1).isValid()); QCOMPARE(interface->childAt(200, 200), -1); calendarWidget.resize(400, 300); @@ -3228,9 +2882,9 @@ void tst_QAccessibility::dockWidgetTest() // 4 children: menu bar, dock1, dock2, and central widget QCOMPARE(accMainWindow->childCount(), 4); QAccessibleInterface *accDock1 = 0; - for (int i = 1; i <= 4; ++i) { - if (accMainWindow->role(i) == QAccessible::Window) { - accDock1 = accMainWindow->child(i-1); + for (int i = 0; i < 4; ++i) { + accDock1 = accMainWindow->child(i); + if (accMainWindow->role() == QAccessible::Window) { if (accDock1 && qobject_cast(accDock1->object()) == dock1) { break; } else { @@ -3240,8 +2894,11 @@ void tst_QAccessibility::dockWidgetTest() } QVERIFY(accDock1); QCOMPARE(accDock1->role(), QAccessible::Window); - QCOMPARE(accDock1->role(1), QAccessible::TitleBar); - QVERIFY(accDock1->rect().contains(accDock1->rect(1))); + + QAccessibleInterface *dock1TitleBar = accDock1->child(0); + QCOMPARE(dock1TitleBar->role(), QAccessible::TitleBar); + QVERIFY(accDock1->rect().contains(dock1TitleBar->rect())); + delete dock1TitleBar; QPoint globalPos = dock1->mapToGlobal(QPoint(0,0)); globalPos.rx()+=5; //### query style @@ -3347,7 +3004,7 @@ void tst_QAccessibility::labelTest() QAccessibleInterface *acc_label = QAccessible::queryAccessibleInterface(label); QVERIFY(acc_label); - QCOMPARE(acc_label->text(QAccessible::Name, 0), text); + QCOMPARE(acc_label->text(QAccessible::Name), text); delete acc_label; delete label; @@ -3388,24 +3045,24 @@ void tst_QAccessibility::accelerators() window->show(); QAccessibleInterface *accLineEdit = QAccessible::queryAccessibleInterface(le); - QCOMPARE(accLineEdit->text(QAccessible::Accelerator, 0), QKeySequence(Qt::ALT).toString(QKeySequence::NativeText) + QLatin1String("L")); - QCOMPARE(accLineEdit->text(QAccessible::Accelerator, 0), QKeySequence(Qt::ALT).toString(QKeySequence::NativeText) + QLatin1String("L")); + QCOMPARE(accLineEdit->text(QAccessible::Accelerator), QKeySequence(Qt::ALT).toString(QKeySequence::NativeText) + QLatin1String("L")); + QCOMPARE(accLineEdit->text(QAccessible::Accelerator), QKeySequence(Qt::ALT).toString(QKeySequence::NativeText) + QLatin1String("L")); label->setText(tr("Q &")); - QCOMPARE(accLineEdit->text(QAccessible::Accelerator, 0), QString()); + QCOMPARE(accLineEdit->text(QAccessible::Accelerator), QString()); label->setText(tr("Q &&")); - QCOMPARE(accLineEdit->text(QAccessible::Accelerator, 0), QString()); + QCOMPARE(accLineEdit->text(QAccessible::Accelerator), QString()); label->setText(tr("Q && A")); - QCOMPARE(accLineEdit->text(QAccessible::Accelerator, 0), QString()); + QCOMPARE(accLineEdit->text(QAccessible::Accelerator), QString()); label->setText(tr("Q &&&A")); - QCOMPARE(accLineEdit->text(QAccessible::Accelerator, 0), QKeySequence(Qt::ALT).toString(QKeySequence::NativeText) + QLatin1String("A")); + QCOMPARE(accLineEdit->text(QAccessible::Accelerator), QKeySequence(Qt::ALT).toString(QKeySequence::NativeText) + QLatin1String("A")); label->setText(tr("Q &&A")); - QCOMPARE(accLineEdit->text(QAccessible::Accelerator, 0), QString()); + QCOMPARE(accLineEdit->text(QAccessible::Accelerator), QString()); #if !defined(QT_NO_DEBUG) && !defined(Q_WS_MAC) QTest::ignoreMessage(QtWarningMsg, "QKeySequence::mnemonic: \"Q &A&B\" contains multiple occurrences of '&'"); #endif label->setText(tr("Q &A&B")); - QCOMPARE(accLineEdit->text(QAccessible::Accelerator, 0), QKeySequence(Qt::ALT).toString(QKeySequence::NativeText) + QLatin1String("A")); + QCOMPARE(accLineEdit->text(QAccessible::Accelerator), QKeySequence(Qt::ALT).toString(QKeySequence::NativeText) + QLatin1String("A")); #if defined(Q_OS_UNIX) QCoreApplication::processEvents(); -- cgit v1.2.3