From 2f8c51e23deff189dc83f701b59d54ece27b7a69 Mon Sep 17 00:00:00 2001 From: Leonard Hecker Date: Wed, 17 Dec 2025 17:53:41 +0100 Subject: [PATCH] Standardize on Tab::Close for closing tabs (#19656) This makes it possible to subscribe to `Close` events. --- src/cascadia/TerminalApp/Tab.cpp | 7 +++++++ src/cascadia/TerminalApp/Tab.h | 1 + src/cascadia/TerminalApp/Tab.idl | 1 + src/cascadia/TerminalApp/TabManagement.cpp | 8 +++----- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/cascadia/TerminalApp/Tab.cpp b/src/cascadia/TerminalApp/Tab.cpp index 6fc6a9f9f8..dcbe2a28b2 100644 --- a/src/cascadia/TerminalApp/Tab.cpp +++ b/src/cascadia/TerminalApp/Tab.cpp @@ -933,6 +933,13 @@ namespace winrt::TerminalApp::implementation return res; } + void Tab::Close() + { + ASSERT_UI_THREAD(); + + Closed.raise(nullptr, nullptr); + } + // Method Description: // - Prepares this tab for being removed from the UI hierarchy by shutting down all active connections. void Tab::Shutdown() diff --git a/src/cascadia/TerminalApp/Tab.h b/src/cascadia/TerminalApp/Tab.h index be6180586e..65d4e574ed 100644 --- a/src/cascadia/TerminalApp/Tab.h +++ b/src/cascadia/TerminalApp/Tab.h @@ -61,6 +61,7 @@ namespace winrt::TerminalApp::implementation void UpdateSettings(const winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings& settings); void UpdateTitle(); + void Close(); void Shutdown(); void ClosePane(); diff --git a/src/cascadia/TerminalApp/Tab.idl b/src/cascadia/TerminalApp/Tab.idl index e585babafc..63f5095178 100644 --- a/src/cascadia/TerminalApp/Tab.idl +++ b/src/cascadia/TerminalApp/Tab.idl @@ -22,6 +22,7 @@ namespace TerminalApp UInt32 TabViewNumTabs; void Focus(Windows.UI.Xaml.FocusState focusState); + void Close(); void Shutdown(); void SetDispatch(ShortcutActionDispatch dispatch); diff --git a/src/cascadia/TerminalApp/TabManagement.cpp b/src/cascadia/TerminalApp/TabManagement.cpp index c0c5eb6abe..8869468aae 100644 --- a/src/cascadia/TerminalApp/TabManagement.cpp +++ b/src/cascadia/TerminalApp/TabManagement.cpp @@ -411,13 +411,11 @@ namespace winrt::TerminalApp::implementation auto actions = t->BuildStartupActions(BuildStartupKind::None); _AddPreviouslyClosedPaneOrTab(std::move(actions)); - _RemoveTab(tab); + tab.Close(); } - // Method Description: - // - Removes the tab (both TerminalControl and XAML) - // Arguments: - // - tab: the tab to remove + // Removes the tab (both TerminalControl and XAML). + // NOTE: Don't call this directly, but rather `tab.Close()`. void TerminalPage::_RemoveTab(const winrt::TerminalApp::Tab& tab) { uint32_t tabIndex{};