summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/wasm/qwasmaccessibility.cpp
diff options
context:
space:
mode:
authorShreya Pattani <shreya.pattani@crossware.io>2023-08-10 13:41:54 +0530
committerShreya Pattani <shreya.pattani@crossware.io>2023-08-11 10:19:17 +0530
commite3925996f181c61e4b90964332242c8df8a04497 (patch)
treeb7bdc0e946033d0c4254e975c41db9a669c85e69 /src/plugins/platforms/wasm/qwasmaccessibility.cpp
parent4cf51f46166b50904f0161f028a9ff1c9ba5ae3e (diff)
Add description to the HTML tags using aria-description
Description added to the html tags for accessibility in wasm through the aria-description property Change-Id: Ic1976d5c4c64ea45298f24b660807adeda6fdb64 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmaccessibility.cpp')
-rw-r--r--src/plugins/platforms/wasm/qwasmaccessibility.cpp50
1 files changed, 44 insertions, 6 deletions
diff --git a/src/plugins/platforms/wasm/qwasmaccessibility.cpp b/src/plugins/platforms/wasm/qwasmaccessibility.cpp
index a6618350d6..725d714b52 100644
--- a/src/plugins/platforms/wasm/qwasmaccessibility.cpp
+++ b/src/plugins/platforms/wasm/qwasmaccessibility.cpp
@@ -5,7 +5,6 @@
#include "qwasmscreen.h"
#include "qwasmwindow.h"
#include "qwasmintegration.h"
-
#include <QtGui/qwindow.h>
#if QT_CONFIG(accessibility)
@@ -364,12 +363,21 @@ void QWasmAccessibility::setHtmlElementTextNameLE(QAccessibleInterface *iface) {
element.set("innerHTML", value.toStdString());
}
+void QWasmAccessibility::setHtmlElementDescription(QAccessibleInterface *iface) {
+ emscripten::val element = ensureHtmlElement(iface);
+ QString desc = iface->text(QAccessible::Description);
+ element.call<void>("setAttribute", std::string("aria-description"), desc.toStdString());
+}
+
void QWasmAccessibility::handleStaticTextUpdate(QAccessibleEvent *event)
{
switch (event->type()) {
case QAccessible::NameChanged: {
setHtmlElementTextName(event->accessibleInterface());
} break;
+ case QAccessible::DescriptionChanged: {
+ setHtmlElementDescription(event->accessibleInterface());
+ } break;
default:
qCDebug(lcQpaAccessibility) << "TODO: implement handleStaticTextUpdate for event" << event->type();
break;
@@ -388,7 +396,9 @@ void QWasmAccessibility::handleLineEditUpdate(QAccessibleEvent *event) {
case QAccessible::TextCaretMoved: {
setHtmlElementTextNameLE(event->accessibleInterface());
} break;
-
+ case QAccessible::DescriptionChanged: {
+ setHtmlElementDescription(event->accessibleInterface());
+ } break;
default:
qCDebug(lcQpaAccessibility) << "TODO: implement handleLineEditUpdate for event" << event->type();
break;
@@ -399,13 +409,11 @@ void QWasmAccessibility::handleEventFromHtmlElement(const emscripten::val event)
{
QAccessibleInterface *iface = m_elements.key(event["target"]);
-
if (iface == nullptr) {
return;
} else {
QString eventType = QString::fromStdString(event["type"].as<std::string>());
const auto& actionNames = QAccessibleBridgeUtils::effectiveActionNames(iface);
-
if (actionNames.contains(QAccessibleActionInterface::pressAction())) {
iface->actionInterface()->doAction(QAccessibleActionInterface::pressAction());
@@ -452,6 +460,9 @@ void QWasmAccessibility::handleCheckBoxUpdate(QAccessibleEvent *event)
bool checkedString = accessible->state().checked ? true : false;
element.call<void>("setAttribute", std::string("checked"), checkedString);
} break;
+ case QAccessible::DescriptionChanged: {
+ setHtmlElementDescription(event->accessibleInterface());
+ } break;
default:
qCDebug(lcQpaAccessibility) << "TODO: implement handleCheckBoxUpdate for event" << event->type();
break;
@@ -468,6 +479,9 @@ void QWasmAccessibility::handleToolUpdate(QAccessibleEvent *event)
emscripten::val element = ensureHtmlElement(iface);
element.call<void>("setAttribute", std::string("title"), text.toStdString());
} break;
+ case QAccessible::DescriptionChanged: {
+ setHtmlElementDescription(event->accessibleInterface());
+ } break;
default:
qCDebug(lcQpaAccessibility) << "TODO: implement handleToolUpdate for event" << event->type();
break;
@@ -486,6 +500,9 @@ void QWasmAccessibility::handleMenuUpdate(QAccessibleEvent *event)
emscripten::val element = ensureHtmlElement(iface);
element.call<void>("setAttribute", std::string("title"), text.toStdString());
} break;
+ case QAccessible::DescriptionChanged: {
+ setHtmlElementDescription(event->accessibleInterface());
+ } break;
default:
qCDebug(lcQpaAccessibility) << "TODO: implement handleMenuUpdate for event" << event->type();
break;
@@ -500,7 +517,9 @@ void QWasmAccessibility::handleDialogUpdate(QAccessibleEvent *event) {
case QAccessible::StateChanged: {
setHtmlElementTextName(event->accessibleInterface());
} break;
-
+ case QAccessible::DescriptionChanged: {
+ setHtmlElementDescription(event->accessibleInterface());
+ } break;
default:
qCDebug(lcQpaAccessibility) << "TODO: implement handleLineEditUpdate for event" << event->type();
break;
@@ -518,6 +537,7 @@ void QWasmAccessibility::populateAccessibilityTree(QAccessibleInterface *iface)
setHtmlElementVisibility(iface, visible);
setHtmlElementGeometry(iface);
setHtmlElementTextName(iface);
+ setHtmlElementDescription(iface);
for (int i = 0; i < iface->childCount(); ++i)
populateAccessibilityTree(iface->child(i));
@@ -536,6 +556,9 @@ void QWasmAccessibility::handleRadioButtonUpdate(QAccessibleEvent *event)
std::string checkedString = accessible->state().checked ? "true" : "false";
element.call<void>("setAttribute", std::string("checked"), checkedString);
} break;
+ case QAccessible::DescriptionChanged: {
+ setHtmlElementDescription(event->accessibleInterface());
+ } break;
default:
qDebug() << "TODO: implement handleRadioButtonUpdate for event" << event->type();
break;
@@ -555,6 +578,9 @@ void QWasmAccessibility::handleSpinBoxUpdate(QAccessibleEvent *event)
std::string valueString = accessible->valueInterface()->currentValue().toString().toStdString();
element.call<void>("setAttribute", std::string("value"), valueString);
} break;
+ case QAccessible::DescriptionChanged: {
+ setHtmlElementDescription(event->accessibleInterface());
+ } break;
default:
qDebug() << "TODO: implement handleSpinBoxUpdate for event" << event->type();
break;
@@ -574,6 +600,9 @@ void QWasmAccessibility::handleSliderUpdate(QAccessibleEvent *event)
std::string valueString = accessible->valueInterface()->currentValue().toString().toStdString();
element.call<void>("setAttribute", std::string("value"), valueString);
} break;
+ case QAccessible::DescriptionChanged: {
+ setHtmlElementDescription(event->accessibleInterface());
+ } break;
default:
qDebug() << "TODO: implement handleSliderUpdate for event" << event->type();
break;
@@ -593,6 +622,9 @@ void QWasmAccessibility::handleScrollBarUpdate(QAccessibleEvent *event)
std::string valueString = accessible->valueInterface()->currentValue().toString().toStdString();
element.call<void>("setAttribute", std::string("aria-valuenow"), valueString);
} break;
+ case QAccessible::DescriptionChanged: {
+ setHtmlElementDescription(event->accessibleInterface());
+ } break;
default:
qDebug() << "TODO: implement handleSliderUpdate for event" << event->type();
break;
@@ -609,6 +641,9 @@ void QWasmAccessibility::handlePageTabUpdate(QAccessibleEvent *event)
case QAccessible::Focus: {
setHtmlElementTextName(event->accessibleInterface());
} break;
+ case QAccessible::DescriptionChanged: {
+ setHtmlElementDescription(event->accessibleInterface());
+ } break;
default:
qDebug() << "TODO: implement handlePageTabUpdate for event" << event->type();
break;
@@ -624,6 +659,9 @@ void QWasmAccessibility::handlePageTabListUpdate(QAccessibleEvent *event)
case QAccessible::Focus: {
setHtmlElementTextName(event->accessibleInterface());
} break;
+ case QAccessible::DescriptionChanged: {
+ setHtmlElementDescription(event->accessibleInterface());
+ } break;
default:
qDebug() << "TODO: implement handlePageTabUpdate for event" << event->type();
break;
@@ -645,12 +683,12 @@ void QWasmAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event)
// https://doc.qt.io/qt-5/qaccessible.html#Event-enum
switch (event->type()) {
case QAccessible::ObjectShow:
-
setHtmlElementVisibility(iface, true);
// Sync up properties on show;
setHtmlElementGeometry(iface);
setHtmlElementTextName(iface);
+ setHtmlElementDescription(iface);
return;
break;