diff options
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/edit/textview.cxx | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/vcl/source/edit/textview.cxx b/vcl/source/edit/textview.cxx index 3c94e6fa6e1e..b295b78af8b0 100644 --- a/vcl/source/edit/textview.cxx +++ b/vcl/source/edit/textview.cxx @@ -1016,7 +1016,11 @@ TextSelection const & TextView::ImpMoveCursor( const KeyEvent& rKeyEvent ) break; case KEY_DOWN: aPaM = CursorDown( aPaM ); break; - case KEY_HOME: aPaM = bCtrl ? CursorStartOfDoc() : CursorStartOfLine( aPaM ); + case KEY_HOME: + // tdf#145764 - move cursor to the beginning or first character in the same line + aPaM = bCtrl ? CursorStartOfDoc() + : aPaM.GetIndex() == 0 ? CursorFirstWord( aPaM ) + : CursorStartOfLine( aPaM ); break; case KEY_END: aPaM = bCtrl ? CursorEndOfDoc() : CursorEndOfLine( aPaM ); break; @@ -1156,6 +1160,17 @@ TextPaM TextView::CursorRight( const TextPaM& rPaM, sal_uInt16 nCharacterIterato return aPaM; } +TextPaM TextView::CursorFirstWord( const TextPaM& rPaM ) +{ + TextPaM aPaM(rPaM); + TextNode* pNode = mpImpl->mpTextEngine->mpDoc->GetNodes()[aPaM.GetPara()].get(); + + css::uno::Reference<css::i18n::XBreakIterator> xBI = mpImpl->mpTextEngine->GetBreakIterator(); + aPaM.GetIndex() = xBI->nextWord(pNode->GetText(), 0, mpImpl->mpTextEngine->GetLocale(), css::i18n::WordType::ANYWORD_IGNOREWHITESPACES).startPos; + + return aPaM; +} + TextPaM TextView::CursorWordLeft( const TextPaM& rPaM ) { TextPaM aPaM( rPaM ); |