diff options
author | Vincent Povirk <madewokherd@gmail.com> | 2011-12-19 14:51:18 +0100 |
---|---|---|
committer | Cédric Bosdonnat <cedric.bosdonnat@free.fr> | 2011-12-19 14:54:30 +0100 |
commit | d6dc60ab350824bd0dffbf699cac13a3efd1e289 (patch) | |
tree | d963c5b33378c24d0aa75a6696f66f5307e7f601 /sw | |
parent | 9351f4c1d6a3567c3b013894a0cc08471b4b0156 (diff) |
sw: Fix cursor accessibility API (fdo#43390)
Diffstat (limited to 'sw')
-rw-r--r-- | sw/source/core/access/acccontext.cxx | 15 |
1 files changed, 15 insertions, 0 deletions
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 <viewsh.hxx> #include <crsrsh.hxx> #include <fesh.hxx> +#include <wrtsh.hxx> #include <txtfrm.hxx> #include <ndtxt.hxx> #include <pagefrm.hxx> @@ -1359,6 +1360,10 @@ sal_Bool SwAccessibleContext::Select( SwPaM *pPaM, SdrObject *pObj, if( pFEShell ) pFEShell->FinishOLEObj(); + SwWrtShell* pWrtShell = pCrsrShell->ISA( SwWrtShell ) + ? static_cast<SwWrtShell*>( 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; |