From a6ac3bbeaeb75abde46d94d168aac32f906647bf Mon Sep 17 00:00:00 2001 From: Rudy Huyn Date: Tue, 7 Apr 2020 17:08:43 -0700 Subject: [PATCH] CalculationResult: keep focus on Scroll buttons (#669) --- src/Calculator/Controls/CalculationResult.cpp | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/Calculator/Controls/CalculationResult.cpp b/src/Calculator/Controls/CalculationResult.cpp index ed092fab..1b15333a 100644 --- a/src/Calculator/Controls/CalculationResult.cpp +++ b/src/Calculator/Controls/CalculationResult.cpp @@ -323,17 +323,38 @@ void CalculationResult::UpdateScrollButtons() return; } + bool shouldTryFocusScrollRight = false; if (m_scrollLeft != nullptr) { - m_scrollLeft->Visibility = m_textContainer->HorizontalOffset > SCROLL_BUTTONS_APPROXIMATION_RANGE ? ::Visibility::Visible : ::Visibility::Collapsed; + auto scrollLeftVisibility = m_textContainer->HorizontalOffset > SCROLL_BUTTONS_APPROXIMATION_RANGE ? ::Visibility::Visible : ::Visibility::Collapsed; + + if (scrollLeftVisibility == ::Visibility::Collapsed) + { + shouldTryFocusScrollRight = m_scrollLeft->Equals(FocusManager::GetFocusedElement()); + } + + m_scrollLeft->Visibility = scrollLeftVisibility; } if (m_scrollRight != nullptr) { - m_scrollRight->Visibility = + auto scrollRightVisibility = m_textContainer->HorizontalOffset + m_textContainer->ViewportWidth + SCROLL_BUTTONS_APPROXIMATION_RANGE < m_textContainer->ExtentWidth ? ::Visibility::Visible : ::Visibility::Collapsed; + + if (scrollRightVisibility == ::Visibility::Collapsed && m_scrollLeft != nullptr && m_scrollLeft->Visibility == ::Visibility::Visible + && m_scrollRight->Equals(FocusManager::GetFocusedElement())) + { + // ScrollRight had the focus and will be collapsed, ScrollLeft should get the focus + m_scrollLeft->Focus(::FocusState::Programmatic); + } + m_scrollRight->Visibility = scrollRightVisibility; + + if (shouldTryFocusScrollRight && scrollRightVisibility == ::Visibility::Visible) + { + m_scrollRight->Focus(::FocusState::Programmatic); + } } }