sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx |   21 +++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

New commits:
commit 5f9a955042822d05af5c04b2c852738c7e1e21a2
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Fri Jun 7 13:03:19 2024 +0200
Commit:     Michael Weghorn <m.wegh...@posteo.de>
CommitDate: Fri Jun 7 14:44:14 2024 +0200

    tdf#158914 sc a11y: Send TEXT_CHANGED event when text changes
    
    Don't always send an `AccessibleEventId::VALUE_CHANGED` event
    when the string value of a Calc cell changes, but send a
    `AccessibleEventId::TEXT_CHANGED` event instead.
    
    Only send an `AccessibleEventId::VALUE_CHANGED` event in
    addition if the cell actually has value data, as the
    `XAccessibleValue` interface and the related `VALUE_CHANGED`
    event are meant to handle numerical values only.
    
    Together with changes like the one in PS 11 of [1],
    sending the `TEXT_CHANGE` event might help with
    missing text updates on the AT side, e.g. the NVDA or
    Accerciser scenarios described in [2], s. further
    discussion there.
    
    [1] https://gerrit.libreoffice.org/c/core/+/167961
    [2] 
https://gerrit.libreoffice.org/c/core/+/167961/comments/16394c5a_338dbbf2
    
    Change-Id: Ideba61a9200100c66d55fa18e81ea28e75092905
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168526
    Reviewed-by: Patrick Luby <guibomac...@gmail.com>
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>

diff --git a/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx 
b/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx
index 7296863d0cee..64d220619c7f 100644
--- a/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx
+++ b/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx
@@ -33,6 +33,7 @@
 #include <com/sun/star/accessibility/AccessibleEventId.hpp>
 #include <com/sun/star/accessibility/AccessibleTableModelChangeType.hpp>
 #include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
+#include <comphelper/accessibletexthelper.hxx>
 #include <sal/log.hxx>
 #include <tools/gen.hxx>
 #include <svtools/colorcfg.hxx>
@@ -682,10 +683,22 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& 
rBC, const SfxHint& rHint
                         OUString 
valStr(pScDoc->GetString(aNewCell.Col(),aNewCell.Row(),aNewCell.Tab()));
                         if(m_strCurCellValue != valStr)
                         {
-                            AccessibleEventObject aEvent;
-                            aEvent.EventId = AccessibleEventId::VALUE_CHANGED;
-                            mpAccCell->CommitChange(aEvent);
-                            m_strCurCellValue=valStr;
+                            uno::Any aOldValue;
+                            uno::Any aNewValue;
+                            
comphelper::OCommonAccessibleText::implInitTextChangedEvent(m_strCurCellValue, 
valStr, aOldValue, aNewValue);
+                            AccessibleEventObject aTextChangedEvent;
+                            aTextChangedEvent.EventId = 
AccessibleEventId::TEXT_CHANGED;
+                            aTextChangedEvent.OldValue = aOldValue;
+                            aTextChangedEvent.NewValue = aNewValue;
+                            mpAccCell->CommitChange(aTextChangedEvent);
+
+                            if (pScDoc->HasValueData(maActiveCell))
+                            {
+                                AccessibleEventObject aEvent;
+                                aEvent.EventId = 
AccessibleEventId::VALUE_CHANGED;
+                                mpAccCell->CommitChange(aEvent);
+                                m_strCurCellValue=valStr;
+                            }
                         }
                         OUString tabName;
                         pScDoc->GetName( maActiveCell.Tab(), tabName );

Reply via email to