@@ -251,7 +251,8 @@ namespace winrt::TerminalApp::implementation
251251 // - existingConnection: optionally receives a connection from the outside world instead of attempting to create one
252252 void TerminalPage::_CreateNewTabWithProfileAndSettings (Microsoft::Terminal::Settings::Model::Profile profile, Microsoft::Terminal::Settings::Model::TerminalSettingsCreateResult settings, TerminalConnection::ITerminalConnection existingConnection)
253253 {
254- bool doAdminWarning = true ;;
254+ bool doAdminWarning = true ;
255+ ;
255256 const auto & cmdline{ settings.DefaultSettings ().Commandline () };
256257 if (_isElevated ())
257258 {
@@ -322,25 +323,8 @@ namespace winrt::TerminalApp::implementation
322323 if (doAdminWarning)
323324 {
324325 auto warningControl{ winrt::make_self<implementation::AdminWarningPlaceholder>(term, cmdline) };
325- warningControl->PrimaryButtonClicked ([weakThis = get_weak (), warningControl](auto &&, auto &&) {
326- if (auto page{ weakThis.get () })
327- {
328- for (const auto & tab : page->_tabs )
329- {
330- if (const auto & tabImpl{ _GetTerminalTabImpl (tab) })
331- {
332- tabImpl->GetRootPane ()->WalkTree ([warningControl](std::shared_ptr<Pane> pane) -> bool {
333- if (pane->GetUserControl () == *warningControl)
334- {
335- pane->ReplaceControl (warningControl->Control ());
336- return true ;
337- }
338- return false ;
339- });
340- }
341- }
342- }
343- });
326+ warningControl->PrimaryButtonClicked ({ get_weak (), &TerminalPage::_adminWarningPrimaryClicked });
327+ warningControl->CancelButtonClicked ({ get_weak (), &TerminalPage::_adminWarningCancelClicked });
344328 controlToAdd = *warningControl;
345329 }
346330
@@ -357,6 +341,56 @@ namespace winrt::TerminalApp::implementation
357341 }
358342 }
359343
344+ void TerminalPage::_adminWarningPrimaryClicked (const TerminalApp::AdminWarningPlaceholder& sender,
345+ const winrt::Windows::UI::Xaml::RoutedEventArgs& /* args*/ )
346+ {
347+ auto warningControl{ winrt::get_self<AdminWarningPlaceholder>(sender) };
348+
349+ for (const auto & tab : _tabs)
350+ {
351+ if (const auto & tabImpl{ _GetTerminalTabImpl (tab) })
352+ {
353+ tabImpl->GetRootPane ()->WalkTree ([warningControl](std::shared_ptr<Pane> pane) -> bool {
354+ if (pane->GetUserControl () == *warningControl)
355+ {
356+ pane->ReplaceControl (warningControl->Control ());
357+ return true ;
358+ }
359+ return false ;
360+ });
361+ }
362+ }
363+
364+ auto allowedCommandlines{ ElevatedState::SharedInstance ().AllowedCommandlines () };
365+ if (!allowedCommandlines)
366+ {
367+ allowedCommandlines = winrt::single_threaded_vector<winrt::hstring>();
368+ }
369+ allowedCommandlines.Append (warningControl->Commandline ());
370+ ElevatedState::SharedInstance ().AllowedCommandlines (allowedCommandlines);
371+ }
372+
373+ void TerminalPage::_adminWarningCancelClicked (const TerminalApp::AdminWarningPlaceholder& sender,
374+ const winrt::Windows::UI::Xaml::RoutedEventArgs& /* args*/ )
375+ {
376+ auto warningControl{ winrt::get_self<AdminWarningPlaceholder>(sender) };
377+
378+ for (const auto & tab : _tabs)
379+ {
380+ if (const auto & tabImpl{ _GetTerminalTabImpl (tab) })
381+ {
382+ tabImpl->GetRootPane ()->WalkTree ([warningControl](std::shared_ptr<Pane> pane) -> bool {
383+ if (pane->GetUserControl () == *warningControl)
384+ {
385+ pane->Close ();
386+ return true ;
387+ }
388+ return false ;
389+ });
390+ }
391+ }
392+ }
393+
360394 // Method Description:
361395 // - Get the icon of the currently focused terminal control, and set its
362396 // tab's icon to that icon.
0 commit comments