diff --git a/src/widgets/accessible/complexwidgets.cpp b/src/widgets/accessible/complexwidgets.cpp index d9f5a5ae81..77bf8504fa 100644 --- a/src/widgets/accessible/complexwidgets.cpp +++ b/src/widgets/accessible/complexwidgets.cpp @@ -78,7 +78,9 @@ public: } QAccessible::State s = parent()->state(); + s.selectable = true; s.focused = (m_index == m_parent->currentIndex()); + s.selected = s.focused; return s; } QRect rect() const override { @@ -181,6 +183,14 @@ QAccessibleTabBar::~QAccessibleTabBar() QAccessible::deleteAccessibleInterface(id); } +void *QAccessibleTabBar::interface_cast(QAccessible::InterfaceType t) +{ + if (t == QAccessible::SelectionInterface) { + return static_cast(this); + } + return QAccessibleWidget::interface_cast(t); +} + /*! Returns the QTabBar. */ QTabBar *QAccessibleTabBar::tabBar() const { @@ -258,6 +268,60 @@ QString QAccessibleTabBar::text(QAccessible::Text t) const return QString(); } +int QAccessibleTabBar::selectedItemCount() const +{ + if (tabBar()->currentIndex() >= 0) + return 1; + return 0; +} + +QList QAccessibleTabBar::selectedItems() const +{ + QList items; + QAccessibleInterface *selected = selectedItem(0); + if (selected) + items.push_back(selected); + return items; +} + +QAccessibleInterface* QAccessibleTabBar::selectedItem(int selectionIndex) const +{ + const int currentIndex = tabBar()->currentIndex(); + if (selectionIndex != 0 || currentIndex < 0) + return nullptr; + return child(currentIndex); +} + +bool QAccessibleTabBar::isSelected(QAccessibleInterface *childItem) const +{ + return childItem && selectedItem(0) == childItem; +} + +bool QAccessibleTabBar::select(QAccessibleInterface *childItem) +{ + const int childIndex = indexOfChild(childItem); + if (childIndex >= 0) { + tabBar()->setCurrentIndex(childIndex); + return true; + } + return false; +} + +bool QAccessibleTabBar::unselect(QAccessibleInterface *) +{ + return false; +} + +bool QAccessibleTabBar::selectAll() +{ + return false; +} + +bool QAccessibleTabBar::clear() +{ + return false; +} + #endif // QT_CONFIG(tabbar) #if QT_CONFIG(combobox) diff --git a/src/widgets/accessible/complexwidgets_p.h b/src/widgets/accessible/complexwidgets_p.h index 12535f21a0..5169aa8243 100644 --- a/src/widgets/accessible/complexwidgets_p.h +++ b/src/widgets/accessible/complexwidgets_p.h @@ -70,12 +70,14 @@ public: #endif // QT_CONFIG(scrollarea) #if QT_CONFIG(tabbar) -class QAccessibleTabBar : public QAccessibleWidget +class QAccessibleTabBar : public QAccessibleWidget, public QAccessibleSelectionInterface { public: explicit QAccessibleTabBar(QWidget *w); ~QAccessibleTabBar(); + void *interface_cast(QAccessible::InterfaceType t) override; + QAccessibleInterface *focusChild() const override; int childCount() const override; QString text(QAccessible::Text t) const override; @@ -83,6 +85,16 @@ public: QAccessibleInterface* child(int index) const override; int indexOfChild(const QAccessibleInterface *child) const override; + // QAccessibleSelectionInterface + int selectedItemCount() const override; + QList selectedItems() const override; + QAccessibleInterface* selectedItem(int selectionIndex) const override; + bool isSelected(QAccessibleInterface *childItem) const override; + bool select(QAccessibleInterface *childItem) override; + bool unselect(QAccessibleInterface *childItem) override; + bool selectAll() override; + bool clear() override; + protected: QTabBar *tabBar() const; mutable QHash m_childInterfaces;