diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index e73ba93193b..007619f19b9 100644 --- a/src/cascadia/TerminalApp/TerminalPage.cpp +++ b/src/cascadia/TerminalApp/TerminalPage.cpp @@ -1362,6 +1362,7 @@ namespace winrt::TerminalApp::implementation return connection; } + // use _replaceConnectionForRestart instead of using this function directly. _replaceConnectionForRestart will close the old connection. TerminalConnection::ITerminalConnection TerminalPage::_duplicateConnectionForRestart(const TerminalApp::TerminalPaneContent& paneContent) { if (paneContent == nullptr) @@ -1405,6 +1406,15 @@ namespace winrt::TerminalApp::implementation return _CreateConnectionFromSettings(profile, controlSettings.DefaultSettings(), true); } + void TerminalPage::_replaceConnectionForRestart(const TerminalApp::TerminalPaneContent& paneContent) { + if (const auto& connection{ _duplicateConnectionForRestart(paneContent) }) { + auto previousConnection = paneContent.GetTermControl().Connection(); + paneContent.GetTermControl().Connection(connection); + connection.Start(); + previousConnection.Close(); + } + } + // Method Description: // - Called when the settings button is clicked. Launches a background // thread to open the settings file in the default JSON editor. @@ -3471,11 +3481,7 @@ namespace winrt::TerminalApp::implementation // the TermControl.RestartTerminalRequested event doesn't actually pass // any args upwards itself. If we ever change this, make sure you check // for nulls - if (const auto& connection{ _duplicateConnectionForRestart(paneContent) }) - { - paneContent.GetTermControl().Connection(connection); - connection.Start(); - } + _replaceConnectionForRestart(paneContent); } // Method Description: diff --git a/src/cascadia/TerminalApp/TerminalPage.h b/src/cascadia/TerminalApp/TerminalPage.h index 87e7b17437b..13ac949893b 100644 --- a/src/cascadia/TerminalApp/TerminalPage.h +++ b/src/cascadia/TerminalApp/TerminalPage.h @@ -310,6 +310,7 @@ namespace winrt::TerminalApp::implementation std::wstring _evaluatePathForCwd(std::wstring_view path); winrt::Microsoft::Terminal::TerminalConnection::ITerminalConnection _CreateConnectionFromSettings(Microsoft::Terminal::Settings::Model::Profile profile, Microsoft::Terminal::Settings::Model::TerminalSettings settings, const bool inheritCursor); + void _replaceConnectionForRestart(const TerminalApp::TerminalPaneContent& paneContent); winrt::Microsoft::Terminal::TerminalConnection::ITerminalConnection _duplicateConnectionForRestart(const TerminalApp::TerminalPaneContent& paneContent); void _restartPaneConnection(const TerminalApp::TerminalPaneContent&, const winrt::Windows::Foundation::IInspectable&);