sfx2/source/sidebar/FocusManager.cxx | 42 ++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 13 deletions(-)
New commits: commit 383e68da6c429c243c1e7be6699acaa942b712bc Author: Jim Raykowski <rayk...@gmail.com> AuthorDate: Mon Aug 7 21:20:04 2023 -0800 Commit: Jim Raykowski <rayk...@gmail.com> CommitDate: Tue Aug 8 21:21:03 2023 +0200 tdf#125797 Sidebar: Skip over disabled tabbar tabs This patch makes keyboard navigation of the sidebar tabbar skip over disabled tabs. Tabs become disabled when a document is set in read- only mode. They can also be disabled by user customization of the tabbar. Change-Id: Iafabfe27fbeaea60acf66527eafbb5396edaf647 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155442 Tested-by: Jenkins Reviewed-by: Rafael Lima <rafael.palma.l...@gmail.com> diff --git a/sfx2/source/sidebar/FocusManager.cxx b/sfx2/source/sidebar/FocusManager.cxx index ee03a52a3c17..74a3a1ef0ff3 100644 --- a/sfx2/source/sidebar/FocusManager.cxx +++ b/sfx2/source/sidebar/FocusManager.cxx @@ -380,9 +380,19 @@ bool FocusManager::HandleKeyEvent( case PC_DeckToolBox: { - // Moves to the first deck activation button that is visible - sal_Int32 nIndex(1); - while(!maButtons[nIndex]->get_visible() && ++nIndex > 0); + // Moves to the first deck activation button that is visible and sensitive + sal_Int32 nIndex(0); + sal_Int32 nButtons(maButtons.size()); + if (nButtons > 1) + { + nIndex = 1; + // Finds the next visible button that is sensitive + while((!maButtons[nIndex]->get_visible() || + !maButtons[nIndex]->get_sensitive()) && ++nIndex < nButtons); + // Wrap to the menu button when going past the last button + if (nIndex >= nButtons) + nIndex = 0; + } FocusButton(nIndex); bConsumed = true; } @@ -420,9 +430,10 @@ bool FocusManager::HandleKeyEvent( FocusDeckTitle(); else { - // Focus the last button. + // Set focus to the last visible sensitive button. sal_Int32 nIndex(maButtons.size()-1); - while(!maButtons[nIndex]->get_visible() && --nIndex > 0); + while((!maButtons[nIndex]->get_visible() || + !maButtons[nIndex]->get_sensitive()) && --nIndex > 0); FocusButton(nIndex); } bConsumed = true; @@ -439,8 +450,9 @@ bool FocusManager::HandleKeyEvent( else nIndex = aLocation.mnIndex - 1; - // Finds the previous visible button - while(!maButtons[nIndex]->get_visible() && --nIndex > 0); + // Finds the previous visible sensitive button + while((!maButtons[nIndex]->get_visible() || + !maButtons[nIndex]->get_sensitive()) && --nIndex > 0); FocusButton(nIndex); bConsumed = true; } @@ -470,14 +482,18 @@ bool FocusManager::HandleKeyEvent( if (rKeyCode.GetCode() == KEY_RIGHT) break; - sal_Int32 nIndex; - if (o3tl::make_unsigned(aLocation.mnIndex) >= maButtons.size() - 1) + sal_Int32 nButtons(maButtons.size()); + + sal_Int32 nIndex = aLocation.mnIndex + 1; + if (nIndex >= nButtons) nIndex = 0; - else - nIndex = aLocation.mnIndex + 1; - // Finds the next visible button - while(!maButtons[nIndex]->get_visible() && ++nIndex > 0); + // Finds the next visible sensitive button + while((!maButtons[nIndex]->get_visible() || + !maButtons[nIndex]->get_sensitive()) && ++nIndex < nButtons); + // Wrap to the menu button when going past the last button + if (nIndex >= nButtons) + nIndex = 0; FocusButton(nIndex); bConsumed = true; }