Revision control

Copy as Markdown

// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Qt-Security score:significant reason:default
#ifndef QWASMACCESIBILITY_H
#define QWASMACCESIBILITY_H
#include <QtCore/qtconfigmacros.h>
#include <QtGui/qtguiglobal.h>
#include <QtCore/qhash.h>
#include <private/qstdweb_p.h>
#include <qpa/qplatformaccessibility.h>
#include <emscripten/val.h>
#include <QLoggingCategory>
#include <map>
#include <emscripten/bind.h>
Q_DECLARE_LOGGING_CATEGORY(lcQpaAccessibility)
void QWasmAccessibilityEnable();
#if !QT_CONFIG(accessibility)
class QWasmAccessibility
{
public:
static void addAccessibilityEnableButton(QWindow *window) {}
static void onShowWindow(QWindow *) {}
static void onRemoveWindow(QWindow *) {}
static bool isEnabled() {
return false;
}
static void enable() {}
};
#else
class QWasmAccessibility : public QPlatformAccessibility
{
public:
QWasmAccessibility();
~QWasmAccessibility();
static void addAccessibilityEnableButton(QWindow *window);
static void onShowWindow(QWindow *);
static void onRemoveWindow(QWindow *);
static bool isEnabled();
static void enable();
private:
static QWasmAccessibility *instance();
void addEnableButton(QWindow *window);
void enableAccessibility();
void removeWindow(QWindow *window);
emscripten::val getDescribedByContainer(QWindow *window);
emscripten::val getDescribedByContainer(QAccessibleInterface *iface);
emscripten::val getElementContainer(QWindow *window);
emscripten::val getElementContainer(QAccessibleInterface *iface);
emscripten::val getDocument(const emscripten::val &container);
QWindow *getWindow(QAccessibleInterface *iface);
bool isWindowNode(QAccessibleInterface *iface);
emscripten::val createHtmlElement(QAccessibleInterface *iface);
void destroyHtmlElement(QAccessibleInterface *iface);
emscripten::val getHtmlElement(QAccessibleInterface *iface);
void repairLinks(QAccessibleInterface *iface);
void linkToParent(QAccessibleInterface *iface);
void setHtmlElementVisibility(QAccessibleInterface *iface, bool visible);
void setHtmlElementGeometry(QAccessibleInterface *iface);
void setHtmlElementGeometry(emscripten::val element, QRect geometry);
void setHtmlElementFocus(QAccessibleInterface *iface);
void setHtmlElementDisabled(QAccessibleInterface *iface);
void setHtmlElementOrientation(emscripten::val element, QAccessibleInterface *iface);
void handleListItemUpdate(QAccessibleEvent *event);
void handleStaticTextUpdate(QAccessibleEvent *event);
void handleButtonUpdate(QAccessibleEvent *event);
void handleCheckBoxUpdate(QAccessibleEvent *event);
void handleGroupBoxUpdate(QAccessibleEvent *event);
void handleSwitchUpdate(QAccessibleEvent *event);
void handleDialogUpdate(QAccessibleEvent *event);
void handleMenuUpdate(QAccessibleEvent *event);
void handleToolUpdate(QAccessibleEvent *event);
void handleLineEditUpdate(QAccessibleEvent *event);
void handleRadioButtonUpdate(QAccessibleEvent *event);
void handleDialUpdate(QAccessibleEvent *event);
void handleSpinBoxUpdate(QAccessibleEvent *event);
void handlePageTabUpdate(QAccessibleEvent *event);
void handleSliderUpdate(QAccessibleEvent *event);
void handleScrollBarUpdate(QAccessibleEvent *event);
void handlePageTabListUpdate(QAccessibleEvent *event);
void handleIdentifierUpdate(QAccessibleInterface *iface);
void handleDescriptionChanged(QAccessibleInterface *iface);
void handleAnnouncement(QAccessibleInterface *iface,
QAccessibleAnnouncementEvent *announcementEvent);
void handleProgressBarUpdate(QAccessibleEvent *event);
void handleEventFromHtmlElement(const emscripten::val event);
void populateAccessibilityTree(QAccessibleInterface *iface);
void createObject(QAccessibleInterface *iface);
void removeObject(QAccessible::Id id);
void unlinkParentForChildren(QAccessibleInterface *iface);
void relinkParentForChildren(QAccessibleInterface *iface);
void notifyAccessibilityUpdate(QAccessibleEvent *event) override;
bool handleUpdateByEventType(QAccessibleEvent *event);
void handleUpdateByInterfaceRole(QAccessibleEvent *event);
void setAttribute(emscripten::val element, const std::string &attr, const std::string &val);
void setAttribute(emscripten::val element, const std::string &attr, const char *val);
void setAttribute(emscripten::val element, const std::string &attr, bool val);
void setProperty(emscripten::val element, const std::string &attr, const std::string &val);
void setProperty(emscripten::val element, const std::string &attr, const char *val);
void setProperty(emscripten::val element, const std::string &attr, bool val);
void setNamedAttribute(QAccessibleInterface *iface, const std::string &attribute, QAccessible::Text text);
void setNamedProperty(QAccessibleInterface *iface, const std::string &property, QAccessible::Text text);
void addEventListener(QAccessibleInterface *, emscripten::val element, const char *eventType);
void sendEvent(QAccessibleInterface *iface, QAccessible::Event eventType);
private:
std::map<QWindow *, std::tuple<emscripten::val, std::shared_ptr<qstdweb::EventCallback>>> m_enableButtons;
QHash<QAccessible::Id, emscripten::val> m_elements;
int m_eventHandlerIndex;
};
#endif // QT_CONFIG(accessibility)
#endif