diff --git a/src/cascadia/TerminalSettingsEditor/ActionsViewModel.cpp b/src/cascadia/TerminalSettingsEditor/ActionsViewModel.cpp index 1d59f7a6c7c..a8f22f0212f 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*/)