--- a/editeng/source/editeng/impedit2.cxx Wed Jun 30 20:59:38 2010 +0100 +++ a/editeng/source/editeng/impedit2.cxx Thu Jul 01 14:02:55 2010 +0100 @@ -4213,13 +4213,27 @@ long nPosInPortion = pLine->GetCharPosArray().GetObject( nPos ); #else // #i74188# (positioning the cursor after deleting components of combined indic characters) + sal_uInt16 nStartCalc = 0; + for (sal_uInt16 i = 0; i < nTextPortion; ++i) + { + TextPortion *pTextPortion = pParaPortion->GetTextPortions().GetObject( i ); + nStartCalc += pTextPortion->GetLen(); + } + SvxFont aTmpFont( pParaPortion->GetNode()->GetCharAttribs().GetDefFont() ); + + GetRefDevice()->Push( PUSH_ALL ); + ImplInitLayoutMode( GetRefDevice(), GetEditDoc().GetPos(pParaPortion->GetNode()), 0xFFFF ); + ImplInitDigitMode( GetRefDevice(), 0, 0, 0, aTmpFont.GetLanguage() ); + GetRefDevice()->SetMapMode( MAP_100TH_MM ); + SeekCursor( pParaPortion->GetNode(), nPos+1, aTmpFont ); aTmpFont.SetPhysFont( GetRefDevice() ); - ImplInitDigitMode( GetRefDevice(), 0, 0, 0, aTmpFont.GetLanguage() ); - String sSegment(*pParaPortion->GetNode(), pLine->GetStart(), nPos+1); + String sSegment(*pParaPortion->GetNode(), pLine->GetStart()+nStartCalc, nPos+1-nStartCalc); long nPosInPortion = aTmpFont.QuickGetTextSize( GetRefDevice(), - sSegment, 0, nPos+1, NULL ).Width(); + sSegment, 0, nPos+1-nStartCalc, NULL ).Width(); + + GetRefDevice()->Pop(); #endif if ( !pPortion->IsRightToLeft() )