[Libreoffice-commits] core.git: sw/source

Caolán McNamara caolanm at redhat.com
Mon Feb 25 08:57:41 PST 2013


 sw/source/core/access/accmap.cxx |    9 +++++++++
 sw/source/core/text/txtfrm.cxx   |   18 ++++++++++++++----
 2 files changed, 23 insertions(+), 4 deletions(-)

New commits:
commit 8d08ccd5b84c121867d7b3102f9d10b26005c682
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Feb 25 16:55:07 2013 +0000

    Resolves: fdo#56031 RSID attr changes drop content change events
    
    So if we have an INVALID_ATTR event in the queue and receive
    INVALID_CONTENT, drop the attr and replace it with invalid-content
    
    And anyway filter out the RSID change event from hitting the
    a11y queue, humans don't care that this changed, it's just noise
    
    Change-Id: I4842f217153fc90aa1dce75c3445053004c74536

diff --git a/sw/source/core/access/accmap.cxx b/sw/source/core/access/accmap.cxx
index eb186c7..6938c01 100644
--- a/sw/source/core/access/accmap.cxx
+++ b/sw/source/core/access/accmap.cxx
@@ -885,10 +885,19 @@ void SwAccessibleMap::AppendEvent( const SwAccessibleEvent_Impl& rEvent )
                 // POS_CHANGED event.
                 // Therefor, the event's type has to be adapted and the event
                 // has to be put at the end.
+                //
+                // fdo#56031 An INVALID_CONTENT event overwrites a INVALID_ATTR
+                // event and overwrites its flags
                 OSL_ENSURE( aEvent.GetType() != SwAccessibleEvent_Impl::CHILD_POS_CHANGED,
                         "invalid event combination" );
                 if( aEvent.GetType() == SwAccessibleEvent_Impl::CARET_OR_STATES )
                     aEvent.SetType( SwAccessibleEvent_Impl::INVALID_CONTENT );
+                else if ( aEvent.GetType() == SwAccessibleEvent_Impl::INVALID_ATTR )
+                {
+                    aEvent.SetType( SwAccessibleEvent_Impl::INVALID_CONTENT );
+                    aEvent.SetStates( rEvent.GetAllStates() );
+                }
+
                 break;
             case SwAccessibleEvent_Impl::POS_CHANGED:
                 // A pos changed event overwrites CARET_STATES (keeping its
diff --git a/sw/source/core/text/txtfrm.cxx b/sw/source/core/text/txtfrm.cxx
index af575c2..3eb2267 100644
--- a/sw/source/core/text/txtfrm.cxx
+++ b/sw/source/core/text/txtfrm.cxx
@@ -912,6 +912,13 @@ static void lcl_ModifyOfst( SwTxtFrm* pFrm, xub_StrLen nPos, xub_StrLen nLen )
     }
 }
 
+//Related: fdo#56031 filter out attribute changes that don't matter for
+//humans/a11y to stop flooding the destination mortal with useless noise
+static bool isA11yRelevantAttribute(MSHORT nWhich)
+{
+    return nWhich != RES_CHRATR_RSID;
+}
+
 /*************************************************************************
  *                      SwTxtFrm::Modify()
  *************************************************************************/
@@ -1294,11 +1301,14 @@ void SwTxtFrm::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew )
                     SwCntntFrm::Modify( pOld, pNew );
             }
 
-            // #i88069#
-            ViewShell* pViewSh = getRootFrm() ? getRootFrm()->GetCurrShell() : 0;
-            if ( pViewSh  )
+            if (isA11yRelevantAttribute(nWhich))
             {
-                pViewSh->InvalidateAccessibleParaAttrs( *this );
+                // #i88069#
+                ViewShell* pViewSh = getRootFrm() ? getRootFrm()->GetCurrShell() : 0;
+                if ( pViewSh  )
+                {
+                    pViewSh->InvalidateAccessibleParaAttrs( *this );
+                }
             }
         }
         break;


More information about the Libreoffice-commits mailing list