From 558a3960c497f6448d04474137120efa746399ab Mon Sep 17 00:00:00 2001 From: techypanda Date: Thu, 29 May 2025 13:32:59 +1000 Subject: [PATCH] Split Panes inherit tab color and title of active pane Previously to this PR if you split a pane as suggested in #18930, the split pane will lose its custom title and will not have its custom color, with this PR it will keep as indicated --- src/cascadia/TerminalApp/AppActionHandlers.cpp | 18 ++++++++++++++---- src/cascadia/TerminalApp/TabManagement.cpp | 1 + src/cascadia/TerminalApp/TerminalPage.cpp | 13 +++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/cascadia/TerminalApp/AppActionHandlers.cpp b/src/cascadia/TerminalApp/AppActionHandlers.cpp index 69648929637..9e07d4d3c2a 100644 --- a/src/cascadia/TerminalApp/AppActionHandlers.cpp +++ b/src/cascadia/TerminalApp/AppActionHandlers.cpp @@ -279,15 +279,25 @@ namespace winrt::TerminalApp::implementation return; } - const auto& duplicateFromTab{ realArgs.SplitMode() == SplitType::Duplicate ? _GetFocusedTab() : nullptr }; - const auto& terminalTab{ _senderOrFocusedTab(sender) }; - - _SplitPane(terminalTab, + const auto& duplicateFromTab { realArgs.SplitMode() == SplitType::Duplicate ? _GetFocusedTab() : nullptr }; + // The tab is not focused yet if we just created the tab, hacky workaround want to get feedback on if ive missed a edge cas ebefore cleaning up + if (!duplicateFromTab && terminalTab.get()) + { + _SplitPane(terminalTab, + realArgs.SplitDirection(), + // This is safe, we're already filtering so the value is (0, 1) + realArgs.SplitSize(), + _MakePane(realArgs.ContentArgs(), *terminalTab.get())); + } + else + { + _SplitPane(terminalTab, realArgs.SplitDirection(), // This is safe, we're already filtering so the value is (0, 1) realArgs.SplitSize(), _MakePane(realArgs.ContentArgs(), duplicateFromTab)); + } args.Handled(true); } } diff --git a/src/cascadia/TerminalApp/TabManagement.cpp b/src/cascadia/TerminalApp/TabManagement.cpp index 3b2691df936..3565c5671b6 100644 --- a/src/cascadia/TerminalApp/TabManagement.cpp +++ b/src/cascadia/TerminalApp/TabManagement.cpp @@ -89,6 +89,7 @@ namespace winrt::TerminalApp::implementation // This call to _MakePane won't return nullptr, we already checked that // case above with the _maybeElevate call. + // _MakePane _CreateNewTabFromPane(_MakePane(newContentArgs, nullptr)); return S_OK; } diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index 702b4a36ee3..5fb5b96770c 100644 --- a/src/cascadia/TerminalApp/TerminalPage.cpp +++ b/src/cascadia/TerminalApp/TerminalPage.cpp @@ -3285,6 +3285,19 @@ namespace winrt::TerminalApp::implementation { controlSettings.DefaultSettings().StartingDirectory(workingDirectory); } + // Copy Title and Color of tab you split + controlSettings.DefaultSettings().StartingTitle(terminalTab->Title()); + const auto color = terminalTab->GetTabColor(); + if (color.has_value()) + { + const auto& rawColor = color.value(); + controlSettings.DefaultSettings().StartingTabColor( + winrt::Microsoft::Terminal::Core::Color{ + rawColor.R, + rawColor.G, + rawColor.B, + rawColor.A }); + } } } if (!profile)