This works amazingly well
This commit is contained in:
parent
631cdf7b18
commit
736a351c27
|
@ -30,5 +30,6 @@ namespace winrt::TerminalApp::implementation
|
|||
{
|
||||
return _control;
|
||||
}
|
||||
winrt::hstring AdminWarningPlaceholder::Commandline() { return _cmdline; }
|
||||
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ namespace winrt::TerminalApp::implementation
|
|||
AdminWarningPlaceholder(const winrt::Microsoft::Terminal::Control::TermControl& control, const winrt::hstring& cmdline);
|
||||
|
||||
winrt::Windows::UI::Xaml::Controls::UserControl Control();
|
||||
winrt::hstring Commandline();
|
||||
|
||||
TYPED_EVENT(PrimaryButtonClicked, TerminalApp::AdminWarningPlaceholder, winrt::Windows::UI::Xaml::RoutedEventArgs);
|
||||
TYPED_EVENT(CancelButtonClicked, TerminalApp::AdminWarningPlaceholder, winrt::Windows::UI::Xaml::RoutedEventArgs);
|
||||
|
|
|
@ -251,7 +251,8 @@ namespace winrt::TerminalApp::implementation
|
|||
// - existingConnection: optionally receives a connection from the outside world instead of attempting to create one
|
||||
void TerminalPage::_CreateNewTabWithProfileAndSettings(Microsoft::Terminal::Settings::Model::Profile profile, Microsoft::Terminal::Settings::Model::TerminalSettingsCreateResult settings, TerminalConnection::ITerminalConnection existingConnection)
|
||||
{
|
||||
bool doAdminWarning = true;;
|
||||
bool doAdminWarning = true;
|
||||
;
|
||||
const auto& cmdline{ settings.DefaultSettings().Commandline() };
|
||||
if (_isElevated())
|
||||
{
|
||||
|
@ -322,25 +323,8 @@ namespace winrt::TerminalApp::implementation
|
|||
if (doAdminWarning)
|
||||
{
|
||||
auto warningControl{ winrt::make_self<implementation::AdminWarningPlaceholder>(term, cmdline) };
|
||||
warningControl->PrimaryButtonClicked([weakThis = get_weak(), warningControl](auto&&, auto&&) {
|
||||
if (auto page{ weakThis.get() })
|
||||
{
|
||||
for (const auto& tab : page->_tabs)
|
||||
{
|
||||
if (const auto& tabImpl{ _GetTerminalTabImpl(tab) })
|
||||
{
|
||||
tabImpl->GetRootPane()->WalkTree([warningControl](std::shared_ptr<Pane> pane) -> bool {
|
||||
if (pane->GetUserControl() == *warningControl)
|
||||
{
|
||||
pane->ReplaceControl(warningControl->Control());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
warningControl->PrimaryButtonClicked({ get_weak(), &TerminalPage::_adminWarningPrimaryClicked });
|
||||
warningControl->CancelButtonClicked({ get_weak(), &TerminalPage::_adminWarningCancelClicked });
|
||||
controlToAdd = *warningControl;
|
||||
}
|
||||
|
||||
|
@ -357,6 +341,56 @@ namespace winrt::TerminalApp::implementation
|
|||
}
|
||||
}
|
||||
|
||||
void TerminalPage::_adminWarningPrimaryClicked(const TerminalApp::AdminWarningPlaceholder& sender,
|
||||
const winrt::Windows::UI::Xaml::RoutedEventArgs& /*args*/)
|
||||
{
|
||||
auto warningControl{ winrt::get_self<AdminWarningPlaceholder>(sender) };
|
||||
|
||||
for (const auto& tab : _tabs)
|
||||
{
|
||||
if (const auto& tabImpl{ _GetTerminalTabImpl(tab) })
|
||||
{
|
||||
tabImpl->GetRootPane()->WalkTree([warningControl](std::shared_ptr<Pane> pane) -> bool {
|
||||
if (pane->GetUserControl() == *warningControl)
|
||||
{
|
||||
pane->ReplaceControl(warningControl->Control());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
auto allowedCommandlines{ ElevatedState::SharedInstance().AllowedCommandlines() };
|
||||
if (!allowedCommandlines)
|
||||
{
|
||||
allowedCommandlines = winrt::single_threaded_vector<winrt::hstring>();
|
||||
}
|
||||
allowedCommandlines.Append(warningControl->Commandline());
|
||||
ElevatedState::SharedInstance().AllowedCommandlines(allowedCommandlines);
|
||||
}
|
||||
|
||||
void TerminalPage::_adminWarningCancelClicked(const TerminalApp::AdminWarningPlaceholder& sender,
|
||||
const winrt::Windows::UI::Xaml::RoutedEventArgs& /*args*/)
|
||||
{
|
||||
auto warningControl{ winrt::get_self<AdminWarningPlaceholder>(sender) };
|
||||
|
||||
for (const auto& tab : _tabs)
|
||||
{
|
||||
if (const auto& tabImpl{ _GetTerminalTabImpl(tab) })
|
||||
{
|
||||
tabImpl->GetRootPane()->WalkTree([warningControl](std::shared_ptr<Pane> pane) -> bool {
|
||||
if (pane->GetUserControl() == *warningControl)
|
||||
{
|
||||
pane->Close();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Get the icon of the currently focused terminal control, and set its
|
||||
// tab's icon to that icon.
|
||||
|
|
|
@ -363,6 +363,10 @@ namespace winrt::TerminalApp::implementation
|
|||
|
||||
winrt::Microsoft::Terminal::Settings::Model::Profile GetClosestProfileForDuplicationOfProfile(const winrt::Microsoft::Terminal::Settings::Model::Profile& profile) const noexcept;
|
||||
|
||||
void _adminWarningPrimaryClicked(const winrt::TerminalApp::AdminWarningPlaceholder& sender,
|
||||
const winrt::Windows::UI::Xaml::RoutedEventArgs& args);
|
||||
void _adminWarningCancelClicked(const winrt::TerminalApp::AdminWarningPlaceholder& sender,
|
||||
const winrt::Windows::UI::Xaml::RoutedEventArgs& args);
|
||||
#pragma region ActionHandlers
|
||||
// These are all defined in AppActionHandlers.cpp
|
||||
#define ON_ALL_ACTIONS(action) DECLARE_ACTION_HANDLER(action);
|
||||
|
|
Loading…
Reference in a new issue