diff options
author | Caolán McNamara <caolanm@redhat.com> | 2013-02-25 16:55:07 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-02-25 16:57:22 +0000 |
commit | 8d08ccd5b84c121867d7b3102f9d10b26005c682 (patch) | |
tree | cd2a8a48c1faee8e309bf013d6033e40c41be9df | |
parent | eb37322f14e6ed12a0db0f7fad1af81114a2ed80 (diff) |
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
-rw-r--r-- | sw/source/core/access/accmap.cxx | 9 | ||||
-rw-r--r-- | sw/source/core/text/txtfrm.cxx | 18 |
2 files changed, 23 insertions, 4 deletions
diff --git a/sw/source/core/access/accmap.cxx b/sw/source/core/access/accmap.cxx index eb186c710de2..6938c0106257 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 af575c212b74..3eb2267660b1 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; |