summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Raykowski <raykowj@gmail..com>2019-11-02 12:51:36 -0800
committerJim Raykowski <raykowj@gmail.com>2019-11-07 00:57:48 +0100
commit25c390e17a7f1c018b5eed1ef7dfd568b76f4a84 (patch)
treeedeea5ed84d237ff16b4d43d83033e0fb5d23668
parent51c23bffbd8dd9fa0b39c87a61eb051320e81f96 (diff)
tdf#38199 Readonly mode tab key: Don't scroll if no hyperlink found
When viewing a document in readonly mode the action of the tab key is to move among Graphic, Frame, Ole, DrawObject, or DbForm if one these is already selected. If the cursor is inside an input field and has no multi selection then move among InputFields. Finally if neither the previous two cases apply then move among Hyperlinks which causes cursor position to move to top or bottom of the document when no Hyperlink is found. When no Hyperlink is found this patch restores the cursor position to the position before search and does not scroll to it on EndAction. Change-Id: I94ac882e7be124d2ddb6f86daac03a9389117cc5 Reviewed-on: https://gerrit.libreoffice.org/81955 Tested-by: Jenkins Reviewed-by: Jim Raykowski <raykowj@gmail.com>
-rw-r--r--sw/source/uibase/wrtsh/select.cxx13
1 files changed, 10 insertions, 3 deletions
diff --git a/sw/source/uibase/wrtsh/select.cxx b/sw/source/uibase/wrtsh/select.cxx
index e06f3dc69777..90664ae098f5 100644
--- a/sw/source/uibase/wrtsh/select.cxx
+++ b/sw/source/uibase/wrtsh/select.cxx
@@ -941,15 +941,22 @@ void SwWrtShell::SelectNextPrevHyperlink( bool bNext )
{
StartAction();
bool bRet = SwCursorShell::SelectNxtPrvHyperlink( bNext );
- if( !bRet )
+ if( !bRet ) // didn't find? wrap and check again
{
- // will we have this feature?
+ SwShellCursor* pCursor = GetCursor_();
+ SwCursorSaveState aSaveState(*pCursor);
EnterStdMode();
if( bNext )
SttEndDoc(true);
else
SttEndDoc(false);
- SwCursorShell::SelectNxtPrvHyperlink( bNext );
+ bRet = SwCursorShell::SelectNxtPrvHyperlink(bNext);
+ if (!bRet) // didn't find again? restore cursor position and bail
+ {
+ pCursor->RestoreSavePos();
+ EndAction(true); // don't scroll to restored cursor position
+ return;
+ }
}
EndAction();