diff options
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()) { |