From 311c11c0f80f395c485755e056443fdeae7466ac Mon Sep 17 00:00:00 2001 From: JamesTiah <91830137+WhatsACloud@users.noreply.github.com> Date: Sat, 1 Feb 2025 16:04:29 +0800 Subject: [PATCH 1/2] Update TerminalPage.cpp --- src/cascadia/TerminalApp/TerminalPage.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index e73ba93193b..262895935cb 100644 --- a/src/cascadia/TerminalApp/TerminalPage.cpp +++ b/src/cascadia/TerminalApp/TerminalPage.cpp @@ -3473,8 +3473,10 @@ namespace winrt::TerminalApp::implementation // for nulls if (const auto& connection{ _duplicateConnectionForRestart(paneContent) }) { + auto previousConnection = paneContent.GetTermControl().Connection(); paneContent.GetTermControl().Connection(connection); connection.Start(); + previousConnection.Close(); } } From f89f0d2d96daca87662353596633669f69acb6e0 Mon Sep 17 00:00:00 2001 From: JamesTiah <91830137+WhatsACloud@users.noreply.github.com> Date: Mon, 3 Feb 2025 20:00:34 +0800 Subject: [PATCH 2/2] added wrapper function _replaceConnectionForRestart --- src/cascadia/TerminalApp/TerminalPage.cpp | 18 +++++++++++------- src/cascadia/TerminalApp/TerminalPage.h | 1 + 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index 262895935cb..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,13 +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) }) - { - auto previousConnection = paneContent.GetTermControl().Connection(); - paneContent.GetTermControl().Connection(connection); - connection.Start(); - previousConnection.Close(); - } + _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&);