vcl/qt5/QtAccessibleEventListener.cxx |   15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

New commits:
commit 155e8b1683f10847ff18e75287e2466220242bb1
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Fri Sep 9 12:20:05 2022 +0200
Commit:     Michael Weghorn <m.wegh...@posteo.de>
CommitDate: Fri Sep 16 12:03:42 2022 +0200

    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.wegh...@posteo.de>

diff --git a/vcl/qt5/QtAccessibleEventListener.cxx 
b/vcl/qt5/QtAccessibleEventListener.cxx
index 16a5a074b8cb..f9a4d7b1a2c1 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:

Reply via email to