diff --git a/src/cascadia/TerminalSettingsModel/ActionMap.cpp b/src/cascadia/TerminalSettingsModel/ActionMap.cpp index 1ffcc5ce4a..ebc8c4f931 100644 --- a/src/cascadia/TerminalSettingsModel/ActionMap.cpp +++ b/src/cascadia/TerminalSettingsModel/ActionMap.cpp @@ -1229,18 +1229,18 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation UpdateCommandID(foundCmd, foundCmdNewID); } } - cmd.ID(newID); + winrt::get_self(cmd)->ID(newID); // update _ActionMap with the ID change _ActionMap.erase(oldID); _ActionMap.emplace(newID, cmd); // update _KeyMap so that all keys that pointed to the old ID now point to the new ID - std::unordered_set keysToRemap{}; + std::vector keysToRemap; for (const auto& [keys, cmdID] : _KeyMap) { if (cmdID == oldID) { - keysToRemap.insert(keys); + keysToRemap.push_back(keys); } } for (const auto& keys : keysToRemap) @@ -1248,7 +1248,6 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation _KeyMap.erase(keys); _KeyMap.emplace(keys, newID); } - PropagateCommandIDChanged.raise(cmd, oldID); } _RefreshKeyBindingCaches(); } diff --git a/src/cascadia/TerminalSettingsModel/ActionMap.h b/src/cascadia/TerminalSettingsModel/ActionMap.h index b3e536012f..e0001d8186 100644 --- a/src/cascadia/TerminalSettingsModel/ActionMap.h +++ b/src/cascadia/TerminalSettingsModel/ActionMap.h @@ -105,8 +105,6 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation void ResolveMediaResourcesWithBasePath(const winrt::hstring& basePath, const Model::MediaResourceResolver& resolver); - til::typed_event PropagateCommandIDChanged; - private: Model::Command _GetActionByID(const winrt::hstring& actionID) const; std::optional _GetActionIdByKeyChordInternal(const Control::KeyChord& keys) const; diff --git a/src/cascadia/TerminalSettingsModel/ActionMap.idl b/src/cascadia/TerminalSettingsModel/ActionMap.idl index 9c2dd8172d..097275def9 100644 --- a/src/cascadia/TerminalSettingsModel/ActionMap.idl +++ b/src/cascadia/TerminalSettingsModel/ActionMap.idl @@ -34,8 +34,6 @@ namespace Microsoft.Terminal.Settings.Model IVector ExpandedCommands { get; }; Windows.Foundation.IAsyncOperation > FilterToSnippets(String CurrentCommandline, String CurrentWorkingDirectory); - - event Windows.Foundation.TypedEventHandler PropagateCommandIDChanged; }; runtimeclass ActionMap : IActionMapView @@ -47,6 +45,5 @@ namespace Microsoft.Terminal.Settings.Model void AddKeyBinding(Microsoft.Terminal.Control.KeyChord keys, String cmdID); void RegisterKeyBinding(Microsoft.Terminal.Control.KeyChord keys, ActionAndArgs action); void AddSendInputAction(String name, String input, Microsoft.Terminal.Control.KeyChord keys); - void UpdateCommandID(Command cmd, String newID); } } diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp b/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp index 4b0f1f83e1..ada39cea72 100644 --- a/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp +++ b/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp @@ -1258,3 +1258,8 @@ void CascadiaSettings::ExpandCommands() { _globals->ExpandCommands(ActiveProfiles().GetView(), GlobalSettings().ColorSchemes()); } + +void CascadiaSettings::UpdateCommandID(const Model::Command& cmd, winrt::hstring newID) +{ + _globals->UpdateCommandID(cmd, newID); +} diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettings.h b/src/cascadia/TerminalSettingsModel/CascadiaSettings.h index 5e235d62af..dc927c32ce 100644 --- a/src/cascadia/TerminalSettingsModel/CascadiaSettings.h +++ b/src/cascadia/TerminalSettingsModel/CascadiaSettings.h @@ -191,6 +191,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation void CurrentDefaultTerminal(const Model::DefaultTerminal& terminal); void ExpandCommands(); + void UpdateCommandID(const Model::Command& cmd, winrt::hstring newID); void ResolveMediaResources() { _validateMediaResources(); } void LogSettingChanges(bool isJsonLoad) const; diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettings.idl b/src/cascadia/TerminalSettingsModel/CascadiaSettings.idl index 3073023652..cf6e258ddb 100644 --- a/src/cascadia/TerminalSettingsModel/CascadiaSettings.idl +++ b/src/cascadia/TerminalSettingsModel/CascadiaSettings.idl @@ -64,6 +64,7 @@ namespace Microsoft.Terminal.Settings.Model DefaultTerminal CurrentDefaultTerminal; void ExpandCommands(); + void UpdateCommandID(Command cmd, String newID); void ResolveMediaResources(); } diff --git a/src/cascadia/TerminalSettingsModel/Command.idl b/src/cascadia/TerminalSettingsModel/Command.idl index fbad17a06d..5722b4b918 100644 --- a/src/cascadia/TerminalSettingsModel/Command.idl +++ b/src/cascadia/TerminalSettingsModel/Command.idl @@ -41,7 +41,7 @@ namespace Microsoft.Terminal.Settings.Model String Name; Boolean HasName(); String LanguageNeutralName { get; }; - String ID; + String ID { get; }; void GenerateID(); String Description { get; }; diff --git a/src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp b/src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp index 40c4b0aefb..dc34c9e601 100644 --- a/src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp +++ b/src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp @@ -62,8 +62,7 @@ winrt::com_ptr GlobalAppSettings::Copy() const globals->_UnparsedDefaultProfile = _UnparsedDefaultProfile; globals->_defaultProfile = _defaultProfile; - globals->_actionMap = _actionMap->Copy(); - globals->_actionMap->PropagateCommandIDChanged({ globals.get(), &GlobalAppSettings::_CommandIDChangedHandler }); + globals->_actionMap = _actionMap->Copy(); globals->_keybindingsWarnings = _keybindingsWarnings; #define GLOBAL_SETTINGS_COPY(type, name, jsonKey, ...) \ @@ -146,7 +145,6 @@ winrt::com_ptr GlobalAppSettings::FromJson(const Json::Value& { auto result = winrt::make_self(); result->LayerJson(json, origin); - result->_actionMap->PropagateCommandIDChanged({ result.get(), &GlobalAppSettings::_CommandIDChangedHandler }); return result; } @@ -461,12 +459,12 @@ void GlobalAppSettings::_logSettingSet(const std::string_view& setting) } } -void GlobalAppSettings::_CommandIDChangedHandler(const Model::Command& senderCmd, const winrt::hstring& oldID) +void GlobalAppSettings::UpdateCommandID(const Model::Command& cmd, const winrt::hstring& newID) { + const auto oldID = cmd.ID(); + _actionMap->UpdateCommandID(cmd, newID); if (_NewTabMenu) { - const auto newID = senderCmd.ID(); - // Recursive lambda function to look through all the new tab menu entries and update IDs accordingly std::function recursiveEntryIdUpdate; recursiveEntryIdUpdate = [&](const Model::NewTabMenuEntry& entry) { diff --git a/src/cascadia/TerminalSettingsModel/GlobalAppSettings.h b/src/cascadia/TerminalSettingsModel/GlobalAppSettings.h index d6bfc67fa8..4ac8e4045f 100644 --- a/src/cascadia/TerminalSettingsModel/GlobalAppSettings.h +++ b/src/cascadia/TerminalSettingsModel/GlobalAppSettings.h @@ -47,6 +47,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation Model::ColorScheme DuplicateColorScheme(const Model::ColorScheme& scheme); Model::ActionMap ActionMap() const noexcept; + void UpdateCommandID(const Model::Command& cmd, const winrt::hstring& newID); static com_ptr FromJson(const Json::Value& json, const OriginTag origin = OriginTag::None); void LayerJson(const Json::Value& json, const OriginTag origin); @@ -104,8 +105,6 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation Windows::Foundation::Collections::IMap _colorSchemes{ winrt::single_threaded_map() }; Windows::Foundation::Collections::IMap _themes{ winrt::single_threaded_map() }; - void _CommandIDChangedHandler(const Model::Command& senderCmd, const winrt::hstring& oldID); - void _logSettingSet(const std::string_view& setting); void _logSettingIfSet(const std::string_view& setting, const bool isSet); };