summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorVincent Povirk <madewokherd@gmail.com>2011-12-19 14:51:18 +0100
committerCédric Bosdonnat <cedric.bosdonnat@free.fr>2011-12-19 14:54:30 +0100
commitd6dc60ab350824bd0dffbf699cac13a3efd1e289 (patch)
treed963c5b33378c24d0aa75a6696f66f5307e7f601 /sw
parent9351f4c1d6a3567c3b013894a0cc08471b4b0156 (diff)
sw: Fix cursor accessibility API (fdo#43390)
Diffstat (limited to 'sw')
-rw-r--r--sw/source/core/access/acccontext.cxx15
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;