tdf#117173: qt a11y: Forward changes to SHOWING state
While Qt doesn't have an equivalent state for the SHOWING
state used in LibreOffice and in IAccessible2, it has
separate `QAccessible::ObjectHide` and `QAccessible::ObjectShow`
event types used to indicate that an object changed state
to being (no longer) displayed, so use those.
In fact, Qt's `AtspiAdaptor` handles those by mapping them to
state change events for the AT-SPI "showing" state again. [1]
[1] https://code.qt.io/cgit/qt/qtbase.git/tree/src/gui/accessible/linux/atspiadaptor.cpp?id=ce16eb2679f69b28d2debd1ce18a99f7279b4295#n896
Change-Id: Iae2b9ec26403d9a9887e86c4155ba64a73f19b60
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139812
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
diff --git a/vcl/qt5/QtAccessibleEventListener.cxx b/vcl/qt5/QtAccessibleEventListener.cxx
index 16a5a07..f9a4d7b 100644
--- a/vcl/qt5/QtAccessibleEventListener.cxx
+++ b/vcl/qt5/QtAccessibleEventListener.cxx
@@ -132,6 +132,20 @@ void QtAccessibleEventListener::HandleStateChangedEvent(
case AccessibleStateType::SELECTED:
aState.selected = true;
break;
case AccessibleStateType::SHOWING:
{
// Qt does not have an equivalent for the SHOWING state,
// but has separate event types
QAccessible::Event eEventType;
sal_Int64 nNewState = 0;
if ((rEvent.NewValue >>= nNewState) && nNewState == AccessibleStateType::SHOWING)
eEventType = QAccessible::ObjectShow;
else
eEventType = QAccessible::ObjectHide;
QAccessible::updateAccessibility(
new QAccessibleEvent(pQAccessibleInterface, eEventType));
break;
}
// These don't seem to have a matching Qt equivalent
case AccessibleStateType::ARMED:
case AccessibleStateType::DEFUNC:
@@ -141,7 +155,6 @@ void QtAccessibleEventListener::HandleStateChangedEvent(
case AccessibleStateType::MANAGES_DESCENDANTS:
case AccessibleStateType::OPAQUE:
case AccessibleStateType::SENSITIVE:
case AccessibleStateType::SHOWING:
case AccessibleStateType::STALE:
case AccessibleStateType::TRANSIENT:
case AccessibleStateType::VERTICAL: