From 280ff0976238d21d16c48f49884f7373a08237ba Mon Sep 17 00:00:00 2001 From: Isaac Blanco <40709873+AlejandroBlanco2001@users.noreply.github.com> Date: Thu, 14 Mar 2024 14:58:05 -0500 Subject: [PATCH] Update CommandPalette.cpp to ignore _filterTextChanged on TabSwitchMode (#16858) As mentioned in #11146, when the "Next/Prev" command is executed from the command line with a string in the search bar, this is setting always the first tab. When using the command "Next/Previous Tab" from the command line, we are creating another tab (as if we are using the keyboard shortcut), and this triggers the `_filterTextChanged` that resets the index to the first item in because the current mode that it has. This could be cause because, It seems that it detects as if we are deleting the entered letter or creating an empty string, causing the execution of the mentioned method and resetting its index to 0. To avoid this, we are making sure that when this action is triggerd and we are in the `TabSwitchMode`, we should ignore the following execution of the method. ## Validation Steps Performed I tested out the following scenarios: 1. Performing the action with the keyboard shorcut 2. Perfoming the action with an empty string 3. Performing the action with a string in the search bar. Also validated with the current tests. Closes #11146 (cherry picked from commit 806d5e2d05a31bf042b6d98aeacd33d24880d189) Service-Card-Id: 92139799 Service-Version: 1.19 --- src/cascadia/TerminalApp/CommandPalette.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/cascadia/TerminalApp/CommandPalette.cpp b/src/cascadia/TerminalApp/CommandPalette.cpp index dfba90a40ae..81921210c29 100644 --- a/src/cascadia/TerminalApp/CommandPalette.cpp +++ b/src/cascadia/TerminalApp/CommandPalette.cpp @@ -843,6 +843,16 @@ namespace winrt::TerminalApp::implementation void CommandPalette::_filterTextChanged(const IInspectable& /*sender*/, const Windows::UI::Xaml::RoutedEventArgs& /*args*/) { + // When we are executing the _SelectNextTab in the TabManagement.cpp, this method + // is getting triggered because we set up the default value for that CommandPalette + // with an empty string. Therefore, to avoid the reset of the index when executing + // the Next/Prev tab command, we are skipping this execution. + // Check issue https://github.com/microsoft/terminal/issues/11146 + if (_currentMode == CommandPaletteMode::TabSwitchMode) + { + return; + } + if (_currentMode == CommandPaletteMode::CommandlineMode) { _evaluatePrefix();