From d6dc60ab350824bd0dffbf699cac13a3efd1e289 Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Mon, 19 Dec 2011 14:51:18 +0100 Subject: sw: Fix cursor accessibility API (fdo#43390) --- sw/source/core/access/acccontext.cxx | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/sw/source/core/access/acccontext.cxx b/sw/source/core/access/acccontext.cxx index 8c38ba1fae54..2949c1e63046 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; -- cgit