diff options
author | Frederik Gladhorn <frederik.gladhorn@nokia.com> | 2011-10-22 22:38:14 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-11-23 14:54:01 +0100 |
commit | beb72b2fbf17a20b4a9d51d75d79f9c3c69bb357 (patch) | |
tree | c972c0a408ea912faaa67d4508ba5d855a1cb582 /src/plugins | |
parent | e739ca0071df28adf767d148ba5095d846e898f3 (diff) |
Remove virtual child integers.
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 <jan-arve.saether@nokia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/accessible/widgets/complexwidgets.cpp | 30 | ||||
-rw-r--r-- | src/plugins/accessible/widgets/complexwidgets.h | 6 | ||||
-rw-r--r-- | src/plugins/accessible/widgets/itemviews.cpp | 130 | ||||
-rw-r--r-- | src/plugins/accessible/widgets/itemviews.h | 68 | ||||
-rw-r--r-- | src/plugins/accessible/widgets/main.cpp | 11 | ||||
-rw-r--r-- | src/plugins/accessible/widgets/qaccessiblemenu.cpp | 96 | ||||
-rw-r--r-- | src/plugins/accessible/widgets/qaccessiblemenu.h | 37 | ||||
-rw-r--r-- | src/plugins/accessible/widgets/qaccessiblewidgets.cpp | 427 | ||||
-rw-r--r-- | src/plugins/accessible/widgets/qaccessiblewidgets.h | 57 | ||||
-rw-r--r-- | src/plugins/accessible/widgets/rangecontrols.cpp | 61 | ||||
-rw-r--r-- | src/plugins/accessible/widgets/rangecontrols.h | 18 | ||||
-rw-r--r-- | src/plugins/accessible/widgets/simplewidgets.cpp | 64 | ||||
-rw-r--r-- | src/plugins/accessible/widgets/simplewidgets.h | 26 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowsaccessibility.cpp | 111 |
14 files changed, 370 insertions, 772 deletions
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 { @@ -226,6 +227,7 @@ private: }; #endif +#endif #ifndef QT_NO_TABBAR class QAccessibleTabBar : public QAccessibleWidget @@ -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<int> 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<const QAccessibleTable2Cell*>(iface); return logicalIndex(cell->m_index); - } else if (iface->role(0) == QAccessible::ColumnHeader){ + } else if (iface->role() == QAccessible::ColumnHeader){ const QAccessibleTable2HeaderCell* cell = static_cast<const QAccessibleTable2HeaderCell*>(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<const QAccessibleTable2HeaderCell*>(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<const QAccessibleTable2Cell*>(iface); const QTreeView *treeView = qobject_cast<const QTreeView*>(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<const QAccessibleTable2HeaderCell*>(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<const QTreeView*>(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<const QAccessibleTable2Cell*>(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<QAccessibleInterface*> 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<const QTreeView*>(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<QAbstractItemView*>(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<QAction*>(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<QAction*>(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<QTextEdit *>(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<QAccessible::Method> set; set << ListSupportedMethods << SetCursorPosition << GetCursorPosition; return QVariant::fromValue(set | qvariant_cast<QSet<QAccessible::Method> >( - 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<QToolBox *>(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<QWidget *>(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<QToolBox *>(object()); @@ -855,25 +789,6 @@ QAccessibleMdiArea::QAccessibleMdiArea(QWidget *widget) Q_ASSERT(qobject_cast<QMdiArea *>(widget)); } -QAccessible::State QAccessibleMdiArea::state(int child) const -{ - if (child < 0) - return QAccessibleWidget::state(child); - if (child == 0) - return QAccessible::Normal; - QList<QMdiSubWindow *> 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<QMdiSubWindow *>(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<QWorkspace *>(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<QTextBrowser *>(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<QDockWidgetLayout*>(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<QDockWidget *>(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<QAbstractButton *>(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<QDockWidgetLayout*>(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<QDockWidgetLayout*>(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<QAbstractButton *>(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<QAbstractButton *>(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<QDockWidget> 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<QAbstractSpinBox*>(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<QAccessible::Method> set; - set << ListSupportedMethods; - return QVariant::fromValue(set | qvariant_cast<QSet<QAccessible::Method> >( - 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<QDoubleSpinBox*>(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<QScrollBar*>(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<QSlider*>(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<QAbstractSlider *>(w)); } -QVariant QAccessibleAbstractSlider::invokeMethod(Method method, int child, const QVariantList ¶ms) -{ - switch (method) { - case ListSupportedMethods: { - QSet<QAccessible::Method> set; - set << ListSupportedMethods; - return QVariant::fromValue(set | qvariant_cast<QSet<QAccessible::Method> >( - 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<QLabel*>(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<QLabel*>(object()); @@ -560,9 +542,8 @@ QLineEdit *QAccessibleLineEdit::lineEdit() const return qobject_cast<QLineEdit*>(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<QAccessible::Method> set; set << ListSupportedMethods << SetCursorPosition << GetCursorPosition; return QVariant::fromValue(set | qvariant_cast<QSet<QAccessible::Method> >( - 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 <QtCore/qmap.h> #include <QtCore/qsettings.h> +#include <QtCore/qsharedpointer.h> #include <QtCore/qpair.h> #include <QtWidgets/qapplication.h> #include <QtWidgets/qmessagebox.h> @@ -277,6 +278,8 @@ void showDebug(const char* funcName, const QAccessibleInterface *iface) # define showDebug(f, iface) #endif +typedef QSharedPointer<QAccessibleInterface> QAIPointer; + // This stuff is used for widgets/items with no window handle: typedef QMap<int, QPair<QObject*,int> > 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<int> 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()) { |