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.
diff --git a/sw/inc/accmap.hxx b/sw/inc/accmap.hxx
index 56f08905..ba18cf5 100644
--- a/sw/inc/accmap.hxx
+++ b/sw/inc/accmap.hxx
@@ -136,6 +136,9 @@ public:
#define ACC_STATE_OPAQUE 0x02
// pseudo states for events
// --> OD 2009-01-07 #i88069# - pseudo state for event TEXT_ATTRIBUTE_CHANGED
#define ACC_STATE_TEXT_ATTRIBUTE_CHANGED 0x0200
// <--
// --> OD 2005-12-12 #i27301# - pseudo state for event TEXT_SELECTION_CHANGED
#define ACC_STATE_TEXT_SELECTION_CHANGED 0x0100
// <--
@@ -282,6 +285,10 @@ public:
void InvalidateContent( const SwFrm *pFrm );
// --> OD 2009-01-06 #i88069#
void InvalidateAttr( const SwTxtFrm& rTxtFrm );
// <--
void InvalidateCursorPosition( const SwFrm *pFrm );
void InvalidateFocus();
diff --git a/sw/inc/viewsh.hxx b/sw/inc/viewsh.hxx
index 060bcb2..d73db5d 100644
--- a/sw/inc/viewsh.hxx
+++ b/sw/inc/viewsh.hxx
@@ -564,6 +564,17 @@ public:
*/
void InvalidateAccessibleParaTextSelection();
/** invalidate attributes for paragraphs
OD 2009-01-06 #i88069#
@author OD
@param rTxtFrm
input parameter - paragraph frame, whose attributes have changed
*/
void InvalidateAccessibleParaAttrs( const SwTxtFrm& rTxtFrm );
ViewShell( ViewShell&, Window *pWin = 0, OutputDevice *pOut = 0,
long nFlags = 0 );
ViewShell( SwDoc& rDoc, Window *pWin,
diff --git a/sw/source/core/access/acccontext.cxx b/sw/source/core/access/acccontext.cxx
index 9fa7d16..1993978 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 778be80..d35f026 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 256bdf4..a9ec7b0 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 );
diff --git a/sw/source/core/inc/viewimp.hxx b/sw/source/core/inc/viewimp.hxx
index 4769900..d51d42f 100644
--- a/sw/source/core/inc/viewimp.hxx
+++ b/sw/source/core/inc/viewimp.hxx
@@ -201,6 +201,16 @@ private:
*/
void _InvalidateAccessibleParaTextSelection();
/** invalidate attributes for paragraphs
OD 2009-01-06 #i88069#
implementation for wrapper method
<ViewShell::InvalidateAccessibleParaAttrs(..)>
@author OD
*/
void _InvalidateAccessibleParaAttrs( const SwTxtFrm& rTxtFrm );
public:
SwViewImp( ViewShell * );
~SwViewImp();
diff --git a/sw/source/core/text/txtfrm.cxx b/sw/source/core/text/txtfrm.cxx
index 32404b8..e7f0fcd 100644
--- a/sw/source/core/text/txtfrm.cxx
+++ b/sw/source/core/text/txtfrm.cxx
@@ -1296,6 +1296,13 @@ void SwTxtFrm::Modify( SfxPoolItem *pOld, SfxPoolItem *pNew )
else
SwCntntFrm::Modify( pOld, pNew );
}
// --> OD 2009-01-06 #i88069#
if ( GetShell() )
{
GetShell()->InvalidateAccessibleParaAttrs( *this );
}
// <--
}
break;
diff --git a/sw/source/core/view/viewimp.cxx b/sw/source/core/view/viewimp.cxx
index cf409d8..7bb1aab 100644
--- a/sw/source/core/view/viewimp.cxx
+++ b/sw/source/core/view/viewimp.cxx
@@ -572,6 +572,27 @@ void SwViewImp::_InvalidateAccessibleParaTextSelection()
} while ( pTmp != pVSh );
}
/** invalidate attributes for paragraphs
OD 2009-01-06 #i88069#
@author OD
*/
void SwViewImp::_InvalidateAccessibleParaAttrs( const SwTxtFrm& rTxtFrm )
{
ViewShell* pVSh = GetShell();
ViewShell* pTmp = pVSh;
do
{
if ( pTmp->Imp()->IsAccessible() )
{
pTmp->Imp()->GetAccessibleMap().InvalidateAttr( rTxtFrm );
}
pTmp = (ViewShell *)pTmp->GetNext();
} while ( pTmp != pVSh );
}
// OD 15.01.2003 #103492# - method signature change due to new page preview functionality
void SwViewImp::UpdateAccessiblePreview( const std::vector<PrevwPage*>& _rPrevwPages,
const Fraction& _rScale,
diff --git a/sw/source/core/view/viewsh.cxx b/sw/source/core/view/viewsh.cxx
index 3849a3e..b63a32d 100644
--- a/sw/source/core/view/viewsh.cxx
+++ b/sw/source/core/view/viewsh.cxx
@@ -2567,6 +2567,20 @@ void ViewShell::InvalidateAccessibleParaTextSelection()
}
}
/** invalidate attributes for paragraphs
OD 2009-01-06 #i88069#
@author OD
*/
void ViewShell::InvalidateAccessibleParaAttrs( const SwTxtFrm& rTxtFrm )
{
if ( GetLayout() && GetLayout()->IsAnyShellAccessible() )
{
Imp()->_InvalidateAccessibleParaAttrs( rTxtFrm );
}
}
/* -----------------------------06.05.2002 13:23------------------------------
---------------------------------------------------------------------------*/
diff --git a/sw/source/ui/wrtsh/wrtsh4.cxx b/sw/source/ui/wrtsh/wrtsh4.cxx
index b7203ca..0a7c171 100644
--- a/sw/source/ui/wrtsh/wrtsh4.cxx
+++ b/sw/source/ui/wrtsh/wrtsh4.cxx
@@ -250,12 +250,16 @@ BOOL SwWrtShell::_FwdPara()
{
Push();
ClearMark();
if(!SwCrsrShell::Right(1,CRSR_SKIP_CHARS))
{
Pop(FALSE);
return 0;
}
SwCrsrShell::Left(1,CRSR_SKIP_CHARS);
// --> OD 2009-01-06 #i81824#
// going right and back again left not needed and causes too much
// accessibility events due to the cursor movements.
// if(!SwCrsrShell::Right(1,CRSR_SKIP_CHARS))
// {
// Pop(FALSE);
// return 0;
// }
// SwCrsrShell::Left(1,CRSR_SKIP_CHARS);
// <--
BOOL bRet = SwCrsrShell::MovePara(fnParaNext, fnParaStart);
ClearMark();
@@ -268,15 +272,28 @@ BOOL SwWrtShell::_BwdPara()
{
Push();
ClearMark();
if(!SwCrsrShell::Left(1,CRSR_SKIP_CHARS))
{
Pop(FALSE);
return 0;
}
SwCrsrShell::Right(1,CRSR_SKIP_CHARS);
if(!IsSttOfPara())
SttPara();
// --> OD 2009-01-06 #i81824#
// going left and back again right not needed and causes too much
// accessibility events due to the cursor movements.
// if(!SwCrsrShell::Left(1,CRSR_SKIP_CHARS))
// {
// Pop(FALSE);
// return 0;
// }
// SwCrsrShell::Right(1,CRSR_SKIP_CHARS);
// <--
// --> OD 2009-01-06 #i81824#
// going to start of paragraph only needed, if move to previous paragraph
// does not happen. Otherwise, useless accessibility events are triggered
// due to cursor movements.
// if(!IsSttOfPara())
// SttPara();
BOOL bRet = SwCrsrShell::MovePara(fnParaPrev, fnParaStart);
if ( !bRet && !IsSttOfPara() )
{
SttPara();
}
// <--
ClearMark();
Combine();