a11y: Send VALUE_CHANGED event for FormattedField

`VCLXAccessibleEdit::ProcessWindowEvent` takes care
of sending a `TEXT_CHANGED` event. In the case of
`SVTXAccessibleNumericField`, numeric values are
handled, so send a `VALUE_CHANGED` event in addition.

This makes Orca with the qt6 VCL plugin announce
the new value when e.g. changing the page width
using the arrow up key in the "Format" -> "Page Style"
dialog.

For Accerciser, an additional fix is needed so the
value gets updated there in the interface view when
the a11y object is selected. Pending MR: [1]

[1] https://gitlab.gnome.org/GNOME/accerciser/-/merge_requests/25

Change-Id: Id911f50664df7220bc58204bc3477c5306a1da33
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150422
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
This commit is contained in:
Michael Weghorn 2023-04-14 18:25:34 +03:00
parent 86bbf9a4ec
commit 07f4fa7119
2 changed files with 16 additions and 0 deletions

View file

@ -20,6 +20,8 @@
#pragma once
#include <cppuhelper/implbase.hxx>
#include <vcl/vclevent.hxx>
#include <standard/vclxaccessibleedit.hxx>
#include <com/sun/star/accessibility/XAccessibleValue.hpp>
@ -30,6 +32,8 @@ class SVTXAccessibleNumericField final
public:
SVTXAccessibleNumericField(VCLXWindow* pVCLXindow);
virtual void ProcessWindowEvent(const VclWindowEvent& rVclWindowEvent) override;
// XAccessibleContext
virtual sal_Int16 SAL_CALL getAccessibleRole() override;

View file

@ -21,6 +21,7 @@
#include <comphelper/accessiblecontexthelper.hxx>
#include <toolkit/awt/vclxwindows.hxx>
#include <com/sun/star/accessibility/AccessibleEventId.hpp>
#include <com/sun/star/accessibility/AccessibleRole.hpp>
using namespace ::com::sun::star::accessibility;
@ -31,6 +32,17 @@ SVTXAccessibleNumericField::SVTXAccessibleNumericField(VCLXWindow* pVCLWindow)
{
}
void SVTXAccessibleNumericField::ProcessWindowEvent(const VclWindowEvent& rVclWindowEvent)
{
VCLXAccessibleEdit::ProcessWindowEvent(rVclWindowEvent);
if (rVclWindowEvent.GetId() == VclEventId::EditModify)
{
css::uno::Any aNewValue = getCurrentValue();
NotifyAccessibleEvent(AccessibleEventId::VALUE_CHANGED, css::uno::Any(), aNewValue);
}
}
sal_Int16 SVTXAccessibleNumericField::getAccessibleRole() { return AccessibleRole::SPIN_BOX; }
css::uno::Any SAL_CALL SVTXAccessibleNumericField::getCurrentValue()