From ce92b18507247a97e22948d456b1ec8a34aa4e63 Mon Sep 17 00:00:00 2001 From: PankajBhojwani Date: Wed, 21 Aug 2024 15:43:20 -0700 Subject: [PATCH] Fix overwrite key binding warning in the SUI (#17763) Fixes a regression from the actions MVVM change in #14292 - attempting to overwrite a keybinding was displaying a warning but propagating the change before the user acknowledged it. The overwrite key binding warning in the SUI works like before Closes #17754 --- .../ActionsViewModel.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/cascadia/TerminalSettingsEditor/ActionsViewModel.cpp b/src/cascadia/TerminalSettingsEditor/ActionsViewModel.cpp index 1d59f7a6c7..a8f22f0212 100644 --- a/src/cascadia/TerminalSettingsEditor/ActionsViewModel.cpp +++ b/src/cascadia/TerminalSettingsEditor/ActionsViewModel.cpp @@ -278,11 +278,13 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation // Check for this special case: // we're changing the key chord, // but the new key chord is already in use + bool conflictFound{ false }; if (isNewAction || args.OldKeys().Modifiers() != args.NewKeys().Modifiers() || args.OldKeys().Vkey() != args.NewKeys().Vkey()) { const auto& conflictingCmd{ _Settings.ActionMap().GetActionByKeyChord(args.NewKeys()) }; if (conflictingCmd) { + conflictFound = true; // We're about to overwrite another key chord. // Display a confirmation dialog. TextBlock errorMessageTB{}; @@ -324,13 +326,18 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation } } - // update settings model and view model - applyChangesToSettingsModel(); + // if there was a conflict, the flyout we created will handle whether changes need to be propagated + // otherwise, go ahead and apply the changes + if (!conflictFound) + { + // update settings model and view model + applyChangesToSettingsModel(); - // We NEED to toggle the edit mode here, - // so that if nothing changed, we still exit - // edit mode. - senderVM.ToggleEditMode(); + // We NEED to toggle the edit mode here, + // so that if nothing changed, we still exit + // edit mode. + senderVM.ToggleEditMode(); + } } void ActionsViewModel::_KeyBindingViewModelDeleteNewlyAddedKeyBindingHandler(const Editor::KeyBindingViewModel& senderVM, const IInspectable& /*args*/)