From 0aba2ecfc2e8d6895a3925d0bc11b9f208de3029 Mon Sep 17 00:00:00 2001 From: Omar Mashal Date: Thu, 20 Aug 2026 21:06:49 +0300 Subject: [PATCH 1/2] Always open duplicated tabs next to source tab --- .../LocalTests_TerminalApp/TabTests.cpp | 27 +++++++++++++++++++ src/cascadia/TerminalApp/TabManagement.cpp | 6 +---- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/cascadia/LocalTests_TerminalApp/TabTests.cpp b/src/cascadia/LocalTests_TerminalApp/TabTests.cpp index 3bf302108b2..549b6b945a0 100644 --- a/src/cascadia/LocalTests_TerminalApp/TabTests.cpp +++ b/src/cascadia/LocalTests_TerminalApp/TabTests.cpp @@ -77,6 +77,7 @@ namespace TerminalAppLocalTests TEST_METHOD(CreateTerminalPage); TEST_METHOD(TryDuplicateBadTab); + TEST_METHOD(DuplicateTabAlwaysOpensAfterCurrent); TEST_METHOD(TryDuplicateBadPane); TEST_METHOD(TryZoomPane); @@ -442,6 +443,32 @@ namespace TerminalAppLocalTests VERIFY_SUCCEEDED(result); } + void TabTests::DuplicateTabAlwaysOpensAfterCurrent() + { + auto page = _commonSetup(); + VERIFY_IS_NOT_NULL(page); + + Log::Comment(L"Create three tabs with new tabs opening at the end"); + TestOnUIThread([&page]() { + page->_settings.WindowSettingsDefaults().NewTabPosition(NewTabPosition::AfterLastTab); + + NewTerminalArgs newTerminalArgs{ 1 }; + page->_OpenNewTab(newTerminalArgs); + page->_OpenNewTab(newTerminalArgs); + + VERIFY_ARE_EQUAL(3u, page->_tabs.Size()); + }); + + Log::Comment(L"Duplicate the middle tab"); + TestOnUIThread([&page]() { + page->_SelectTab(1); + page->_DuplicateFocusedTab(); + + VERIFY_ARE_EQUAL(4u, page->_tabs.Size()); + VERIFY_ARE_EQUAL(2u, page->_GetFocusedTabIndex().value(), L"Duplicated tabs should open next to their source tab."); + }); + } + void TabTests::TryDuplicateBadPane() { // * Create a tab with a profile with GUID 1 diff --git a/src/cascadia/TerminalApp/TabManagement.cpp b/src/cascadia/TerminalApp/TabManagement.cpp index 2a4d4f40b18..688a2ffd81d 100644 --- a/src/cascadia/TerminalApp/TabManagement.cpp +++ b/src/cascadia/TerminalApp/TabManagement.cpp @@ -304,11 +304,7 @@ namespace winrt::TerminalApp::implementation // In the future, it may be preferable to just duplicate the // current control's live settings (which will include changes // made through VT). - uint32_t insertPosition = _tabs.Size(); - if (_currentWindowSettings().NewTabPosition() == NewTabPosition::AfterCurrentTab) - { - insertPosition = tab.TabViewIndex() + 1; - } + const auto insertPosition = tab.TabViewIndex() + 1; _CreateNewTabFromPane(_MakePane(nullptr, tab, nullptr), insertPosition); const auto runtimeTabText{ tab.GetTabText() }; From 015cc4b9686501d661b3ba2852852936d9e7d3e4 Mon Sep 17 00:00:00 2001 From: Omar Mashal Date: Mon, 24 Aug 2026 20:07:54 +0300 Subject: [PATCH 2/2] Clarify duplicate tab placement behavior --- src/cascadia/TerminalApp/TabManagement.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cascadia/TerminalApp/TabManagement.cpp b/src/cascadia/TerminalApp/TabManagement.cpp index 688a2ffd81d..0a43e0d9451 100644 --- a/src/cascadia/TerminalApp/TabManagement.cpp +++ b/src/cascadia/TerminalApp/TabManagement.cpp @@ -304,6 +304,7 @@ namespace winrt::TerminalApp::implementation // In the future, it may be preferable to just duplicate the // current control's live settings (which will include changes // made through VT). + // Duplicate tabs intentionally ignore NewTabPosition() and always open next to the source tab. const auto insertPosition = tab.TabViewIndex() + 1; _CreateNewTabFromPane(_MakePane(nullptr, tab, nullptr), insertPosition);