From 46fd7caf5a532e158cdf6b947e57d0c9967c11da Mon Sep 17 00:00:00 2001 From: Don-Vito Date: Thu, 19 Aug 2021 20:18:14 +0300 Subject: [PATCH] Fix focus-tab --previous/next to ignore tab switcher order (#10947) When creating `startupAction` use `TabSwitcherMode::Disabled` in action args to disable the tab switcher and prevent MRU logic to be applied. Closes #10070 --- src/cascadia/TerminalApp/AppCommandlineArgs.cpp | 5 +++++ src/cascadia/TerminalSettingsModel/ActionArgs.h | 6 ++++++ src/cascadia/TerminalSettingsModel/ActionArgs.idl | 4 ++++ 3 files changed, 15 insertions(+) diff --git a/src/cascadia/TerminalApp/AppCommandlineArgs.cpp b/src/cascadia/TerminalApp/AppCommandlineArgs.cpp index d9ac41dc2..a2da96205 100644 --- a/src/cascadia/TerminalApp/AppCommandlineArgs.cpp +++ b/src/cascadia/TerminalApp/AppCommandlineArgs.cpp @@ -380,6 +380,11 @@ void AppCommandlineArgs::_buildFocusTabParser() else if (_focusNextTab || _focusPrevTab) { focusTabAction.Action(_focusNextTab ? ShortcutAction::NextTab : ShortcutAction::PrevTab); + // GH#10070 - make sure to not use the MRU order when switching + // tabs on the commandline. That wouldn't make any sense! + focusTabAction.Args(_focusNextTab ? + static_cast(NextTabArgs(TabSwitcherMode::Disabled)) : + static_cast(PrevTabArgs(TabSwitcherMode::Disabled))); _startupActions.push_back(std::move(focusTabAction)); } }); diff --git a/src/cascadia/TerminalSettingsModel/ActionArgs.h b/src/cascadia/TerminalSettingsModel/ActionArgs.h index 1d67ef809..ebf35a1aa 100644 --- a/src/cascadia/TerminalSettingsModel/ActionArgs.h +++ b/src/cascadia/TerminalSettingsModel/ActionArgs.h @@ -1475,6 +1475,8 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation struct PrevTabArgs : public PrevTabArgsT { PrevTabArgs() = default; + PrevTabArgs(TabSwitcherMode switcherMode) : + _SwitcherMode(switcherMode) {} ACTION_ARG(Windows::Foundation::IReference, SwitcherMode, nullptr); static constexpr std::string_view SwitcherModeKey{ "tabSwitcherMode" }; @@ -1523,6 +1525,8 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation struct NextTabArgs : public NextTabArgsT { NextTabArgs() = default; + NextTabArgs(TabSwitcherMode switcherMode) : + _SwitcherMode(switcherMode) {} ACTION_ARG(Windows::Foundation::IReference, SwitcherMode, nullptr); static constexpr std::string_view SwitcherModeKey{ "tabSwitcherMode" }; @@ -1772,4 +1776,6 @@ namespace winrt::Microsoft::Terminal::Settings::Model::factory_implementation BASIC_FACTORY(FindMatchArgs); BASIC_FACTORY(NewWindowArgs); BASIC_FACTORY(FocusPaneArgs); + BASIC_FACTORY(PrevTabArgs); + BASIC_FACTORY(NextTabArgs); } diff --git a/src/cascadia/TerminalSettingsModel/ActionArgs.idl b/src/cascadia/TerminalSettingsModel/ActionArgs.idl index ce08759f3..2369a8135 100644 --- a/src/cascadia/TerminalSettingsModel/ActionArgs.idl +++ b/src/cascadia/TerminalSettingsModel/ActionArgs.idl @@ -276,11 +276,15 @@ namespace Microsoft.Terminal.Settings.Model [default_interface] runtimeclass PrevTabArgs : IActionArgs { + PrevTabArgs(); + PrevTabArgs(TabSwitcherMode SwitcherMode); Windows.Foundation.IReference SwitcherMode; }; [default_interface] runtimeclass NextTabArgs : IActionArgs { + NextTabArgs(); + NextTabArgs(TabSwitcherMode SwitcherMode); Windows.Foundation.IReference SwitcherMode; };