diff --git a/sw/source/core/access/acccontext.cxx b/sw/source/core/access/acccontext.cxx index 8c38ba1..2949c1e 100644 --- a/sw/source/core/access/acccontext.cxx +++ b/sw/source/core/access/acccontext.cxx @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -1359,6 +1360,10 @@ sal_Bool SwAccessibleContext::Select( SwPaM *pPaM, SdrObject *pObj, if( pFEShell ) pFEShell->FinishOLEObj(); + SwWrtShell* pWrtShell = pCrsrShell->ISA( SwWrtShell ) + ? static_cast( pCrsrShell ) + : 0; + sal_Bool bRet = sal_False; if( pObj ) { @@ -1383,7 +1388,17 @@ sal_Bool SwAccessibleContext::Select( SwPaM *pPaM, SdrObject *pObj, bCallShowCrsr = sal_True; } pCrsrShell->KillPams(); + if( pWrtShell && pPaM->HasMark() ) + // We have to do this or SwWrtShell can't figure out that it needs + // to kill the selection later, when the user moves the cursor. + pWrtShell->SttSelect(); pCrsrShell->SetSelection( *pPaM ); + if( pPaM->HasMark() && *pPaM->GetPoint() == *pPaM->GetMark()) + // Setting a "Selection" that starts and ends at the same spot + // should remove the selection rather than create an empty one, so + // that we get defined behavior if accessibility sets the cursor + // later. + pCrsrShell->ClearMark(); if( bCallShowCrsr ) pCrsrShell->ShowCrsr(); bRet = sal_True;