diff --git a/src/cascadia/TerminalApp/AdminWarningPlaceholder.cpp b/src/cascadia/TerminalApp/AdminWarningPlaceholder.cpp index 396c72473..28aacb42e 100644 --- a/src/cascadia/TerminalApp/AdminWarningPlaceholder.cpp +++ b/src/cascadia/TerminalApp/AdminWarningPlaceholder.cpp @@ -6,7 +6,11 @@ #include "pch.h" #include "AdminWarningPlaceholder.h" #include "AdminWarningPlaceholder.g.cpp" +#include +#include + using namespace winrt::Windows::UI::Xaml; +using namespace winrt::Windows::UI::Xaml::Automation::Peers; namespace winrt::TerminalApp::implementation { @@ -22,19 +26,63 @@ namespace winrt::TerminalApp::implementation { RootGrid().Background(termControl.BackgroundBrush()); } + + _layoutUpdatedRevoker = RootGrid().LayoutUpdated(winrt::auto_revoke, [this](auto /*s*/, auto /*e*/) { + // Only let this succeed once. + _layoutUpdatedRevoker.revoke(); + + if (auto automationPeer{ FrameworkElementAutomationPeer::FromElement(ApproveCommandlineWarningTitle()) }) + { + // automationPeer.try_as().RaiseStructureChangedEvent(Automation::Peers::AutomationStructureChangeType::ChildrenBulkAdded, ApproveCommandlineWarningPrefixTextBlock()); + + automationPeer.RaiseNotificationEvent( + AutomationNotificationKind::ActionCompleted, + AutomationNotificationProcessing::CurrentThenMostRecent, + L"Foo", + L"ApproveCommandlineWarningTitle" /* unique name for this notification category */ + ); + } + CancelButton().Focus(FocusState::Programmatic); + }); } void AdminWarningPlaceholder::_primaryButtonClick(winrt::Windows::Foundation::IInspectable const& /*sender*/, RoutedEventArgs const& e) { + if (auto automationPeer{ FrameworkElementAutomationPeer::FromElement(PrimaryButton()) }) + { + automationPeer.RaiseNotificationEvent( + AutomationNotificationKind::ActionCompleted, + AutomationNotificationProcessing::CurrentThenMostRecent, + L"PrimaryButton", + L"_primaryButtonClick" /* unique name for this notification category */ + ); + } + _PrimaryButtonClickedHandlers(*this, e); } void AdminWarningPlaceholder::_cancelButtonClick(winrt::Windows::Foundation::IInspectable const& /*sender*/, RoutedEventArgs const& e) { + if (auto automationPeer{ FrameworkElementAutomationPeer::FromElement(CancelButton()) }) + { + automationPeer.RaiseNotificationEvent( + AutomationNotificationKind::ActionCompleted, + AutomationNotificationProcessing::CurrentThenMostRecent, + L"CancelButton", + L"_cancelButtonClick" /* unique name for this notification category */ + ); + } + _CancelButtonClickedHandlers(*this, e); } winrt::Windows::UI::Xaml::Controls::UserControl AdminWarningPlaceholder::Control() { return _control; } + + winrt::hstring AdminWarningPlaceholder::ControlName() const + { + return RS_(L"AdminWarningPlaceholderControlName"); + } + } diff --git a/src/cascadia/TerminalApp/AdminWarningPlaceholder.h b/src/cascadia/TerminalApp/AdminWarningPlaceholder.h index 70e2535c5..568433dd5 100644 --- a/src/cascadia/TerminalApp/AdminWarningPlaceholder.h +++ b/src/cascadia/TerminalApp/AdminWarningPlaceholder.h @@ -11,7 +11,7 @@ namespace winrt::TerminalApp::implementation struct AdminWarningPlaceholder : AdminWarningPlaceholderT { AdminWarningPlaceholder(const winrt::Microsoft::Terminal::Control::TermControl& control, const winrt::hstring& cmdline); - + winrt::hstring ControlName() const; winrt::Windows::UI::Xaml::Controls::UserControl Control(); WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); WINRT_OBSERVABLE_PROPERTY(winrt::hstring, Commandline, _PropertyChangedHandlers); @@ -27,5 +27,7 @@ namespace winrt::TerminalApp::implementation winrt::Windows::UI::Xaml::RoutedEventArgs const& e); void _cancelButtonClick(winrt::Windows::Foundation::IInspectable const& sender, winrt::Windows::UI::Xaml::RoutedEventArgs const& e); + + winrt::Windows::UI::Xaml::Controls::Grid::LayoutUpdated_revoker _layoutUpdatedRevoker; }; } diff --git a/src/cascadia/TerminalApp/AdminWarningPlaceholder.idl b/src/cascadia/TerminalApp/AdminWarningPlaceholder.idl index cfe9586fe..5cb315473 100644 --- a/src/cascadia/TerminalApp/AdminWarningPlaceholder.idl +++ b/src/cascadia/TerminalApp/AdminWarningPlaceholder.idl @@ -7,5 +7,6 @@ namespace TerminalApp Windows.UI.Xaml.Data.INotifyPropertyChanged { String Commandline { get; }; + String ControlName { get; }; } } diff --git a/src/cascadia/TerminalApp/AdminWarningPlaceholder.xaml b/src/cascadia/TerminalApp/AdminWarningPlaceholder.xaml index 6fa544c50..3be1d970a 100644 --- a/src/cascadia/TerminalApp/AdminWarningPlaceholder.xaml +++ b/src/cascadia/TerminalApp/AdminWarningPlaceholder.xaml @@ -9,6 +9,8 @@ xmlns:local="using:TerminalApp" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mux="using:Microsoft.UI.Xaml.Controls" + AutomationProperties.Name="{x:Bind ControlName, Mode=OneWay}" + IsTabStop="True" mc:Ignorable="d">