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..0a43e0d9451 100644 --- a/src/cascadia/TerminalApp/TabManagement.cpp +++ b/src/cascadia/TerminalApp/TabManagement.cpp @@ -304,11 +304,8 @@ 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; - } + // 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); const auto runtimeTabText{ tab.GetTabText() };