vcl/qt5/QtAccessibleEventListener.cxx | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-)
New commits: commit fe9206b474464dd092da1d5c1ee788fe1c9b0765 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Tue Feb 22 16:36:33 2022 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Wed Feb 23 06:27:22 2022 +0100 qt a11y: Better handle TEXT_CHANGED event Trigger the corresponding Qt accessibility events for deleted and inserted text rather than sending a QAccessible::TextColumnChanged event (which looks like a rather arbitrary choice...). Qt also has a 'QAccessibleTextUpdateEvent' class that could be used to send a combined event, but since we get the relevant data separately in the LO event, using the latter wouldn't make things easier. And at least for the AT-SPI case on Linux, Qt sends separate AT-SPI events via D-Bus anyway. [1] Unfortunately, qt5/qt6 VCL a11y is not yet functional enough to e.g. test that the correct AT-SPI events are actually received when using the the script mentioned in Change-Id: Ibcae27ecfccf41a909e06d01ce681e4b7b97eb25 (gtk3 a11y: Migrate from deprecated "text-changed" ATK signal). [1] https://code.qt.io/cgit/qt/qtbase.git/tree/src/gui/accessible/linux/atspiadaptor.cpp#n964 Change-Id: Ia9282382b6d5fd6bffd536dcda2989a6da901e90 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130356 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/vcl/qt5/QtAccessibleEventListener.cxx b/vcl/qt5/QtAccessibleEventListener.cxx index 5a8e84144210..08b97b69c347 100644 --- a/vcl/qt5/QtAccessibleEventListener.cxx +++ b/vcl/qt5/QtAccessibleEventListener.cxx @@ -18,10 +18,12 @@ */ #include <QtAccessibleEventListener.hxx> +#include <QtTools.hxx> #include <sal/log.hxx> #include <com/sun/star/accessibility/AccessibleEventId.hpp> +#include <com/sun/star/accessibility/TextSegment.hpp> #include <QtGui/QAccessible> @@ -96,6 +98,24 @@ void QtAccessibleEventListener::notifyEvent(const css::accessibility::Accessible QAccessible::updateAccessibility( new QAccessibleEvent(pQAccessibleInterface, QAccessible::AttributeChanged)); return; + case AccessibleEventId::TEXT_CHANGED: + { + TextSegment aDeletedText; + TextSegment aInsertedText; + if (aEvent.OldValue >>= aDeletedText) + { + QAccessible::updateAccessibility( + new QAccessibleTextRemoveEvent(pQAccessibleInterface, aDeletedText.SegmentStart, + toQString(aDeletedText.SegmentText))); + } + if (aEvent.NewValue >>= aInsertedText) + { + QAccessible::updateAccessibility(new QAccessibleTextInsertEvent( + pQAccessibleInterface, aInsertedText.SegmentStart, + toQString(aInsertedText.SegmentText))); + } + return; + } case AccessibleEventId::TABLE_CAPTION_CHANGED: QAccessible::updateAccessibility( new QAccessibleEvent(pQAccessibleInterface, QAccessible::TableCaptionChanged)); @@ -140,7 +160,6 @@ void QtAccessibleEventListener::notifyEvent(const css::accessibility::Accessible QAccessible::updateAccessibility( new QAccessibleEvent(pQAccessibleInterface, QAccessible::SectionChanged)); return; - case AccessibleEventId::TEXT_CHANGED: case AccessibleEventId::COLUMN_CHANGED: QAccessible::updateAccessibility( new QAccessibleEvent(pQAccessibleInterface, QAccessible::TextColumnChanged));