diff --git a/src/cascadia/TerminalSettingsEditor/Extensions.xaml b/src/cascadia/TerminalSettingsEditor/Extensions.xaml index 84c191bde3..0abace8053 100644 --- a/src/cascadia/TerminalSettingsEditor/Extensions.xaml +++ b/src/cascadia/TerminalSettingsEditor/Extensions.xaml @@ -100,7 +100,7 @@ Margin="0,4,0,0" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" - Header="{x:Bind Fragment.JsonSource}"> + Header="{x:Bind Fragment.Filename}"> diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp b/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp index c00418652d..6f215ab38e 100644 --- a/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp +++ b/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp @@ -114,27 +114,10 @@ Model::CascadiaSettings CascadiaSettings::Copy() const settings->_allProfiles = winrt::single_threaded_observable_vector(std::move(allProfiles)); settings->_activeProfiles = winrt::single_threaded_observable_vector(std::move(activeProfiles)); - // copy fragment extensions - { - std::vector fragmentExtensions; - fragmentExtensions.reserve(_fragmentExtensions.Size()); - for (const auto& fragment : _fragmentExtensions) - { - fragmentExtensions.emplace_back(get_self(fragment)->Copy()); - } - settings->_fragmentExtensions = winrt::single_threaded_vector(std::move(fragmentExtensions)); - } - - // copy dynamic profile generators - { - std::vector dynamicProfileGenerators; - dynamicProfileGenerators.reserve(_dynamicProfileGeneratorExtensions.Size()); - for (const auto& fragment : _dynamicProfileGeneratorExtensions) - { - dynamicProfileGenerators.emplace_back(get_self(fragment)->Copy()); - } - settings->_dynamicProfileGeneratorExtensions = winrt::single_threaded_vector(std::move(dynamicProfileGenerators)); - } + // fragment extensions and dynamic profile generators don't need a deep clone + // because they're fully immutable. We can just copy the reference over instead. + settings->_fragmentExtensions = _fragmentExtensions; + settings->_dynamicProfileGeneratorExtensions = _dynamicProfileGeneratorExtensions; } // load errors @@ -153,46 +136,6 @@ Model::CascadiaSettings CascadiaSettings::Copy() const return *settings; } -Model::FragmentSettings FragmentSettings::Copy() const -{ - auto fragment{ winrt::make_self(_source, _json, _jsonSource, _scope) }; - - if (_modifiedProfiles) - { - std::vector modifiedProfiles; - modifiedProfiles.reserve(_modifiedProfiles.Size()); - for (const auto& entry : _modifiedProfiles) - { - modifiedProfiles.emplace_back(winrt::make(entry.ProfileGuid(), entry.Json())); - } - fragment->_modifiedProfiles = winrt::single_threaded_vector(std::move(modifiedProfiles)); - } - - if (_newProfiles) - { - std::vector newProfiles; - newProfiles.reserve(_newProfiles.Size()); - for (const auto& entry : _newProfiles) - { - newProfiles.emplace_back(winrt::make(entry.ProfileGuid(), entry.Json())); - } - fragment->_newProfiles = winrt::single_threaded_vector(std::move(newProfiles)); - } - - if (_colorSchemes) - { - std::vector colorSchemes; - colorSchemes.reserve(_colorSchemes.Size()); - for (const auto& entry : _colorSchemes) - { - colorSchemes.emplace_back(winrt::make(entry.ColorSchemeName(), entry.Json())); - } - fragment->_colorSchemes = winrt::single_threaded_vector(std::move(colorSchemes)); - } - - return *fragment; -} - // Method Description: // - Finds a profile that matches the given GUID. If there is no profile in this // settings object that matches, returns nullptr. diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettings.h b/src/cascadia/TerminalSettingsModel/CascadiaSettings.h index d01999559e..059169fb36 100644 --- a/src/cascadia/TerminalSettingsModel/CascadiaSettings.h +++ b/src/cascadia/TerminalSettingsModel/CascadiaSettings.h @@ -243,18 +243,16 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation struct FragmentSettings : FragmentSettingsT { public: - FragmentSettings(hstring source, hstring json, hstring jsonSource, FragmentScope scope) : + FragmentSettings(hstring source, hstring json, hstring filename, FragmentScope scope) : _source{ source }, _json{ json }, - _jsonSource{ jsonSource }, + _filename{ filename }, _scope{ scope } {} - Model::FragmentSettings Copy() const; - hstring Source() const noexcept { return _source; } FragmentScope Scope() const noexcept { return _scope; } hstring Json() const noexcept { return _json; } - hstring JsonSource() const noexcept { return _jsonSource; } + hstring Filename() const noexcept { return _filename; } Windows::Foundation::Collections::IVector ModifiedProfiles() const noexcept { return _modifiedProfiles; } void ModifiedProfiles(const Windows::Foundation::Collections::IVector& modifiedProfiles) noexcept { _modifiedProfiles = modifiedProfiles; } Windows::Foundation::Collections::IVector NewProfiles() const noexcept { return _newProfiles; } @@ -270,7 +268,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation private: hstring _source; hstring _json; - hstring _jsonSource; + hstring _filename; FragmentScope _scope; Windows::Foundation::Collections::IVector _modifiedProfiles; Windows::Foundation::Collections::IVector _newProfiles; diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettings.idl b/src/cascadia/TerminalSettingsModel/CascadiaSettings.idl index 5671ed21d4..17d2da2540 100644 --- a/src/cascadia/TerminalSettingsModel/CascadiaSettings.idl +++ b/src/cascadia/TerminalSettingsModel/CascadiaSettings.idl @@ -83,7 +83,7 @@ namespace Microsoft.Terminal.Settings.Model String Source { get; }; FragmentScope Scope { get; }; String Json { get; }; - String JsonSource { get; }; + String Filename { get; }; Windows.Foundation.Collections.IVectorView ModifiedProfilesView { get; }; Windows.Foundation.Collections.IVectorView NewProfilesView { get; }; Windows.Foundation.Collections.IVectorView ColorSchemesView { get; };