diff options
author | Oliver Bolte <obo@openoffice.org> | 2009-02-27 05:38:42 +0000 |
---|---|---|
committer | Oliver Bolte <obo@openoffice.org> | 2009-02-27 05:38:42 +0000 |
commit | 590a804e7815574a066c658f1f05875a6d0f448f (patch) | |
tree | 2ba33087772154dc21e47c7537422eb45c2e078f /sw/source/core/access | |
parent | fbb1370148b2eebc0d6819d77c67f7a2d30b924a (diff) |
CWS-TOOLING: integrate CWS sw31a11y01
2009-01-09 11:36:08 +0100 ab r266069 : #i97891# NSAccessibilityRoleDescription
2009-01-07 11:01:19 +0100 od r265955 : #i88069# emit accessibility event TEXT_ATTRIBUTE_CHANGED on change of paragraph attributes
2009-01-06 11:50:21 +0100 od r265904 : #i81824# methods <SwWrtShell::_FwdPara()> and <SwWrtShell::_BwdPara()>
- avoid unnecessary cursor movements due avoid unnecessary
accessibility events.
Diffstat (limited to 'sw/source/core/access')
-rw-r--r-- | sw/source/core/access/acccontext.cxx | 14 | ||||
-rw-r--r-- | sw/source/core/access/acccontext.hxx | 8 | ||||
-rw-r--r-- | sw/source/core/access/accmap.cxx | 67 |
3 files changed, 88 insertions, 1 deletions
diff --git a/sw/source/core/access/acccontext.cxx b/sw/source/core/access/acccontext.cxx index 9fa7d16b6850..1993978d9030 100644 --- a/sw/source/core/access/acccontext.cxx +++ b/sw/source/core/access/acccontext.cxx @@ -1332,6 +1332,20 @@ void SwAccessibleContext::InvalidateTextSelection() FireAccessibleEvent( aEvent ); } +/** attributes has changed + + OD 2009-01-06 #i88069# + + @author OD +*/ +void SwAccessibleContext::InvalidateAttr() +{ + AccessibleEventObject aEvent; + aEvent.EventId = AccessibleEventId::TEXT_ATTRIBUTE_CHANGED; + + FireAccessibleEvent( aEvent ); +} + sal_Bool SwAccessibleContext::HasCursor() { return sal_False; diff --git a/sw/source/core/access/acccontext.hxx b/sw/source/core/access/acccontext.hxx index 778be8054d0e..d35f026968b0 100644 --- a/sw/source/core/access/acccontext.hxx +++ b/sw/source/core/access/acccontext.hxx @@ -376,6 +376,14 @@ public: */ void InvalidateTextSelection(); + /** attributes has changed + + OD 2009-01-06 #i88069# + + @author OD + */ + void InvalidateAttr(); + const ::rtl::OUString& GetName() const { return sName; } virtual sal_Bool HasCursor(); // required by map to remember that object diff --git a/sw/source/core/access/accmap.cxx b/sw/source/core/access/accmap.cxx index 256bdf4e0ab9..a9ec7b047da8 100644 --- a/sw/source/core/access/accmap.cxx +++ b/sw/source/core/access/accmap.cxx @@ -325,7 +325,8 @@ public: POS_CHANGED, CHILD_POS_CHANGED, SHAPE_SELECTION, - DISPOSE }; + DISPOSE, + INVALID_ATTR }; private: SwRect maOldBox; // the old bounds for CHILD_POS_CHANGED @@ -458,6 +459,12 @@ public: return ( mnStates & ACC_STATE_TEXT_SELECTION_CHANGED ) != 0; } // <-- + // --> OD 2009-01-07 #i88069# - new event TEXT_ATTRIBUTE_CHANGED + inline sal_Bool IsInvalidateTextAttrs() const + { + return ( mnStates & ACC_STATE_TEXT_ATTRIBUTE_CHANGED ) != 0; + } + // <-- // --> OD 2005-12-12 #i27301# - use new type definition <tAccessibleStates> // for return value inline tAccessibleStates GetStates() const @@ -613,6 +620,13 @@ void SwAccessibleMap::FireEvent( const SwAccessibleEvent_Impl& rEvent ) } else if( xAccImpl.isValid() && xAccImpl->GetFrm() ) { + // --> OD 2009-01-07 #i88069# + if ( rEvent.GetType() != SwAccessibleEvent_Impl::DISPOSE && + rEvent.IsInvalidateTextAttrs() ) + { + xAccImpl->InvalidateAttr(); + } + // <-- switch( rEvent.GetType() ) { case SwAccessibleEvent_Impl::INVALID_CONTENT: @@ -629,6 +643,11 @@ void SwAccessibleMap::FireEvent( const SwAccessibleEvent_Impl& rEvent ) ASSERT( xAccImpl.isValid(), "dispose event has been stored" ); break; + // --> OD 2009-01-06 #i88069# + case SwAccessibleEvent_Impl::INVALID_ATTR: + // nothing to do here - handled above + break; + // <-- default: break; } @@ -744,6 +763,12 @@ void SwAccessibleMap::AppendEvent( const SwAccessibleEvent_Impl& rEvent ) // remove all events for the frame in question. bAppendEvent = sal_False; break; + // --> OD 2009-01-06 #i88069# + case SwAccessibleEvent_Impl::INVALID_ATTR: + ASSERT( aEvent.GetType() == SwAccessibleEvent_Impl::INVALID_ATTR, + "invalid event combination" ); + break; + // <-- } if( bAppendEvent ) { @@ -1683,6 +1708,46 @@ void SwAccessibleMap::InvalidateContent( const SwFrm *pFrm ) } } +// --> OD 2009-01-06 #i88069# +void SwAccessibleMap::InvalidateAttr( const SwTxtFrm& rTxtFrm ) +{ + SwFrmOrObj aFrmOrObj( &rTxtFrm ); + if( aFrmOrObj.IsAccessible( GetShell()->IsPreView() ) ) + { + uno::Reference < XAccessible > xAcc; + { + vos::OGuard aGuard( maMutex ); + + if( mpFrmMap ) + { + SwAccessibleContextMap_Impl::iterator aIter = + mpFrmMap->find( aFrmOrObj.GetSwFrm() ); + if( aIter != mpFrmMap->end() ) + xAcc = (*aIter).second; + } + } + + if( xAcc.is() ) + { + SwAccessibleContext *pAccImpl = + static_cast< SwAccessibleContext *>( xAcc.get() ); + if( GetShell()->ActionPend() ) + { + SwAccessibleEvent_Impl aEvent( SwAccessibleEvent_Impl::INVALID_ATTR, + pAccImpl, aFrmOrObj ); + aEvent.SetStates( ACC_STATE_TEXT_ATTRIBUTE_CHANGED ); + AppendEvent( aEvent ); + } + else + { + FireEvents(); + pAccImpl->InvalidateAttr(); + } + } + } +} +// <-- + void SwAccessibleMap::InvalidateCursorPosition( const SwFrm *pFrm ) { SwFrmOrObj aFrmOrObj( pFrm ); |