summaryrefslogtreecommitdiff
path: root/sw/source/core/access
diff options
context:
space:
mode:
authorOliver Bolte <obo@openoffice.org>2009-02-27 05:38:42 +0000
committerOliver Bolte <obo@openoffice.org>2009-02-27 05:38:42 +0000
commit590a804e7815574a066c658f1f05875a6d0f448f (patch)
tree2ba33087772154dc21e47c7537422eb45c2e078f /sw/source/core/access
parentfbb1370148b2eebc0d6819d77c67f7a2d30b924a (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.cxx14
-rw-r--r--sw/source/core/access/acccontext.hxx8
-rw-r--r--sw/source/core/access/accmap.cxx67
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 );