Allow a TerminalTab to have a UserControl

This commit is contained in:
Mike Griese 2021-09-01 15:27:30 -05:00
parent ed1cf2aeac
commit 1ee3522cd8
4 changed files with 28 additions and 20 deletions

View file

@ -248,8 +248,9 @@ namespace winrt::TerminalApp::implementation
// - profile: profile settings for this connection
// - settings: the TerminalSettings object to use to create the TerminalControl with.
// - existingConnection: optionally receives a connection from the outside world instead of attempting to create one
winrt::fire_and_forget TerminalPage::_CreateNewTabWithProfileAndSettings(Microsoft::Terminal::Settings::Model::Profile profile, Microsoft::Terminal::Settings::Model::TerminalSettingsCreateResult settings, TerminalConnection::ITerminalConnection existingConnection)
void TerminalPage::_CreateNewTabWithProfileAndSettings(Microsoft::Terminal::Settings::Model::Profile profile, Microsoft::Terminal::Settings::Model::TerminalSettingsCreateResult settings, TerminalConnection::ITerminalConnection existingConnection)
{
bool doAdminWarning = false;
if (_isElevated())
{
auto cmdline{ settings.DefaultSettings().Commandline() };
@ -271,19 +272,20 @@ namespace winrt::TerminalApp::implementation
{
allowedCommandlines = winrt::single_threaded_vector<winrt::hstring>();
}
if (!commandlineWasAllowed)
{
ContentDialogResult warningResult = co_await _ShowCommandlineApproveWarning();
if (warningResult != ContentDialogResult::Primary)
{
co_return;
}
else
{
allowedCommandlines.Append(cmdline);
}
ElevatedState::SharedInstance().AllowedCommandlines(allowedCommandlines);
}
doAdminWarning = !commandlineWasAllowed;
// if (!commandlineWasAllowed)
// {
// ContentDialogResult warningResult = co_await _ShowCommandlineApproveWarning();
// if (warningResult != ContentDialogResult::Primary)
// {
// co_return;
// }
// else
// {
// allowedCommandlines.Append(cmdline);
// }
// ElevatedState::SharedInstance().AllowedCommandlines(allowedCommandlines);
// }
}
// Initialize the new tab

View file

@ -191,7 +191,7 @@ namespace winrt::TerminalApp::implementation
void _OpenNewTabDropdown();
HRESULT _OpenNewTab(const Microsoft::Terminal::Settings::Model::NewTerminalArgs& newTerminalArgs, winrt::Microsoft::Terminal::TerminalConnection::ITerminalConnection existingConnection = nullptr);
void _CreateNewTabFromPane(std::shared_ptr<Pane> pane);
winrt::fire_and_forget _CreateNewTabWithProfileAndSettings(Microsoft::Terminal::Settings::Model::Profile profile, Microsoft::Terminal::Settings::Model::TerminalSettingsCreateResult settings, winrt::Microsoft::Terminal::TerminalConnection::ITerminalConnection existingConnection = nullptr);
void _CreateNewTabWithProfileAndSettings(Microsoft::Terminal::Settings::Model::Profile profile, Microsoft::Terminal::Settings::Model::TerminalSettingsCreateResult settings, winrt::Microsoft::Terminal::TerminalConnection::ITerminalConnection existingConnection = nullptr);
winrt::Microsoft::Terminal::TerminalConnection::ITerminalConnection _CreateConnectionFromSettings(Microsoft::Terminal::Settings::Model::Profile profile, Microsoft::Terminal::Settings::Model::TerminalSettings settings);
winrt::fire_and_forget _OpenNewWindow(const bool elevate, const Microsoft::Terminal::Settings::Model::NewTerminalArgs newTerminalArgs);

View file

@ -25,7 +25,7 @@ namespace winrt
namespace winrt::TerminalApp::implementation
{
TerminalTab::TerminalTab(const Profile& profile, const TermControl& control)
TerminalTab::TerminalTab(const Profile& profile, const WUX::Controls::UserControl& control)
{
_rootPane = std::make_shared<Pane>(profile, control, true);
@ -449,7 +449,7 @@ namespace winrt::TerminalApp::implementation
void TerminalTab::SplitPane(SplitState splitType,
const float splitSize,
const Profile& profile,
TermControl& control)
const WUX::Controls::UserControl& control)
{
// Make sure to take the ID before calling Split() - Split() will clear out the active pane's ID
const auto activePaneId = _activePane->Id();
@ -471,7 +471,8 @@ namespace winrt::TerminalApp::implementation
// Add a event handlers to the new panes' GotFocus event. When the pane
// gains focus, we'll mark it as the new active pane.
_AttachEventHandlersToControl(second->Id().value(), control);
const auto& termControl{ control.try_as<TermControl>() };
_AttachEventHandlersToControl(second->Id().value(), termControl);
_AttachEventHandlersToPane(first);
_AttachEventHandlersToPane(second);
@ -804,6 +805,10 @@ namespace winrt::TerminalApp::implementation
// - <none>
void TerminalTab::_AttachEventHandlersToControl(const uint32_t paneId, const TermControl& control)
{
if (!control)
{
return;
}
auto weakThis{ get_weak() };
auto dispatcher = TabViewItem().Dispatcher();
ControlEventTokens events{};

View file

@ -21,7 +21,8 @@ namespace winrt::TerminalApp::implementation
struct TerminalTab : TerminalTabT<TerminalTab, TabBase>
{
public:
TerminalTab(const winrt::Microsoft::Terminal::Settings::Model::Profile& profile, const winrt::Microsoft::Terminal::Control::TermControl& control);
TerminalTab(const winrt::Microsoft::Terminal::Settings::Model::Profile& profile,
const winrt::Windows::UI::Xaml::Controls::UserControl& control);
TerminalTab(std::shared_ptr<Pane> rootPane);
// Called after construction to perform the necessary setup, which relies on weak_ptr
@ -41,7 +42,7 @@ namespace winrt::TerminalApp::implementation
void SplitPane(winrt::Microsoft::Terminal::Settings::Model::SplitState splitType,
const float splitSize,
const winrt::Microsoft::Terminal::Settings::Model::Profile& profile,
winrt::Microsoft::Terminal::Control::TermControl& control);
const winrt::Windows::UI::Xaml::Controls::UserControl& control);
void ToggleSplitOrientation();
winrt::fire_and_forget UpdateIcon(const winrt::hstring iconPath);