QTabBar: Add setAccessibleTabName() and accessibleTabName()
Currently, a tab's text is used as its accessibleName. When a tab's text is empty, there is no API to set the tab's accessibleName. The two APIs are added to set and return the accessibleName property of a tab. Task-number: QTBUG-46530 Change-Id: Idf88b5f905fe66c6365ea0eeb650e74211db90e1 Reviewed-by: Jan Arve Sæther <jan-arve.saether@theqtcompany.com>
This commit is contained in:
parent
2ddad99979
commit
18291af42c
@ -120,19 +120,26 @@ public:
|
|||||||
{
|
{
|
||||||
if (!isValid())
|
if (!isValid())
|
||||||
return QString();
|
return QString();
|
||||||
|
QString str;
|
||||||
switch (t) {
|
switch (t) {
|
||||||
case QAccessible::Name:
|
case QAccessible::Name:
|
||||||
return qt_accStripAmp(m_parent->tabText(m_index));
|
str = m_parent->accessibleTabName(m_index);
|
||||||
|
if (str.isEmpty())
|
||||||
|
str = qt_accStripAmp(m_parent->tabText(m_index));
|
||||||
|
break;
|
||||||
case QAccessible::Accelerator:
|
case QAccessible::Accelerator:
|
||||||
return qt_accHotKey(m_parent->tabText(m_index));
|
str = qt_accHotKey(m_parent->tabText(m_index));
|
||||||
|
break;
|
||||||
case QAccessible::Description:
|
case QAccessible::Description:
|
||||||
return m_parent->tabToolTip(m_index);
|
str = m_parent->tabToolTip(m_index);
|
||||||
|
break;
|
||||||
case QAccessible::Help:
|
case QAccessible::Help:
|
||||||
return m_parent->tabWhatsThis(m_index);
|
str = m_parent->tabWhatsThis(m_index);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return QString();
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setText(QAccessible::Text, const QString &) Q_DECL_OVERRIDE {}
|
void setText(QAccessible::Text, const QString &) Q_DECL_OVERRIDE {}
|
||||||
@ -237,7 +244,12 @@ int QAccessibleTabBar::childCount() const
|
|||||||
QString QAccessibleTabBar::text(QAccessible::Text t) const
|
QString QAccessibleTabBar::text(QAccessible::Text t) const
|
||||||
{
|
{
|
||||||
if (t == QAccessible::Name) {
|
if (t == QAccessible::Name) {
|
||||||
return qt_accStripAmp(tabBar()->tabText(tabBar()->currentIndex()));
|
const QTabBar *tBar = tabBar();
|
||||||
|
int idx = tBar->currentIndex();
|
||||||
|
QString str = tBar->accessibleTabName(idx);
|
||||||
|
if (str.isEmpty())
|
||||||
|
str = qt_accStripAmp(tBar->tabText(idx));
|
||||||
|
return str;
|
||||||
} else if (t == QAccessible::Accelerator) {
|
} else if (t == QAccessible::Accelerator) {
|
||||||
return qt_accHotKey(tabBar()->tabText(tabBar()->currentIndex()));
|
return qt_accHotKey(tabBar()->tabText(tabBar()->currentIndex()));
|
||||||
}
|
}
|
||||||
|
@ -2522,6 +2522,34 @@ QWidget *QTabBar::tabButton(int index, ButtonPosition position) const
|
|||||||
return d->tabList.at(index).rightWidget;
|
return d->tabList.at(index).rightWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef QT_NO_ACCESSIBILITY
|
||||||
|
/*!
|
||||||
|
Sets the accessibleName of the tab at position \a index to \a name.
|
||||||
|
*/
|
||||||
|
void QTabBar::setAccessibleTabName(int index, const QString &name)
|
||||||
|
{
|
||||||
|
Q_D(QTabBar);
|
||||||
|
if (QTabBarPrivate::Tab *tab = d->at(index)) {
|
||||||
|
tab->accessibleName = name;
|
||||||
|
QAccessibleEvent event(this, QAccessible::NameChanged);
|
||||||
|
event.setChild(index);
|
||||||
|
QAccessible::updateAccessibility(&event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns the accessibleName of the tab at position \a index, or an empty
|
||||||
|
string if \a index is out of range.
|
||||||
|
*/
|
||||||
|
QString QTabBar::accessibleTabName(int index) const
|
||||||
|
{
|
||||||
|
Q_D(const QTabBar);
|
||||||
|
if (const QTabBarPrivate::Tab *tab = d->at(index))
|
||||||
|
return tab->accessibleName;
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
#endif // QT_NO_ACCESSIBILITY
|
||||||
|
|
||||||
CloseButton::CloseButton(QWidget *parent)
|
CloseButton::CloseButton(QWidget *parent)
|
||||||
: QAbstractButton(parent)
|
: QAbstractButton(parent)
|
||||||
{
|
{
|
||||||
|
@ -172,6 +172,11 @@ public:
|
|||||||
bool changeCurrentOnDrag() const;
|
bool changeCurrentOnDrag() const;
|
||||||
void setChangeCurrentOnDrag(bool change);
|
void setChangeCurrentOnDrag(bool change);
|
||||||
|
|
||||||
|
#ifndef QT_NO_ACCESSIBILITY
|
||||||
|
QString accessibleTabName(int index) const;
|
||||||
|
void setAccessibleTabName(int index, const QString &name);
|
||||||
|
#endif
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void setCurrentIndex(int index);
|
void setCurrentIndex(int index);
|
||||||
|
|
||||||
|
@ -131,6 +131,9 @@ public:
|
|||||||
QWidget *rightWidget;
|
QWidget *rightWidget;
|
||||||
int lastTab;
|
int lastTab;
|
||||||
int dragOffset;
|
int dragOffset;
|
||||||
|
#ifndef QT_NO_ACCESSIBILITY
|
||||||
|
QString accessibleName;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef QT_NO_ANIMATION
|
#ifndef QT_NO_ANIMATION
|
||||||
~Tab() { delete animation; }
|
~Tab() { delete animation; }
|
||||||
|
@ -1301,6 +1301,16 @@ void tst_QAccessibility::tabTest()
|
|||||||
child2->actionInterface()->doAction(QAccessibleActionInterface::pressAction());
|
child2->actionInterface()->doAction(QAccessibleActionInterface::pressAction());
|
||||||
QCOMPARE(tabBar->currentIndex(), 1);
|
QCOMPARE(tabBar->currentIndex(), 1);
|
||||||
|
|
||||||
|
// Test that setAccessibleTabName changes a tab's accessible name
|
||||||
|
tabBar->setAccessibleTabName(0, "AccFoo");
|
||||||
|
tabBar->setAccessibleTabName(1, "AccBar");
|
||||||
|
QCOMPARE(child1->text(QAccessible::Name), QLatin1String("AccFoo"));
|
||||||
|
QCOMPARE(child2->text(QAccessible::Name), QLatin1String("AccBar"));
|
||||||
|
tabBar->setCurrentIndex(0);
|
||||||
|
QCOMPARE(interface->text(QAccessible::Name), QLatin1String("AccFoo"));
|
||||||
|
tabBar->setCurrentIndex(1);
|
||||||
|
QCOMPARE(interface->text(QAccessible::Name), QLatin1String("AccBar"));
|
||||||
|
|
||||||
delete tabBar;
|
delete tabBar;
|
||||||
QTestAccessibility::clearEvents();
|
QTestAccessibility::clearEvents();
|
||||||
}
|
}
|
||||||
@ -1338,10 +1348,17 @@ void tst_QAccessibility::tabWidgetTest()
|
|||||||
QCOMPARE(tabButton1Interface->text(QAccessible::Name), QLatin1String("Tab 1"));
|
QCOMPARE(tabButton1Interface->text(QAccessible::Name), QLatin1String("Tab 1"));
|
||||||
|
|
||||||
QAccessibleInterface* tabButton2Interface = tabBarInterface->child(1);
|
QAccessibleInterface* tabButton2Interface = tabBarInterface->child(1);
|
||||||
QVERIFY(tabButton1Interface);
|
QVERIFY(tabButton2Interface);
|
||||||
QCOMPARE(tabButton2Interface->role(), QAccessible::PageTab);
|
QCOMPARE(tabButton2Interface->role(), QAccessible::PageTab);
|
||||||
QCOMPARE(tabButton2Interface->text(QAccessible::Name), QLatin1String("Tab 2"));
|
QCOMPARE(tabButton2Interface->text(QAccessible::Name), QLatin1String("Tab 2"));
|
||||||
|
|
||||||
|
// Test that setAccessibleTabName changes a tab's accessible name
|
||||||
|
tabWidget->setCurrentIndex(0);
|
||||||
|
tabWidget->tabBar()->setAccessibleTabName(0, "Acc Tab");
|
||||||
|
QCOMPARE(tabButton1Interface->role(), QAccessible::PageTab);
|
||||||
|
QCOMPARE(tabButton1Interface->text(QAccessible::Name), QLatin1String("Acc Tab"));
|
||||||
|
QCOMPARE(tabBarInterface->text(QAccessible::Name), QLatin1String("Acc Tab"));
|
||||||
|
|
||||||
QAccessibleInterface* tabButtonLeft = tabBarInterface->child(2);
|
QAccessibleInterface* tabButtonLeft = tabBarInterface->child(2);
|
||||||
QVERIFY(tabButtonLeft);
|
QVERIFY(tabButtonLeft);
|
||||||
QCOMPARE(tabButtonLeft->role(), QAccessible::PushButton);
|
QCOMPARE(tabButtonLeft->role(), QAccessible::PushButton);
|
||||||
|
Loading…
Reference in New Issue
Block a user