Skip to content

Commit

Permalink
For this commit, I went with what was in #11501. That seems to have b…
Browse files Browse the repository at this point in the history
…een wrong. I get all sorts of errors. I should to the opposite.

(cherry picked from commit bf0f516)
  • Loading branch information
zadjii-msft committed Apr 18, 2022
1 parent 07a1a07 commit 91977be
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 31 deletions.
34 changes: 11 additions & 23 deletions src/cascadia/TerminalControl/InteractivityAutomationPeer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
{
_controlPadding = til::rect{ til::math::rounding, padding };
}
void InteractivityAutomationPeer::ParentProvider(Windows::UI::Xaml::Automation::Provider::IRawElementProviderSimple parentProvider)
void InteractivityAutomationPeer::ParentProvider(AutomationPeer parentProvider)
{
_parentProvider = parentProvider;
}
Expand Down Expand Up @@ -120,32 +120,23 @@ namespace winrt::Microsoft::Terminal::Control::implementation
THROW_IF_FAILED(_uiaProvider->RangeFromChild(/* IRawElementProviderSimple */ nullptr,
&returnVal));

// const auto parentProvider = this->ProviderFromPeer(*this);
const auto parentProvider = _parentProvider;
const auto xutr = winrt::make_self<XamlUiaTextRange>(returnVal, parentProvider);
return xutr.as<XamlAutomation::ITextRangeProvider>();
return _CreateXamlUiaTextRange(returnVal);
}

XamlAutomation::ITextRangeProvider InteractivityAutomationPeer::RangeFromPoint(Windows::Foundation::Point screenLocation)
{
UIA::ITextRangeProvider* returnVal;
THROW_IF_FAILED(_uiaProvider->RangeFromPoint({ screenLocation.X, screenLocation.Y }, &returnVal));

// const auto parentProvider = this->ProviderFromPeer(*this);
const auto parentProvider = _parentProvider;
const auto xutr = winrt::make_self<XamlUiaTextRange>(returnVal, parentProvider);
return xutr.as<XamlAutomation::ITextRangeProvider>();
return _CreateXamlUiaTextRange(returnVal);
}

XamlAutomation::ITextRangeProvider InteractivityAutomationPeer::DocumentRange()
{
UIA::ITextRangeProvider* returnVal;
THROW_IF_FAILED(_uiaProvider->get_DocumentRange(&returnVal));

// const auto parentProvider = this->ProviderFromPeer(*this);
const auto parentProvider = _parentProvider;
const auto xutr = winrt::make_self<XamlUiaTextRange>(returnVal, parentProvider);
return xutr.as<XamlAutomation::ITextRangeProvider>();
return _CreateXamlUiaTextRange(returnVal);
}

XamlAutomation::SupportedTextSelection InteractivityAutomationPeer::SupportedTextSelection()
Expand Down Expand Up @@ -198,14 +189,12 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// LOAD-BEARING: use _parentProvider->ProviderFromPeer(_parentProvider) instead of this->ProviderFromPeer(*this).
// Since we split the automation peer into TermControlAutomationPeer and InteractivityAutomationPeer,
// using "this" returns null. This can cause issues with some UIA Client scenarios like any navigation in Narrator.
// TODO! what TF happened in this merge
// const auto parent{ _parentProvider.get() };
// if (!parent)
// {
// return nullptr;
// }
// const auto xutr = winrt::make_self<XamlUiaTextRange>(returnVal, parent.ProviderFromPeer(parent));
const auto xutr = winrt::make_self<XamlUiaTextRange>(returnVal, _parentProvider);
const auto parent{ _parentProvider.get() };
if (!parent)
{
return nullptr;
}
const auto xutr = winrt::make_self<XamlUiaTextRange>(returnVal, parent.ProviderFromPeer(parent));
return xutr.as<XamlAutomation::ITextRangeProvider>();
};

Expand All @@ -223,8 +212,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation

std::vector<XamlAutomation::ITextRangeProvider> vec;
vec.reserve(count);
// auto parentProvider = this->ProviderFromPeer(*this);
// const auto parentProvider = _parentProvider;

for (int i = 0; i < count; i++)
{
if (auto xutr = _CreateXamlUiaTextRange(providers[i].detach()))
Expand Down
4 changes: 2 additions & 2 deletions src/cascadia/TerminalControl/InteractivityAutomationPeer.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation

void SetControlBounds(const Windows::Foundation::Rect bounds);
void SetControlPadding(const Core::Padding padding);
void ParentProvider(Windows::UI::Xaml::Automation::Provider::IRawElementProviderSimple parentProvider);
void ParentProvider(Windows::UI::Xaml::Automation::Peers::AutomationPeer parentProvider);

#pragma region IUiaEventDispatcher
void SignalSelectionChanged() override;
Expand Down Expand Up @@ -81,7 +81,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation

::Microsoft::WRL::ComPtr<::Microsoft::Terminal::TermControlUiaProvider> _uiaProvider;
winrt::Microsoft::Terminal::Control::implementation::ControlInteractivity* _interactivity;
winrt::Windows::UI::Xaml::Automation::Provider::IRawElementProviderSimple _parentProvider{ nullptr };
weak_ref<Windows::UI::Xaml::Automation::Peers::AutomationPeer> _parentProvider{ nullptr };

til::rect _controlBounds{};
til::rect _controlPadding{};
Expand Down
6 changes: 2 additions & 4 deletions src/cascadia/TerminalControl/InteractivityAutomationPeer.idl
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@
// Licensed under the MIT license.
namespace Microsoft.Terminal.Control
{
[default_interface] runtimeclass InteractivityAutomationPeer/* :
Windows.UI.Xaml.Automation.Peers.AutomationPeer,
Windows.UI.Xaml.Automation.Provider.ITextProvider*/
[default_interface] runtimeclass InteractivityAutomationPeer
{

Windows.UI.Xaml.Automation.Provider.ITextRangeProvider[] GetSelection();
Expand All @@ -16,7 +14,7 @@ namespace Microsoft.Terminal.Control

void SetControlBounds(Windows.Foundation.Rect bounds);
void SetControlPadding(Microsoft.Terminal.Core.Padding padding);
void ParentProvider(Windows.UI.Xaml.Automation.Provider.IRawElementProviderSimple provider);
void ParentProvider(Windows.UI.Xaml.Automation.Peers.AutomationPeer parentProvider);

event Windows.Foundation.TypedEventHandler<Object, Object> SelectionChanged;
event Windows.Foundation.TypedEventHandler<Object, Object> TextChanged;
Expand Down
1 change: 0 additions & 1 deletion src/cascadia/TerminalControl/TermControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -631,7 +631,6 @@ namespace winrt::Microsoft::Terminal::Control::implementation
margins.Right,
margins.Bottom };
_automationPeer = winrt::make<implementation::TermControlAutomationPeer>(this, padding, interactivityAutoPeer);
interactivityAutoPeer.ParentProvider(_automationPeer.GetParentProvider());
return _automationPeer;
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/cascadia/TerminalControl/TermControlAutomationPeer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
_contentAutomationPeer.TextChanged([this](auto&&, auto&&) { SignalTextChanged(); });
_contentAutomationPeer.CursorChanged([this](auto&&, auto&&) { SignalCursorChanged(); });
_contentAutomationPeer.NewOutput([this](auto&&, hstring newOutput) { NotifyNewOutput(newOutput); });
_contentAutomationPeer.ParentProvider(GetParentProvider());
_contentAutomationPeer.ParentProvider(*this);
};

// Method Description:
Expand Down

0 comments on commit 91977be

Please sign in to comment.