diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2022-06-13 20:50:22 +0200 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2022-06-16 19:29:36 +0200 |
commit | 56d6a360206c7bd93e6503a63daf1517ff40a1d4 (patch) | |
tree | c266ba049da735c5318d45caa5bc60d1cba04846 /src | |
parent | 4d25429746dd1d71aac373c5ecd3d56756ce4d80 (diff) | |
download | qtbase-56d6a360206c7bd93e6503a63daf1517ff40a1d4.tar.gz |
Implement a dedicated QAccessibleInterface for QMessageBox
QMessageBox has text values that an accessible client should be able to
read directly without having to navigate through the text labels.
Add test coverage.
Windows Narrator is inconsistent in reading the contents of a message
box. It might skip them completely, even though the text property is
read through the interface.
Task-number: QTBUG-101585
Change-Id: I639c2210a627733c093743790c6a6b83f4bb80d0
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/widgets/accessible/qaccessiblewidgetfactory.cpp | 2 | ||||
-rw-r--r-- | src/widgets/accessible/simplewidgets.cpp | 43 | ||||
-rw-r--r-- | src/widgets/accessible/simplewidgets_p.h | 11 |
3 files changed, 55 insertions, 1 deletions
diff --git a/src/widgets/accessible/qaccessiblewidgetfactory.cpp b/src/widgets/accessible/qaccessiblewidgetfactory.cpp index c0a025e048..01ada3a5c5 100644 --- a/src/widgets/accessible/qaccessiblewidgetfactory.cpp +++ b/src/widgets/accessible/qaccessiblewidgetfactory.cpp @@ -85,7 +85,7 @@ QAccessibleInterface *qAccessibleFactory(const QString &classname, QObject *obje } else if (classname == "QDialog"_L1) { iface = new QAccessibleWidget(widget, QAccessible::Dialog); } else if (classname == "QMessageBox"_L1) { - iface = new QAccessibleWidget(widget, QAccessible::AlertMessage); + iface = new QAccessibleMessageBox(widget); #if QT_CONFIG(mainwindow) } else if (classname == "QMainWindow"_L1) { iface = new QAccessibleMainWindow(widget); diff --git a/src/widgets/accessible/simplewidgets.cpp b/src/widgets/accessible/simplewidgets.cpp index f149bad170..bb0f8401d3 100644 --- a/src/widgets/accessible/simplewidgets.cpp +++ b/src/widgets/accessible/simplewidgets.cpp @@ -43,6 +43,8 @@ #ifndef QT_NO_PICTURE #include <QtGui/qpicture.h> #endif +#include <qmessagebox.h> +#include <qdialogbuttonbox.h> #include <qstyle.h> #include <qstyleoption.h> #include <qtextdocument.h> @@ -951,6 +953,47 @@ QWindowContainer *QAccessibleWindowContainer::container() const return static_cast<QWindowContainer *>(widget()); } +/*! + \internal + Implements QAccessibleWidget for QMessageBox +*/ +QAccessibleMessageBox::QAccessibleMessageBox(QWidget *widget) + : QAccessibleWidget(widget, QAccessible::AlertMessage) +{ + Q_ASSERT(qobject_cast<QMessageBox *>(widget)); +} + +QMessageBox *QAccessibleMessageBox::messageBox() const +{ + return static_cast<QMessageBox *>(widget()); +} + +QString QAccessibleMessageBox::text(QAccessible::Text t) const +{ + QString str; + + switch (t) { + case QAccessible::Name: + str = QAccessibleWidget::text(t); + if (str.isEmpty()) // implies no title text is set + str = messageBox()->text(); + break; + case QAccessible::Description: + str = widget()->accessibleDescription(); + break; + case QAccessible::Value: + str = messageBox()->text(); + break; + case QAccessible::Help: + str = messageBox()->informativeText(); + break; + default: + break; + } + + return str; +} + #endif // QT_CONFIG(accessibility) QT_END_NAMESPACE diff --git a/src/widgets/accessible/simplewidgets_p.h b/src/widgets/accessible/simplewidgets_p.h index 3d0a76c078..027d3c7bbc 100644 --- a/src/widgets/accessible/simplewidgets_p.h +++ b/src/widgets/accessible/simplewidgets_p.h @@ -27,6 +27,7 @@ class QAbstractButton; class QLineEdit; class QToolButton; class QGroupBox; +class QMessageBox; class QProgressBar; #if QT_CONFIG(abstractbutton) @@ -189,6 +190,16 @@ private: QWindowContainer *container() const; }; +class QAccessibleMessageBox : public QAccessibleWidget +{ +public: + explicit QAccessibleMessageBox(QWidget *widget); + + QString text(QAccessible::Text t) const override; + + QMessageBox *messageBox() const; +}; + #endif // QT_CONFIG(accessibility) QT_END_NAMESPACE |