diff options
author | Michael Weghorn <m.weghorn@posteo.de> | 2022-09-09 23:05:09 +0200 |
---|---|---|
committer | Michael Weghorn <m.weghorn@posteo.de> | 2022-09-10 02:43:30 +0200 |
commit | ce16eb2679f69b28d2debd1ce18a99f7279b4295 (patch) | |
tree | dc4a38a9022fa6cab4101710854e1528a7f7971c /src/gui/accessible | |
parent | dad2797aeefaa813fd8808a6ef63bf6a86833dda (diff) |
a11y atspi: Forward table model change to AT-SPI
This adds handling for QAccessible::TableModelChanged
by forwarding the events to AT-SPI, s.a. the list of
AT-SPI events at [1].
[1] https://accessibility.linuxfoundation.org/a11yspecs/atspi/adoc/atspi-events.html
Change-Id: I0a2b64caf96126b4827a03886ce4a73f98429b7f
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/gui/accessible')
-rw-r--r-- | src/gui/accessible/linux/atspiadaptor.cpp | 65 |
1 files changed, 64 insertions, 1 deletions
diff --git a/src/gui/accessible/linux/atspiadaptor.cpp b/src/gui/accessible/linux/atspiadaptor.cpp index 10837f2538..5f2a0ad3c6 100644 --- a/src/gui/accessible/linux/atspiadaptor.cpp +++ b/src/gui/accessible/linux/atspiadaptor.cpp @@ -1133,8 +1133,71 @@ void AtSpiAdaptor::notify(QAccessibleEvent *event) } break; } + case QAccessible::TableModelChanged: { + QAccessibleInterface *interface = event->accessibleInterface(); + if (!interface || !interface->isValid()) { + qCWarning(lcAccessibilityAtspi) << "TableModelChanged event from invalid accessible."; + return; + } + + const QString path = pathForInterface(interface); + QAccessibleTableModelChangeEvent *tableModelEvent = static_cast<QAccessibleTableModelChangeEvent*>(event); + switch (tableModelEvent->modelChangeType()) { + case QAccessibleTableModelChangeEvent::ColumnsInserted: { + if (sendObject || sendObject_column_inserted) { + const int firstColumn = tableModelEvent->firstColumn(); + const int insertedColumnCount = tableModelEvent->lastColumn() - firstColumn + 1; + QVariantList args = packDBusSignalArguments(QString(), firstColumn, insertedColumnCount, QVariant::fromValue(QDBusVariant(QVariant(QString())))); + sendDBusSignal(path, ATSPI_DBUS_INTERFACE_EVENT_OBJECT ""_L1, "ColumnInserted"_L1, args); + } + break; + } + case QAccessibleTableModelChangeEvent::ColumnsRemoved: { + if (sendObject || sendObject_column_deleted) { + const int firstColumn = tableModelEvent->firstColumn(); + const int removedColumnCount = tableModelEvent->lastColumn() - firstColumn + 1; + QVariantList args = packDBusSignalArguments(QString(), firstColumn, removedColumnCount, QVariant::fromValue(QDBusVariant(QVariant(QString())))); + sendDBusSignal(path, ATSPI_DBUS_INTERFACE_EVENT_OBJECT ""_L1, "ColumnDeleted"_L1, args); + } + break; + } + case QAccessibleTableModelChangeEvent::RowsInserted: { + if (sendObject || sendObject_row_inserted) { + const int firstRow = tableModelEvent->firstRow(); + const int insertedRowCount = tableModelEvent->lastRow() - firstRow + 1; + QVariantList args = packDBusSignalArguments(QString(), firstRow, insertedRowCount, QVariant::fromValue(QDBusVariant(QVariant(QString())))); + sendDBusSignal(path, ATSPI_DBUS_INTERFACE_EVENT_OBJECT ""_L1, "RowInserted"_L1, args); + } + break; + } + case QAccessibleTableModelChangeEvent::RowsRemoved: { + if (sendObject || sendObject_row_deleted) { + const int firstRow = tableModelEvent->firstRow(); + const int removedRowCount = tableModelEvent->lastRow() - firstRow + 1; + QVariantList args = packDBusSignalArguments(QString(), firstRow, removedRowCount, QVariant::fromValue(QDBusVariant(QVariant(QString())))); + sendDBusSignal(path, ATSPI_DBUS_INTERFACE_EVENT_OBJECT ""_L1, "RowDeleted"_L1, args); + } + break; + } + case QAccessibleTableModelChangeEvent::ModelChangeType::ModelReset: { + if (sendObject || sendObject_model_changed) { + QVariantList args = packDBusSignalArguments(QString(), 0, 0, QVariant::fromValue(QDBusVariant(QVariant(QString())))); + sendDBusSignal(path, ATSPI_DBUS_INTERFACE_EVENT_OBJECT ""_L1, "ModelChanged"_L1, args); + } + break; + } + case QAccessibleTableModelChangeEvent::DataChanged: { + if (sendObject || sendObject_visible_data_changed) { + QVariantList args = packDBusSignalArguments(QString(), 0, 0, QVariant::fromValue(QDBusVariant(QVariant(QString())))); + sendDBusSignal(path, ATSPI_DBUS_INTERFACE_EVENT_OBJECT ""_L1, "VisibleDataChanged"_L1, args); + } + break; + } + } + break; + } + // For now we ignore these events - case QAccessible::TableModelChanged: case QAccessible::ParentChanged: case QAccessible::DialogStart: case QAccessible::DialogEnd: |