Bust TerminalSettingsCache down to a plain old C++ class (#19254)

This commit is contained in:
Dustin L. Howett 2025-08-19 09:35:27 -05:00 committed by GitHub
parent e97388cb27
commit 837e86c18c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 18 additions and 39 deletions

View File

@ -174,9 +174,7 @@
<DependentUpon>TerminalPaneContent.idl</DependentUpon> <DependentUpon>TerminalPaneContent.idl</DependentUpon>
</ClInclude> </ClInclude>
<ClInclude Include="Toast.h" /> <ClInclude Include="Toast.h" />
<ClInclude Include="TerminalSettingsCache.h"> <ClInclude Include="TerminalSettingsCache.h" />
<DependentUpon>TerminalSettingsCache.idl</DependentUpon>
</ClInclude>
<ClInclude Include="SuggestionsControl.h"> <ClInclude Include="SuggestionsControl.h">
<DependentUpon>SuggestionsControl.xaml</DependentUpon> <DependentUpon>SuggestionsControl.xaml</DependentUpon>
</ClInclude> </ClInclude>
@ -289,9 +287,7 @@
</ClCompile> </ClCompile>
<ClCompile Include="$(GeneratedFilesDir)module.g.cpp" /> <ClCompile Include="$(GeneratedFilesDir)module.g.cpp" />
<ClCompile Include="Toast.cpp" /> <ClCompile Include="Toast.cpp" />
<ClCompile Include="TerminalSettingsCache.cpp"> <ClCompile Include="TerminalSettingsCache.cpp" />
<DependentUpon>TerminalSettingsCache.idl</DependentUpon>
</ClCompile>
<ClCompile Include="SuggestionsControl.cpp"> <ClCompile Include="SuggestionsControl.cpp">
<DependentUpon>SuggestionsControl.xaml</DependentUpon> <DependentUpon>SuggestionsControl.xaml</DependentUpon>
</ClCompile> </ClCompile>
@ -366,7 +362,6 @@
<DependentUpon>TaskPaneContent.xaml</DependentUpon> <DependentUpon>TaskPaneContent.xaml</DependentUpon>
<SubType>Code</SubType> <SubType>Code</SubType>
</Midl> </Midl>
<Midl Include="TerminalSettingsCache.idl" />
<Midl Include="MarkdownPaneContent.idl"> <Midl Include="MarkdownPaneContent.idl">
<DependentUpon>MarkdownPaneContent.xaml</DependentUpon> <DependentUpon>MarkdownPaneContent.xaml</DependentUpon>
<SubType>Code</SubType> <SubType>Code</SubType>

View File

@ -90,7 +90,6 @@
<Midl Include="TerminalWindow.idl" /> <Midl Include="TerminalWindow.idl" />
<Midl Include="TaskbarState.idl" /> <Midl Include="TaskbarState.idl" />
<Midl Include="IPaneContent.idl" /> <Midl Include="IPaneContent.idl" />
<Midl Include="TerminalSettingsCache.idl" />
<Midl Include="Monarch.idl" /> <Midl Include="Monarch.idl" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -18,6 +18,7 @@
#include "SettingsPaneContent.h" #include "SettingsPaneContent.h"
#include "SnippetsPaneContent.h" #include "SnippetsPaneContent.h"
#include "TabRowControl.h" #include "TabRowControl.h"
#include "TerminalSettingsCache.h"
#include "../../types/inc/ColorFix.hpp" #include "../../types/inc/ColorFix.hpp"
#include "../../types/inc/utils.hpp" #include "../../types/inc/utils.hpp"
@ -240,7 +241,7 @@ namespace winrt::TerminalApp::implementation
if (_settings == nullptr) if (_settings == nullptr)
{ {
// Create this only on the first time we load the settings. // Create this only on the first time we load the settings.
_terminalSettingsCache = TerminalApp::TerminalSettingsCache{ settings, *_bindings }; _terminalSettingsCache = std::make_shared<TerminalSettingsCache>(settings, *_bindings);
} }
_settings = settings; _settings = settings;
@ -3733,7 +3734,7 @@ namespace winrt::TerminalApp::implementation
// updating terminal panes, so that we don't have to build a _new_ // updating terminal panes, so that we don't have to build a _new_
// TerminalSettings for every profile we update - we can just look them // TerminalSettings for every profile we update - we can just look them
// up the previous ones we built. // up the previous ones we built.
_terminalSettingsCache.Reset(_settings, *_bindings); _terminalSettingsCache->Reset(_settings, *_bindings);
for (const auto& tab : _tabs) for (const auto& tab : _tabs)
{ {

View File

@ -31,6 +31,8 @@ namespace Microsoft::Terminal::Core
namespace winrt::TerminalApp::implementation namespace winrt::TerminalApp::implementation
{ {
struct TerminalSettingsCache;
inline constexpr uint32_t DefaultRowsToScroll{ 3 }; inline constexpr uint32_t DefaultRowsToScroll{ 3 };
inline constexpr std::wstring_view TabletInputServiceKey{ L"TabletInputService" }; inline constexpr std::wstring_view TabletInputServiceKey{ L"TabletInputService" };
@ -275,7 +277,7 @@ namespace winrt::TerminalApp::implementation
TerminalApp::ContentManager _manager{ nullptr }; TerminalApp::ContentManager _manager{ nullptr };
TerminalApp::TerminalSettingsCache _terminalSettingsCache{ nullptr }; std::shared_ptr<TerminalSettingsCache> _terminalSettingsCache{};
struct StashedDragData struct StashedDragData
{ {

View File

@ -6,6 +6,7 @@
#include <mmsystem.h> #include <mmsystem.h>
#include "TerminalSettingsCache.h"
#include "../../types/inc/utils.hpp" #include "../../types/inc/utils.hpp"
#include "BellEventArgs.g.cpp" #include "BellEventArgs.g.cpp"
@ -20,7 +21,7 @@ using namespace winrt::Microsoft::Terminal::TerminalConnection;
namespace winrt::TerminalApp::implementation namespace winrt::TerminalApp::implementation
{ {
TerminalPaneContent::TerminalPaneContent(const winrt::Microsoft::Terminal::Settings::Model::Profile& profile, TerminalPaneContent::TerminalPaneContent(const winrt::Microsoft::Terminal::Settings::Model::Profile& profile,
const TerminalApp::TerminalSettingsCache& cache, const std::shared_ptr<TerminalSettingsCache>& cache,
const winrt::Microsoft::Terminal::Control::TermControl& control) : const winrt::Microsoft::Terminal::Control::TermControl& control) :
_control{ control }, _control{ control },
_cache{ cache }, _cache{ cache },
@ -346,7 +347,7 @@ namespace winrt::TerminalApp::implementation
const auto profile{ settings.FindProfile(_profile.Guid()) }; const auto profile{ settings.FindProfile(_profile.Guid()) };
_profile = profile ? profile : settings.ProfileDefaults(); _profile = profile ? profile : settings.ProfileDefaults();
if (const auto& settings{ _cache.TryLookup(_profile) }) if (const auto& settings{ _cache->TryLookup(_profile) })
{ {
_control.UpdateControlSettings(settings.DefaultSettings(), settings.UnfocusedSettings()); _control.UpdateControlSettings(settings.DefaultSettings(), settings.UnfocusedSettings());
} }

View File

@ -8,6 +8,8 @@
namespace winrt::TerminalApp::implementation namespace winrt::TerminalApp::implementation
{ {
struct TerminalSettingsCache;
struct BellEventArgs : public BellEventArgsT<BellEventArgs> struct BellEventArgs : public BellEventArgsT<BellEventArgs>
{ {
public: public:
@ -20,7 +22,7 @@ namespace winrt::TerminalApp::implementation
struct TerminalPaneContent : TerminalPaneContentT<TerminalPaneContent>, BasicPaneEvents struct TerminalPaneContent : TerminalPaneContentT<TerminalPaneContent>, BasicPaneEvents
{ {
TerminalPaneContent(const winrt::Microsoft::Terminal::Settings::Model::Profile& profile, TerminalPaneContent(const winrt::Microsoft::Terminal::Settings::Model::Profile& profile,
const TerminalApp::TerminalSettingsCache& cache, const std::shared_ptr<TerminalSettingsCache>& cache,
const winrt::Microsoft::Terminal::Control::TermControl& control); const winrt::Microsoft::Terminal::Control::TermControl& control);
winrt::Windows::UI::Xaml::FrameworkElement GetRoot(); winrt::Windows::UI::Xaml::FrameworkElement GetRoot();
@ -59,7 +61,7 @@ namespace winrt::TerminalApp::implementation
winrt::Microsoft::Terminal::Control::TermControl _control{ nullptr }; winrt::Microsoft::Terminal::Control::TermControl _control{ nullptr };
winrt::Microsoft::Terminal::TerminalConnection::ConnectionState _connectionState{ winrt::Microsoft::Terminal::TerminalConnection::ConnectionState::NotConnected }; winrt::Microsoft::Terminal::TerminalConnection::ConnectionState _connectionState{ winrt::Microsoft::Terminal::TerminalConnection::ConnectionState::NotConnected };
winrt::Microsoft::Terminal::Settings::Model::Profile _profile{ nullptr }; winrt::Microsoft::Terminal::Settings::Model::Profile _profile{ nullptr };
TerminalApp::TerminalSettingsCache _cache{ nullptr }; std::shared_ptr<TerminalSettingsCache> _cache{};
bool _isDefTermSession{ false }; bool _isDefTermSession{ false };
winrt::Windows::Media::Playback::MediaPlayer _bellPlayer{ nullptr }; winrt::Windows::Media::Playback::MediaPlayer _bellPlayer{ nullptr };

View File

@ -2,7 +2,6 @@
// Licensed under the MIT license. // Licensed under the MIT license.
import "IPaneContent.idl"; import "IPaneContent.idl";
import "TerminalSettingsCache.idl";
import "FilteredCommand.idl"; import "FilteredCommand.idl";
namespace TerminalApp namespace TerminalApp

View File

@ -3,7 +3,6 @@
#include "pch.h" #include "pch.h"
#include "TerminalSettingsCache.h" #include "TerminalSettingsCache.h"
#include "TerminalSettingsCache.g.cpp"
namespace winrt namespace winrt
{ {

View File

@ -13,14 +13,13 @@ Abstract:
--*/ --*/
#pragma once #pragma once
#include "TerminalSettingsCache.g.h" #include "winrt/Microsoft.Terminal.Settings.Model.h"
#include <inc/cppwinrt_utils.h> #include "winrt/TerminalApp.h"
namespace winrt::TerminalApp::implementation namespace winrt::TerminalApp::implementation
{ {
class TerminalSettingsCache : public TerminalSettingsCacheT<TerminalSettingsCache> struct TerminalSettingsCache
{ {
public:
TerminalSettingsCache(const Microsoft::Terminal::Settings::Model::CascadiaSettings& settings, const TerminalApp::AppKeyBindings& bindings); TerminalSettingsCache(const Microsoft::Terminal::Settings::Model::CascadiaSettings& settings, const TerminalApp::AppKeyBindings& bindings);
Microsoft::Terminal::Settings::Model::TerminalSettingsCreateResult TryLookup(const Microsoft::Terminal::Settings::Model::Profile& profile); Microsoft::Terminal::Settings::Model::TerminalSettingsCreateResult TryLookup(const Microsoft::Terminal::Settings::Model::Profile& profile);
void Reset(const Microsoft::Terminal::Settings::Model::CascadiaSettings& settings, const TerminalApp::AppKeyBindings& bindings); void Reset(const Microsoft::Terminal::Settings::Model::CascadiaSettings& settings, const TerminalApp::AppKeyBindings& bindings);
@ -31,8 +30,3 @@ namespace winrt::TerminalApp::implementation
std::unordered_map<winrt::guid, std::pair<Microsoft::Terminal::Settings::Model::Profile, Microsoft::Terminal::Settings::Model::TerminalSettingsCreateResult>> profileGuidSettingsMap; std::unordered_map<winrt::guid, std::pair<Microsoft::Terminal::Settings::Model::Profile, Microsoft::Terminal::Settings::Model::TerminalSettingsCreateResult>> profileGuidSettingsMap;
}; };
} }
namespace winrt::TerminalApp::factory_implementation
{
BASIC_FACTORY(TerminalSettingsCache);
}

View File

@ -1,13 +0,0 @@
import "AppKeyBindings.idl";
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
namespace TerminalApp
{
[default_interface] runtimeclass TerminalSettingsCache
{
TerminalSettingsCache(Microsoft.Terminal.Settings.Model.CascadiaSettings settings, AppKeyBindings bindings);
Microsoft.Terminal.Settings.Model.TerminalSettingsCreateResult TryLookup(Microsoft.Terminal.Settings.Model.Profile profile);
void Reset(Microsoft.Terminal.Settings.Model.CascadiaSettings settings, AppKeyBindings bindings);
}
}