diff --git a/src/cascadia/TerminalControl/TermControlUiaProvider.cpp b/src/cascadia/TerminalControl/TermControlUiaProvider.cpp index 353d30a28bf..b2a30e43511 100644 --- a/src/cascadia/TerminalControl/TermControlUiaProvider.cpp +++ b/src/cascadia/TerminalControl/TermControlUiaProvider.cpp @@ -95,6 +95,11 @@ const winrt::Windows::UI::Xaml::Thickness TermControlUiaProvider::GetPadding() c return _termControl->GetPadding(); } +void TermControlUiaProvider::ChangeViewport(const SMALL_RECT NewWindow) +{ + _termControl->ScrollViewport(NewWindow.Top); +} + HRESULT TermControlUiaProvider::GetSelectionRanges(_In_ IRawElementProviderSimple* pProvider, const std::wstring_view wordDelimiters, _Out_ std::deque>& result) { try diff --git a/src/cascadia/TerminalControl/TermControlUiaProvider.hpp b/src/cascadia/TerminalControl/TermControlUiaProvider.hpp index c90d3bf6ca3..0c41fa53d21 100644 --- a/src/cascadia/TerminalControl/TermControlUiaProvider.hpp +++ b/src/cascadia/TerminalControl/TermControlUiaProvider.hpp @@ -45,6 +45,7 @@ namespace Microsoft::Terminal const COORD GetFontSize() const; const winrt::Windows::UI::Xaml::Thickness GetPadding() const; + void ChangeViewport(const SMALL_RECT NewWindow) override; protected: HRESULT GetSelectionRanges(_In_ IRawElementProviderSimple* pProvider, const std::wstring_view wordDelimiters, _Out_ std::deque>& selectionRanges) override; diff --git a/src/cascadia/TerminalControl/UiaTextRange.cpp b/src/cascadia/TerminalControl/UiaTextRange.cpp index 6f572b1a489..35169adcc36 100644 --- a/src/cascadia/TerminalControl/UiaTextRange.cpp +++ b/src/cascadia/TerminalControl/UiaTextRange.cpp @@ -106,9 +106,10 @@ IFACEMETHODIMP UiaTextRange::Clone(_Outptr_result_maybenull_ ITextRangeProvider* return S_OK; } -void UiaTextRange::_ChangeViewport(const SMALL_RECT /*NewWindow*/) +void UiaTextRange::_ChangeViewport(const SMALL_RECT NewWindow) { - // TODO GitHub #2361: Update viewport when calling UiaTextRangeBase::ScrollIntoView() + auto provider = static_cast(_pProvider); + provider->ChangeViewport(NewWindow); } // Method Description: diff --git a/src/interactivity/win32/screenInfoUiaProvider.hpp b/src/interactivity/win32/screenInfoUiaProvider.hpp index 3b39a32eec8..7984621835d 100644 --- a/src/interactivity/win32/screenInfoUiaProvider.hpp +++ b/src/interactivity/win32/screenInfoUiaProvider.hpp @@ -41,7 +41,7 @@ namespace Microsoft::Console::Interactivity::Win32 IFACEMETHODIMP get_FragmentRoot(_COM_Outptr_result_maybenull_ IRawElementProviderFragmentRoot** ppProvider) override; HWND GetWindowHandle() const; - void ChangeViewport(const SMALL_RECT NewWindow); + void ChangeViewport(const SMALL_RECT NewWindow) override; protected: HRESULT GetSelectionRanges(_In_ IRawElementProviderSimple* pProvider, const std::wstring_view wordDelimiters, _Out_ std::deque>& selectionRanges) override; diff --git a/src/types/ScreenInfoUiaProviderBase.h b/src/types/ScreenInfoUiaProviderBase.h index 82bdd31fcb0..97c7a8f698c 100644 --- a/src/types/ScreenInfoUiaProviderBase.h +++ b/src/types/ScreenInfoUiaProviderBase.h @@ -47,6 +47,7 @@ namespace Microsoft::Console::Types ~ScreenInfoUiaProviderBase() = default; [[nodiscard]] HRESULT Signal(_In_ EVENTID id); + virtual void ChangeViewport(const SMALL_RECT NewWindow) = 0; // IRawElementProviderSimple methods IFACEMETHODIMP get_ProviderOptions(_Out_ ProviderOptions* pOptions) noexcept override;