diff --git a/src/cascadia/TerminalApp/IPaneContent.idl b/src/cascadia/TerminalApp/IPaneContent.idl index 2f5da33efe..849e93819e 100644 --- a/src/cascadia/TerminalApp/IPaneContent.idl +++ b/src/cascadia/TerminalApp/IPaneContent.idl @@ -26,7 +26,8 @@ namespace TerminalApp interface IPaneContent { Windows.UI.Xaml.FrameworkElement GetRoot(); - void UpdateSettings(Microsoft.Terminal.Settings.Model.CascadiaSettings settings); + void UpdateSettings(Microsoft.Terminal.Settings.Model.CascadiaSettings settings, + Microsoft.Terminal.Settings.Model.WindowSettings windowSettings); Windows.Foundation.Size MinimumSize { get; }; diff --git a/src/cascadia/TerminalApp/MarkdownPaneContent.h b/src/cascadia/TerminalApp/MarkdownPaneContent.h index 5f91b982f1..5541981539 100644 --- a/src/cascadia/TerminalApp/MarkdownPaneContent.h +++ b/src/cascadia/TerminalApp/MarkdownPaneContent.h @@ -25,7 +25,8 @@ namespace winrt::TerminalApp::implementation #pragma region IPaneContent winrt::Windows::UI::Xaml::FrameworkElement GetRoot(); - void UpdateSettings(const winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings&) {}; + void UpdateSettings(const winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings&, + const winrt::Microsoft::Terminal::Settings::Model::WindowSettings&) {}; winrt::Windows::Foundation::Size MinimumSize() { return { 1, 1 }; }; void Focus(winrt::Windows::UI::Xaml::FocusState reason = winrt::Windows::UI::Xaml::FocusState::Programmatic) { reason; }; diff --git a/src/cascadia/TerminalApp/Pane.cpp b/src/cascadia/TerminalApp/Pane.cpp index 85354101b6..eba07b8926 100644 --- a/src/cascadia/TerminalApp/Pane.cpp +++ b/src/cascadia/TerminalApp/Pane.cpp @@ -1291,11 +1291,12 @@ void Pane::_FocusFirstChild() } } -void Pane::UpdateSettings(const CascadiaSettings& settings) +void Pane::UpdateSettings(const CascadiaSettings& settings, + const winrt::Microsoft::Terminal::Settings::Model::WindowSettings& windowSettings) { if (_content) { - _content.UpdateSettings(settings); + _content.UpdateSettings(settings, windowSettings); } } diff --git a/src/cascadia/TerminalApp/Pane.h b/src/cascadia/TerminalApp/Pane.h index ecc81fad82..3a59aa8071 100644 --- a/src/cascadia/TerminalApp/Pane.h +++ b/src/cascadia/TerminalApp/Pane.h @@ -108,7 +108,8 @@ public: BuildStartupState BuildStartupActions(uint32_t currentId, uint32_t nextId, winrt::TerminalApp::BuildStartupKind kind); winrt::Microsoft::Terminal::Settings::Model::INewContentArgs GetTerminalArgsForPane(winrt::TerminalApp::BuildStartupKind kind) const; - void UpdateSettings(const winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings& settings); + void UpdateSettings(const winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings& settings, + const winrt::Microsoft::Terminal::Settings::Model::WindowSettings& windowSettings); bool ResizePane(const winrt::Microsoft::Terminal::Settings::Model::ResizeDirection& direction); std::shared_ptr NavigateDirection(const std::shared_ptr sourcePane, const winrt::Microsoft::Terminal::Settings::Model::FocusDirection& direction, diff --git a/src/cascadia/TerminalApp/ScratchpadContent.cpp b/src/cascadia/TerminalApp/ScratchpadContent.cpp index 1c2a4dd7ea..836d9d0a72 100644 --- a/src/cascadia/TerminalApp/ScratchpadContent.cpp +++ b/src/cascadia/TerminalApp/ScratchpadContent.cpp @@ -27,7 +27,8 @@ namespace winrt::TerminalApp::implementation _root.Children().Append(_box); } - void ScratchpadContent::UpdateSettings(const CascadiaSettings& /*settings*/) + void ScratchpadContent::UpdateSettings(const CascadiaSettings& /*settings*/, + const winrt::Microsoft::Terminal::Settings::Model::WindowSettings& /*windowSettings*/) { // Nothing to do. } diff --git a/src/cascadia/TerminalApp/ScratchpadContent.h b/src/cascadia/TerminalApp/ScratchpadContent.h index 30053f5aff..a8540df4a4 100644 --- a/src/cascadia/TerminalApp/ScratchpadContent.h +++ b/src/cascadia/TerminalApp/ScratchpadContent.h @@ -14,7 +14,8 @@ namespace winrt::TerminalApp::implementation winrt::Windows::UI::Xaml::FrameworkElement GetRoot(); - void UpdateSettings(const winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings& settings); + void UpdateSettings(const winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings& settings, + const winrt::Microsoft::Terminal::Settings::Model::WindowSettings& windowSettings); winrt::Windows::Foundation::Size MinimumSize(); diff --git a/src/cascadia/TerminalApp/SettingsPaneContent.cpp b/src/cascadia/TerminalApp/SettingsPaneContent.cpp index 22918b2692..81c31275a3 100644 --- a/src/cascadia/TerminalApp/SettingsPaneContent.cpp +++ b/src/cascadia/TerminalApp/SettingsPaneContent.cpp @@ -13,21 +13,21 @@ using namespace winrt::Microsoft::Terminal::Settings::Model; namespace winrt::TerminalApp::implementation { - SettingsPaneContent::SettingsPaneContent(CascadiaSettings settings) + SettingsPaneContent::SettingsPaneContent(CascadiaSettings settings, WindowSettings windowSettings) { - _sui = winrt::Microsoft::Terminal::Settings::Editor::MainPage{ settings }; + _sui = winrt::Microsoft::Terminal::Settings::Editor::MainPage{ settings, windowSettings }; // Stash away the current requested theme of the app. We'll need that in // _BackgroundBrush() to do a theme-aware resource lookup - _requestedTheme = settings.GlobalSettings().CurrentTheme(settings.WindowSettingsDefaults()).RequestedTheme(); + _requestedTheme = settings.GlobalSettings().CurrentTheme(windowSettings).RequestedTheme(); } - void SettingsPaneContent::UpdateSettings(const CascadiaSettings& settings) + void SettingsPaneContent::UpdateSettings(const CascadiaSettings& settings, const WindowSettings& windowSettings) { ASSERT_UI_THREAD(); - _sui.UpdateSettings(settings); + _sui.UpdateSettings(settings, windowSettings); - _requestedTheme = settings.GlobalSettings().CurrentTheme(settings.WindowSettingsDefaults()).RequestedTheme(); + _requestedTheme = settings.GlobalSettings().CurrentTheme(windowSettings).RequestedTheme(); } winrt::Windows::UI::Xaml::FrameworkElement SettingsPaneContent::GetRoot() diff --git a/src/cascadia/TerminalApp/SettingsPaneContent.h b/src/cascadia/TerminalApp/SettingsPaneContent.h index a119039cf1..9a488888ed 100644 --- a/src/cascadia/TerminalApp/SettingsPaneContent.h +++ b/src/cascadia/TerminalApp/SettingsPaneContent.h @@ -10,9 +10,11 @@ namespace winrt::TerminalApp::implementation class SettingsPaneContent : public winrt::implements, public BasicPaneEvents { public: - SettingsPaneContent(winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings settings); + SettingsPaneContent(winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings settings, + winrt::Microsoft::Terminal::Settings::Model::WindowSettings windowSettings); - void UpdateSettings(const winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings& settings); + void UpdateSettings(const winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings& settings, + const winrt::Microsoft::Terminal::Settings::Model::WindowSettings& windowSettings); winrt::Windows::UI::Xaml::FrameworkElement GetRoot(); winrt::Microsoft::Terminal::Settings::Editor::MainPage SettingsUI() { return _sui; } diff --git a/src/cascadia/TerminalApp/SnippetsPaneContent.cpp b/src/cascadia/TerminalApp/SnippetsPaneContent.cpp index f78ad9d808..aa321d5bc9 100644 --- a/src/cascadia/TerminalApp/SnippetsPaneContent.cpp +++ b/src/cascadia/TerminalApp/SnippetsPaneContent.cpp @@ -44,9 +44,11 @@ namespace winrt::TerminalApp::implementation } } - safe_void_coroutine SnippetsPaneContent::UpdateSettings(const CascadiaSettings& settings) + safe_void_coroutine SnippetsPaneContent::UpdateSettings(const CascadiaSettings& settings, + const winrt::Microsoft::Terminal::Settings::Model::WindowSettings& windowSettings) { _settings = settings; + _windowSettings = windowSettings; const auto dispatcher = Dispatcher(); const auto weak = get_weak(); @@ -121,7 +123,7 @@ namespace winrt::TerminalApp::implementation { static const auto key = winrt::box_value(L"SettingsUiTabBrush"); return ThemeLookup(WUX::Application::Current().Resources(), - _settings.GlobalSettings().CurrentTheme(_settings.WindowSettingsDefaults()).RequestedTheme(), + _settings.GlobalSettings().CurrentTheme(_windowSettings).RequestedTheme(), key) .try_as(); } diff --git a/src/cascadia/TerminalApp/SnippetsPaneContent.h b/src/cascadia/TerminalApp/SnippetsPaneContent.h index 1e25fb0cd2..fefd95358a 100644 --- a/src/cascadia/TerminalApp/SnippetsPaneContent.h +++ b/src/cascadia/TerminalApp/SnippetsPaneContent.h @@ -16,7 +16,8 @@ namespace winrt::TerminalApp::implementation winrt::Windows::UI::Xaml::FrameworkElement GetRoot(); - safe_void_coroutine UpdateSettings(const winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings& settings); + safe_void_coroutine UpdateSettings(const winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings& settings, + const winrt::Microsoft::Terminal::Settings::Model::WindowSettings& windowSettings); winrt::Windows::Foundation::Size MinimumSize(); void Focus(winrt::Windows::UI::Xaml::FocusState reason = winrt::Windows::UI::Xaml::FocusState::Programmatic); @@ -43,6 +44,7 @@ namespace winrt::TerminalApp::implementation winrt::weak_ref _control{ nullptr }; winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings _settings{ nullptr }; + winrt::Microsoft::Terminal::Settings::Model::WindowSettings _windowSettings{ nullptr }; winrt::Windows::Foundation::Collections::IObservableVector _allTasks{ nullptr }; void _runCommandButtonClicked(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs&); diff --git a/src/cascadia/TerminalApp/Tab.cpp b/src/cascadia/TerminalApp/Tab.cpp index eccb199202..5f193da8a5 100644 --- a/src/cascadia/TerminalApp/Tab.cpp +++ b/src/cascadia/TerminalApp/Tab.cpp @@ -362,7 +362,7 @@ namespace winrt::TerminalApp::implementation // Update the settings on all our panes. _rootPane->WalkTree([&](const auto& pane) { - pane->UpdateSettings(settings); + pane->UpdateSettings(settings, windowSettings); return false; }); } diff --git a/src/cascadia/TerminalApp/TabManagement.cpp b/src/cascadia/TerminalApp/TabManagement.cpp index 829f33f86c..b905d042f2 100644 --- a/src/cascadia/TerminalApp/TabManagement.cpp +++ b/src/cascadia/TerminalApp/TabManagement.cpp @@ -74,7 +74,7 @@ namespace winrt::TerminalApp::implementation { return S_FALSE; } - const auto settings{ Settings::TerminalSettings::CreateWithNewTerminalArgs(_settings, newTerminalArgs) }; + const auto settings{ Settings::TerminalSettings::CreateWithNewTerminalArgs(_settings, _currentWindowSettings(), newTerminalArgs) }; // Try to handle auto-elevation if (_maybeElevate(newTerminalArgs, settings, profile)) diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index 54bf652ab6..ca1e7c5112 100644 --- a/src/cascadia/TerminalApp/TerminalPage.cpp +++ b/src/cascadia/TerminalApp/TerminalPage.cpp @@ -271,7 +271,7 @@ namespace winrt::TerminalApp::implementation if (_settings == nullptr) { // Create this only on the first time we load the settings. - _terminalSettingsCache = std::make_shared(settings); + _terminalSettingsCache = std::make_shared(settings, settings.WindowSettings(_WindowProperties.WindowName())); } _settings = settings; @@ -1653,7 +1653,7 @@ namespace winrt::TerminalApp::implementation { // TODO GH#5047 If we cache the NewTerminalArgs, we no longer need to do this. profile = GetClosestProfileForDuplicationOfProfile(profile); - controlSettings = Settings::TerminalSettings::CreateWithProfile(_settings, profile); + controlSettings = Settings::TerminalSettings::CreateWithProfile(_settings, _currentWindowSettings(), profile); // Replace the Starting directory with the CWD, if given const auto workingDirectory = control.WorkingDirectory(); @@ -3733,7 +3733,7 @@ namespace winrt::TerminalApp::implementation { // TODO GH#5047 If we cache the NewTerminalArgs, we no longer need to do this. profile = GetClosestProfileForDuplicationOfProfile(profile); - controlSettings = Settings::TerminalSettings::CreateWithProfile(_settings, profile); + controlSettings = Settings::TerminalSettings::CreateWithProfile(_settings, _currentWindowSettings(), profile); const auto workingDirectory = tabImpl->GetActiveTerminalControl().WorkingDirectory(); if (Utils::IsValidDirectory(workingDirectory.c_str())) { @@ -3744,7 +3744,7 @@ namespace winrt::TerminalApp::implementation if (!profile) { profile = _settings.GetProfileForArgs(newTerminalArgs); - controlSettings = Settings::TerminalSettings::CreateWithNewTerminalArgs(_settings, newTerminalArgs); + controlSettings = Settings::TerminalSettings::CreateWithNewTerminalArgs(_settings, _currentWindowSettings(), newTerminalArgs); } // Try to handle auto-elevation @@ -3871,7 +3871,7 @@ namespace winrt::TerminalApp::implementation } const auto& tasksContent{ winrt::make_self() }; - tasksContent->UpdateSettings(_settings); + tasksContent->UpdateSettings(_settings, _currentWindowSettings()); tasksContent->GetRoot().KeyDown({ this, &TerminalPage::_KeyDownHandler }); tasksContent->DispatchCommandRequested({ this, &TerminalPage::_OnDispatchCommandRequested }); if (const auto& termControl{ _GetActiveControl() }) @@ -3886,7 +3886,7 @@ namespace winrt::TerminalApp::implementation if (Feature_MarkdownPane::IsEnabled()) { const auto& markdownContent{ winrt::make_self(L"") }; - markdownContent->UpdateSettings(_settings); + markdownContent->UpdateSettings(_settings, _currentWindowSettings()); markdownContent->GetRoot().KeyDown({ this, &TerminalPage::_KeyDownHandler }); // This one doesn't use DispatchCommand, because we don't create @@ -4012,7 +4012,7 @@ namespace winrt::TerminalApp::implementation // updating terminal panes, so that we don't have to build a _new_ // TerminalSettings for every profile we update - we can just look them // up the previous ones we built. - _terminalSettingsCache->Reset(_settings); + _terminalSettingsCache->Reset(_settings, _currentWindowSettings()); const auto windowSettings = _currentWindowSettings(); for (const auto& tab : _tabs) @@ -4520,7 +4520,7 @@ namespace winrt::TerminalApp::implementation } // Create the SUI pane content - auto settingsContent{ winrt::make_self(_settings) }; + auto settingsContent{ winrt::make_self(_settings, _currentWindowSettings()) }; auto sui = settingsContent->SettingsUI(); if (_hostingHwnd) diff --git a/src/cascadia/TerminalApp/TerminalPaneContent.cpp b/src/cascadia/TerminalApp/TerminalPaneContent.cpp index 5e02da1eb7..ecb987d3e3 100644 --- a/src/cascadia/TerminalApp/TerminalPaneContent.cpp +++ b/src/cascadia/TerminalApp/TerminalPaneContent.cpp @@ -301,7 +301,8 @@ namespace winrt::TerminalApp::implementation RestartTerminalRequested.raise(*this, nullptr); } - void TerminalPaneContent::UpdateSettings(const CascadiaSettings& settings) + void TerminalPaneContent::UpdateSettings(const CascadiaSettings& settings, + const winrt::Microsoft::Terminal::Settings::Model::WindowSettings& /*windowSettings*/) { // Reload our profile from the settings model to propagate bell mode, icon, and close on exit mode (anything that uses _profile). const auto profile{ settings.FindProfile(_profile.Guid()) }; diff --git a/src/cascadia/TerminalApp/TerminalPaneContent.h b/src/cascadia/TerminalApp/TerminalPaneContent.h index f6277d73f7..b310f0b595 100644 --- a/src/cascadia/TerminalApp/TerminalPaneContent.h +++ b/src/cascadia/TerminalApp/TerminalPaneContent.h @@ -45,7 +45,8 @@ namespace winrt::TerminalApp::implementation winrt::Microsoft::Terminal::Settings::Model::INewContentArgs GetNewTerminalArgs(BuildStartupKind kind) const; - void UpdateSettings(const winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings& settings); + void UpdateSettings(const winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings& settings, + const winrt::Microsoft::Terminal::Settings::Model::WindowSettings& windowSettings); void MarkAsDefterm(); diff --git a/src/cascadia/TerminalApp/TerminalSettingsCache.cpp b/src/cascadia/TerminalApp/TerminalSettingsCache.cpp index 0dca5b4f0e..16a36834f0 100644 --- a/src/cascadia/TerminalApp/TerminalSettingsCache.cpp +++ b/src/cascadia/TerminalApp/TerminalSettingsCache.cpp @@ -18,9 +18,9 @@ namespace winrt::TerminalApp::implementation result.UnfocusedSettings().try_as(_unfocusedSettings); } - TerminalSettingsCache::TerminalSettingsCache(const MTSM::CascadiaSettings& settings) + TerminalSettingsCache::TerminalSettingsCache(const MTSM::CascadiaSettings& settings, const MTSM::WindowSettings& windowSettings) { - Reset(settings); + Reset(settings, windowSettings); } std::optional TerminalSettingsCache::TryLookup(const MTSM::Profile& profile) @@ -35,7 +35,7 @@ namespace winrt::TerminalApp::implementation auto& pair{ found->second }; if (!pair.second) { - pair.second = winrt::Microsoft::Terminal::Settings::TerminalSettings::CreateWithProfile(_settings, pair.first); + pair.second = winrt::Microsoft::Terminal::Settings::TerminalSettings::CreateWithProfile(_settings, _windowSettings, pair.first); } return std::optional{ TerminalSettingsPair{ *pair.second } }; } @@ -43,9 +43,10 @@ namespace winrt::TerminalApp::implementation return std::nullopt; } - void TerminalSettingsCache::Reset(const MTSM::CascadiaSettings& settings) + void TerminalSettingsCache::Reset(const MTSM::CascadiaSettings& settings, const MTSM::WindowSettings& windowSettings) { _settings = settings; + _windowSettings = windowSettings; // Mapping by GUID isn't _excellent_ because the defaults profile doesn't have a stable GUID; however, // when we stabilize its guid this will become fully safe. diff --git a/src/cascadia/TerminalApp/TerminalSettingsCache.h b/src/cascadia/TerminalApp/TerminalSettingsCache.h index ce3951244a..96b346edba 100644 --- a/src/cascadia/TerminalApp/TerminalSettingsCache.h +++ b/src/cascadia/TerminalApp/TerminalSettingsCache.h @@ -38,12 +38,15 @@ namespace winrt::TerminalApp::implementation struct TerminalSettingsCache { - TerminalSettingsCache(const Microsoft::Terminal::Settings::Model::CascadiaSettings& settings); + TerminalSettingsCache(const Microsoft::Terminal::Settings::Model::CascadiaSettings& settings, + const Microsoft::Terminal::Settings::Model::WindowSettings& windowSettings); std::optional TryLookup(const Microsoft::Terminal::Settings::Model::Profile& profile); - void Reset(const Microsoft::Terminal::Settings::Model::CascadiaSettings& settings); + void Reset(const Microsoft::Terminal::Settings::Model::CascadiaSettings& settings, + const Microsoft::Terminal::Settings::Model::WindowSettings& windowSettings); private: Microsoft::Terminal::Settings::Model::CascadiaSettings _settings{ nullptr }; + Microsoft::Terminal::Settings::Model::WindowSettings _windowSettings{ nullptr }; std::unordered_map>> profileGuidSettingsMap; }; } diff --git a/src/cascadia/TerminalApp/TerminalWindow.cpp b/src/cascadia/TerminalApp/TerminalWindow.cpp index 7e1bc2cfae..05d8e5b2f9 100644 --- a/src/cascadia/TerminalApp/TerminalWindow.cpp +++ b/src/cascadia/TerminalApp/TerminalWindow.cpp @@ -627,7 +627,7 @@ namespace winrt::TerminalApp::implementation if ((_appArgs && _appArgs->ParsedArgs().GetSize().has_value()) || (proposedSize.Width == 0 && proposedSize.Height == 0)) { // Use the default profile to determine how big of a window we need. - const auto settings{ Settings::TerminalSettings::CreateWithNewTerminalArgs(_settings, nullptr) }; + const auto settings{ Settings::TerminalSettings::CreateWithNewTerminalArgs(_settings, _currentWindowSettings(), nullptr) }; const til::size emptySize{}; const auto commandlineSize = _appArgs ? _appArgs->ParsedArgs().GetSize().value_or(emptySize) : til::size{}; diff --git a/src/cascadia/TerminalSettingsAppAdapterLib/TerminalSettings.cpp b/src/cascadia/TerminalSettingsAppAdapterLib/TerminalSettings.cpp index 1f6c0180ac..8b40597548 100644 --- a/src/cascadia/TerminalSettingsAppAdapterLib/TerminalSettings.cpp +++ b/src/cascadia/TerminalSettingsAppAdapterLib/TerminalSettings.cpp @@ -50,12 +50,11 @@ namespace winrt::Microsoft::Terminal::Settings return { horizAlign, vertAlign }; } - winrt::com_ptr TerminalSettings::_CreateWithProfileCommon(const Model::CascadiaSettings& appSettings, const Model::Profile& profile) + winrt::com_ptr TerminalSettings::_CreateWithProfileCommon(const Model::CascadiaSettings& appSettings, const Model::WindowSettings& windowSettings, const Model::Profile& profile) { auto settings{ winrt::make_self() }; const auto globals = appSettings.GlobalSettings(); - const auto windowSettings = appSettings.WindowSettingsDefaults(); settings->_ApplyProfileSettings(profile); settings->_ApplyGlobalSettings(windowSettings); settings->_ApplyAppearanceSettings(profile.DefaultAppearance(), globals.ColorSchemes(), globals.CurrentTheme(windowSettings)); @@ -63,9 +62,9 @@ namespace winrt::Microsoft::Terminal::Settings return settings; } - winrt::com_ptr TerminalSettings::CreateForPreview(const Model::CascadiaSettings& appSettings, const Model::Profile& profile) + winrt::com_ptr TerminalSettings::CreateForPreview(const Model::CascadiaSettings& appSettings, const Model::WindowSettings& windowSettings, const Model::Profile& profile) { - const auto settings = _CreateWithProfileCommon(appSettings, profile); + const auto settings = _CreateWithProfileCommon(appSettings, windowSettings, profile); settings->_UseBackgroundImageForWindow = false; return settings; } @@ -81,9 +80,9 @@ namespace winrt::Microsoft::Terminal::Settings // Return Value: // - A TerminalSettingsCreateResult, which contains a pair of TerminalSettings objects, // one for when the terminal is focused and the other for when the terminal is unfocused - TerminalSettingsCreateResult TerminalSettings::CreateWithProfile(const Model::CascadiaSettings& appSettings, const Model::Profile& profile) + TerminalSettingsCreateResult TerminalSettings::CreateWithProfile(const Model::CascadiaSettings& appSettings, const Model::WindowSettings& windowSettings, const Model::Profile& profile) { - const auto settings = _CreateWithProfileCommon(appSettings, profile); + const auto settings = _CreateWithProfileCommon(appSettings, windowSettings, profile); winrt::com_ptr child{ nullptr }; if (const auto& unfocusedAppearance{ profile.UnfocusedAppearance() }) @@ -91,7 +90,7 @@ namespace winrt::Microsoft::Terminal::Settings const auto globals = appSettings.GlobalSettings(); child = winrt::make_self(); child->_parent = settings->get_strong(); - child->_ApplyAppearanceSettings(unfocusedAppearance, globals.ColorSchemes(), globals.CurrentTheme(appSettings.WindowSettingsDefaults())); + child->_ApplyAppearanceSettings(unfocusedAppearance, globals.ColorSchemes(), globals.CurrentTheme(windowSettings)); } return TerminalSettingsCreateResult{ settings.get(), child.get() }; @@ -115,10 +114,11 @@ namespace winrt::Microsoft::Terminal::Settings // - A TerminalSettingsCreateResult object, which contains a pair of TerminalSettings // objects. One for when the terminal is focused and one for when the terminal is unfocused. TerminalSettingsCreateResult TerminalSettings::CreateWithNewTerminalArgs(const Model::CascadiaSettings& appSettings, + const Model::WindowSettings& windowSettings, const Model::NewTerminalArgs& newTerminalArgs) { const auto profile = appSettings.GetProfileForArgs(newTerminalArgs); - auto settingsPair{ CreateWithProfile(appSettings, profile) }; + auto settingsPair{ CreateWithProfile(appSettings, windowSettings, profile) }; auto defaultSettings = settingsPair.DefaultSettings(); if (newTerminalArgs) diff --git a/src/cascadia/TerminalSettingsAppAdapterLib/TerminalSettings.h b/src/cascadia/TerminalSettingsAppAdapterLib/TerminalSettings.h index 7e8553c524..c2faa11b37 100644 --- a/src/cascadia/TerminalSettingsAppAdapterLib/TerminalSettings.h +++ b/src/cascadia/TerminalSettingsAppAdapterLib/TerminalSettings.h @@ -57,12 +57,16 @@ namespace winrt::Microsoft::Terminal::Settings { TerminalSettings() = default; - static winrt::com_ptr CreateForPreview(const Model::CascadiaSettings& appSettings, const Model::Profile& profile); + static winrt::com_ptr CreateForPreview(const Model::CascadiaSettings& appSettings, + const Model::WindowSettings& windowSettings, + const Model::Profile& profile); static TerminalSettingsCreateResult CreateWithProfile(const Model::CascadiaSettings& appSettings, + const Model::WindowSettings& windowSettings, const Model::Profile& profile); static TerminalSettingsCreateResult CreateWithNewTerminalArgs(const Model::CascadiaSettings& appSettings, + const Model::WindowSettings& windowSettings, const Model::NewTerminalArgs& newTerminalArgs); void ApplyColorScheme(const Model::ColorScheme& scheme); @@ -102,7 +106,7 @@ namespace winrt::Microsoft::Terminal::Settings std::optional> _ColorTable; std::span _getColorTableImpl(); - static winrt::com_ptr _CreateWithProfileCommon(const Model::CascadiaSettings& appSettings, const Model::Profile& profile); + static winrt::com_ptr _CreateWithProfileCommon(const Model::CascadiaSettings& appSettings, const Model::WindowSettings& windowSettings, const Model::Profile& profile); void _ApplyProfileSettings(const Model::Profile& profile); void _ApplyGlobalSettings(const Model::WindowSettings& windowSettings) noexcept; diff --git a/src/cascadia/TerminalSettingsEditor/MainPage.cpp b/src/cascadia/TerminalSettingsEditor/MainPage.cpp index e92a7e2bdf..405f659cbe 100644 --- a/src/cascadia/TerminalSettingsEditor/MainPage.cpp +++ b/src/cascadia/TerminalSettingsEditor/MainPage.cpp @@ -75,9 +75,9 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation return icon; } - static Editor::ProfileViewModel _viewModelForProfile(const Model::Profile& profile, const Model::CascadiaSettings& appSettings, const Windows::UI::Core::CoreDispatcher& dispatcher) + static Editor::ProfileViewModel _viewModelForProfile(const Model::Profile& profile, const Model::CascadiaSettings& appSettings, const Model::WindowSettings& windowSettings, const Windows::UI::Core::CoreDispatcher& dispatcher) { - return winrt::make(profile, appSettings, dispatcher); + return winrt::make(profile, appSettings, windowSettings, dispatcher); } static ProfileSubPage ProfileSubPageFromBreadcrumb(BreadcrumbSubPage subPage) @@ -99,9 +99,11 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation } } - MainPage::MainPage(const CascadiaSettings& settings) : + MainPage::MainPage(const CascadiaSettings& settings, const Model::WindowSettings& windowSettings) : _settingsSource{ settings }, _settingsClone{ settings.Copy() }, + _windowSettingsSource{ windowSettings }, + _windowSettingsClone{ _settingsClone.WindowSettingsDefaults() }, _profileVMs{ single_threaded_observable_vector() } { InitializeComponent(); @@ -198,10 +200,12 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation // - settings - the new settings source // Return value: // - - void MainPage::UpdateSettings(const Model::CascadiaSettings& settings) + void MainPage::UpdateSettings(const Model::CascadiaSettings& settings, const Model::WindowSettings& windowSettings) { _settingsSource = settings; _settingsClone = settings.Copy(); + _windowSettingsSource = windowSettings; + _windowSettingsClone = _settingsClone.WindowSettingsDefaults(); _UpdateBackgroundForMica(); @@ -375,7 +379,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation // GH#19927 - Theme the search box's internal popup now that the // visual tree is ready and control templates are applied - const auto theme = _settingsSource.GlobalSettings().CurrentTheme(_settingsSource.WindowSettingsDefaults()); + const auto theme = _settingsSource.GlobalSettings().CurrentTheme(_windowSettingsSource); const auto hasThemeForSettings{ theme.Settings() != nullptr }; const auto requestedTheme = hasThemeForSettings ? theme.Settings().RequestedTheme() : theme.RequestedTheme(); _setThemeOnPopups(SettingsSearchBox(), requestedTheme); @@ -643,7 +647,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation // lazy load profile defaults VM if (!_profileDefaultsVM) { - _profileDefaultsVM = _viewModelForProfile(_settingsClone.ProfileDefaults(), _settingsClone, Dispatcher()); + _profileDefaultsVM = _viewModelForProfile(_settingsClone.ProfileDefaults(), _settingsClone, _windowSettingsClone, Dispatcher()); _profileDefaultsVM.SetupAppearances(_colorSchemesPageVM.AllColorSchemes()); _profileDefaultsVM.IsBaseLayer(true); } @@ -671,7 +675,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation } else if (*clickedItemTag == globalAppearanceTag) { - contentFrame().Navigate(xaml_typename(), winrt::make(winrt::make(_settingsClone.GlobalSettings(), _settingsClone.WindowSettingsDefaults()), *this, elementToFocus)); + contentFrame().Navigate(xaml_typename(), winrt::make(winrt::make(_settingsClone.GlobalSettings(), _windowSettingsClone), *this, elementToFocus)); _breadcrumbs.Append(winrt::make(vm, RS_(L"Nav_Appearance/Content"), BreadcrumbSubPage::None)); } else if (*clickedItemTag == addProfileTag) @@ -869,7 +873,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void MainPage::ResetButton_Click(const IInspectable& /*sender*/, const RoutedEventArgs& /*args*/) { - UpdateSettings(_settingsSource); + UpdateSettings(_settingsSource, _windowSettingsSource); } void MainPage::BreadcrumbBar_ItemClicked(const Microsoft::UI::Xaml::Controls::BreadcrumbBar& /*sender*/, const Microsoft::UI::Xaml::Controls::BreadcrumbBarItemClickedEventArgs& args) @@ -903,7 +907,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation { if (!profile.Deleted()) { - auto profileVM = _viewModelForProfile(profile, _settingsClone, Dispatcher()); + auto profileVM = _viewModelForProfile(profile, _settingsClone, _windowSettingsClone, Dispatcher()); profileVM.SetupAppearances(_colorSchemesPageVM.AllColorSchemes()); auto navItem = _CreateProfileNavViewItem(profileVM); _menuItemSource.Append(navItem); @@ -961,7 +965,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void MainPage::_CreateAndNavigateToNewProfile(const uint32_t index, const Model::Profile& profile) { const auto newProfile{ profile ? profile : _settingsClone.CreateNewProfile() }; - const auto profileViewModel{ _viewModelForProfile(newProfile, _settingsClone, Dispatcher()) }; + const auto profileViewModel{ _viewModelForProfile(newProfile, _settingsClone, _windowSettingsClone, Dispatcher()) }; profileViewModel.SetupAppearances(_colorSchemesPageVM.AllColorSchemes()); const auto navItem{ _CreateProfileNavViewItem(profileViewModel) }; @@ -1149,7 +1153,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation } } - const auto theme = _settingsSource.GlobalSettings().CurrentTheme(_settingsSource.WindowSettingsDefaults()); + const auto theme = _settingsSource.GlobalSettings().CurrentTheme(_windowSettingsSource); const auto hasThemeForSettings{ theme.Settings() != nullptr }; const auto appTheme = theme.RequestedTheme(); const auto requestedTheme = (hasThemeForSettings) ? theme.Settings().RequestedTheme() : appTheme; diff --git a/src/cascadia/TerminalSettingsEditor/MainPage.h b/src/cascadia/TerminalSettingsEditor/MainPage.h index 60c11f9a90..d2e8f83476 100644 --- a/src/cascadia/TerminalSettingsEditor/MainPage.h +++ b/src/cascadia/TerminalSettingsEditor/MainPage.h @@ -46,9 +46,9 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation struct MainPage : MainPageT { MainPage() = delete; - MainPage(const Model::CascadiaSettings& settings); + MainPage(const Model::CascadiaSettings& settings, const Model::WindowSettings& windowSettings); - void UpdateSettings(const Model::CascadiaSettings& settings); + void UpdateSettings(const Model::CascadiaSettings& settings, const Model::WindowSettings& windowSettings); safe_void_coroutine SettingsSearchBox_TextChanged(const Windows::UI::Xaml::Controls::AutoSuggestBox& sender, const Windows::UI::Xaml::Controls::AutoSuggestBoxTextChangedEventArgs& args); void SettingsSearchBox_QuerySubmitted(const Windows::UI::Xaml::Controls::AutoSuggestBox& sender, const Windows::UI::Xaml::Controls::AutoSuggestBoxQuerySubmittedEventArgs& args); @@ -82,6 +82,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation Model::CascadiaSettings _settingsSource; Model::CascadiaSettings _settingsClone; + Model::WindowSettings _windowSettingsSource{ nullptr }; + Model::WindowSettings _windowSettingsClone{ nullptr }; std::optional _hostingHwnd; diff --git a/src/cascadia/TerminalSettingsEditor/MainPage.idl b/src/cascadia/TerminalSettingsEditor/MainPage.idl index fe9d42a60f..ae6f034b4e 100644 --- a/src/cascadia/TerminalSettingsEditor/MainPage.idl +++ b/src/cascadia/TerminalSettingsEditor/MainPage.idl @@ -45,9 +45,11 @@ namespace Microsoft.Terminal.Settings.Editor [default_interface] runtimeclass MainPage : Windows.UI.Xaml.Controls.Page, IHostedInWindow { - MainPage(Microsoft.Terminal.Settings.Model.CascadiaSettings settings); + MainPage(Microsoft.Terminal.Settings.Model.CascadiaSettings settings, + Microsoft.Terminal.Settings.Model.WindowSettings windowSettings); - void UpdateSettings(Microsoft.Terminal.Settings.Model.CascadiaSettings settings); + void UpdateSettings(Microsoft.Terminal.Settings.Model.CascadiaSettings settings, + Microsoft.Terminal.Settings.Model.WindowSettings windowSettings); event Windows.Foundation.TypedEventHandler OpenJson; event Windows.Foundation.TypedEventHandler > ShowLoadWarningsDialog; diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp index 91d10c96ff..3876e8294c 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp @@ -28,11 +28,12 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation Windows::Foundation::Collections::IObservableVector ProfileViewModel::_MonospaceFontList{ nullptr }; Windows::Foundation::Collections::IObservableVector ProfileViewModel::_FontList{ nullptr }; - ProfileViewModel::ProfileViewModel(const Model::Profile& profile, const Model::CascadiaSettings& appSettings, const Windows::UI::Core::CoreDispatcher& dispatcher) : + ProfileViewModel::ProfileViewModel(const Model::Profile& profile, const Model::CascadiaSettings& appSettings, const Model::WindowSettings& windowSettings, const Windows::UI::Core::CoreDispatcher& dispatcher) : _profile{ profile }, _defaultAppearanceViewModel{ winrt::make(profile.DefaultAppearance().try_as()) }, _originalProfileGuid{ profile.Guid() }, _appSettings{ appSettings }, + _windowSettings{ windowSettings }, _unfocusedAppearanceViewModel{ nullptr }, _dispatcher{ dispatcher } { @@ -218,7 +219,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation // This may look pricey, but it only resolves resources that have not been visited // and the preview update is debounced. _appSettings.ResolveMediaResources(); - return *Settings::TerminalSettings::CreateForPreview(_appSettings, _profile); + return *Settings::TerminalSettings::CreateForPreview(_appSettings, _windowSettings, _profile); } // Method Description: @@ -385,7 +386,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation Windows::UI::Color ProfileViewModel::TabThemeColorPreview() const { - const auto currentTheme = _appSettings.GlobalSettings().CurrentTheme(_appSettings.WindowSettingsDefaults()); + const auto currentTheme = _appSettings.GlobalSettings().CurrentTheme(_windowSettings); if (const auto tabTheme = currentTheme.Tab()) { // theme.tab.background: theme color must be evaluated diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h index fa403952e5..42071af512 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h @@ -34,7 +34,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation static Windows::Foundation::Collections::IObservableVector CompleteFontList() noexcept { return _FontList; }; static Windows::Foundation::Collections::IObservableVector MonospaceFontList() noexcept { return _MonospaceFontList; }; - ProfileViewModel(const Model::Profile& profile, const Model::CascadiaSettings& settings, const Windows::UI::Core::CoreDispatcher& dispatcher); + ProfileViewModel(const Model::Profile& profile, const Model::CascadiaSettings& settings, const Model::WindowSettings& windowSettings, const Windows::UI::Core::CoreDispatcher& dispatcher); Control::IControlSettings TermSettings() const; void DeleteProfile(); @@ -172,6 +172,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation static Windows::Foundation::Collections::IObservableVector _FontList; Model::CascadiaSettings _appSettings; + Model::WindowSettings _windowSettings{ nullptr }; Editor::AppearanceViewModel _unfocusedAppearanceViewModel; }; diff --git a/src/cascadia/UnitTests_SettingsModel/TerminalSettingsTests.cpp b/src/cascadia/UnitTests_SettingsModel/TerminalSettingsTests.cpp index 6eb758c5bc..8afbeb0310 100644 --- a/src/cascadia/UnitTests_SettingsModel/TerminalSettingsTests.cpp +++ b/src/cascadia/UnitTests_SettingsModel/TerminalSettingsTests.cpp @@ -333,7 +333,7 @@ namespace SettingsModelUnitTests VERIFY_IS_TRUE(terminalArgs.Profile().empty()); const auto profile{ settings->GetProfileForArgs(terminalArgs) }; - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, terminalArgs) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), terminalArgs) }; const auto termSettings = settingsStruct.DefaultSettings(); VERIFY_ARE_EQUAL(guid0, profile.Guid()); VERIFY_ARE_EQUAL(L"cmd.exe", termSettings->Commandline()); @@ -357,7 +357,7 @@ namespace SettingsModelUnitTests VERIFY_ARE_EQUAL(L"{6239a42c-1111-49a3-80bd-e8fdd045185c}", terminalArgs.Profile()); const auto profile{ settings->GetProfileForArgs(terminalArgs) }; - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, terminalArgs) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), terminalArgs) }; const auto termSettings = settingsStruct.DefaultSettings(); VERIFY_ARE_EQUAL(guid1, profile.Guid()); VERIFY_ARE_EQUAL(L"pwsh.exe", termSettings->Commandline()); @@ -381,7 +381,7 @@ namespace SettingsModelUnitTests VERIFY_ARE_EQUAL(L"profile1", terminalArgs.Profile()); const auto profile{ settings->GetProfileForArgs(terminalArgs) }; - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, terminalArgs) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), terminalArgs) }; const auto termSettings = settingsStruct.DefaultSettings(); VERIFY_ARE_EQUAL(guid1, profile.Guid()); VERIFY_ARE_EQUAL(L"pwsh.exe", termSettings->Commandline()); @@ -405,7 +405,7 @@ namespace SettingsModelUnitTests VERIFY_ARE_EQUAL(L"profile2", terminalArgs.Profile()); const auto profile{ settings->GetProfileForArgs(terminalArgs) }; - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, terminalArgs) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), terminalArgs) }; const auto termSettings = settingsStruct.DefaultSettings(); VERIFY_ARE_EQUAL(profile2Guid, profile.Guid()); VERIFY_ARE_EQUAL(L"wsl.exe", termSettings->Commandline()); @@ -429,7 +429,7 @@ namespace SettingsModelUnitTests VERIFY_ARE_EQUAL(L"foo.exe", terminalArgs.Commandline()); const auto profile{ settings->GetProfileForArgs(terminalArgs) }; - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, terminalArgs) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), terminalArgs) }; const auto termSettings = settingsStruct.DefaultSettings(); // This action specified a command but no profile; it gets reassigned to the base profile VERIFY_ARE_EQUAL(settings->ProfileDefaults(), profile); @@ -455,7 +455,7 @@ namespace SettingsModelUnitTests VERIFY_ARE_EQUAL(L"foo.exe", terminalArgs.Commandline()); const auto profile{ settings->GetProfileForArgs(terminalArgs) }; - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, terminalArgs) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), terminalArgs) }; const auto termSettings = settingsStruct.DefaultSettings(); VERIFY_ARE_EQUAL(guid1, profile.Guid()); VERIFY_ARE_EQUAL(L"foo.exe", termSettings->Commandline()); @@ -477,7 +477,7 @@ namespace SettingsModelUnitTests VERIFY_IS_TRUE(terminalArgs.Profile().empty()); const auto profile{ settings->GetProfileForArgs(terminalArgs) }; - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, terminalArgs) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), terminalArgs) }; const auto termSettings = settingsStruct.DefaultSettings(); VERIFY_ARE_EQUAL(guid0, profile.Guid()); VERIFY_ARE_EQUAL(L"cmd.exe", termSettings->Commandline()); @@ -500,7 +500,7 @@ namespace SettingsModelUnitTests VERIFY_ARE_EQUAL(L"c:\\foo", terminalArgs.StartingDirectory()); const auto profile{ settings->GetProfileForArgs(terminalArgs) }; - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, terminalArgs) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), terminalArgs) }; const auto termSettings = settingsStruct.DefaultSettings(); VERIFY_ARE_EQUAL(guid0, profile.Guid()); VERIFY_ARE_EQUAL(L"cmd.exe", termSettings->Commandline()); @@ -525,7 +525,7 @@ namespace SettingsModelUnitTests VERIFY_ARE_EQUAL(L"profile2", terminalArgs.Profile()); const auto profile{ settings->GetProfileForArgs(terminalArgs) }; - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, terminalArgs) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), terminalArgs) }; const auto termSettings = settingsStruct.DefaultSettings(); VERIFY_ARE_EQUAL(profile2Guid, profile.Guid()); VERIFY_ARE_EQUAL(L"wsl.exe", termSettings->Commandline()); @@ -549,7 +549,7 @@ namespace SettingsModelUnitTests VERIFY_ARE_EQUAL(L"bar", terminalArgs.TabTitle()); const auto profile{ settings->GetProfileForArgs(terminalArgs) }; - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, terminalArgs) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), terminalArgs) }; const auto termSettings = settingsStruct.DefaultSettings(); VERIFY_ARE_EQUAL(guid0, profile.Guid()); VERIFY_ARE_EQUAL(L"cmd.exe", termSettings->Commandline()); @@ -574,7 +574,7 @@ namespace SettingsModelUnitTests VERIFY_ARE_EQUAL(L"profile2", terminalArgs.Profile()); const auto profile{ settings->GetProfileForArgs(terminalArgs) }; - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, terminalArgs) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), terminalArgs) }; const auto termSettings = settingsStruct.DefaultSettings(); VERIFY_ARE_EQUAL(profile2Guid, profile.Guid()); VERIFY_ARE_EQUAL(L"wsl.exe", termSettings->Commandline()); @@ -601,7 +601,7 @@ namespace SettingsModelUnitTests VERIFY_ARE_EQUAL(L"profile1", terminalArgs.Profile()); const auto profile{ settings->GetProfileForArgs(terminalArgs) }; - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, terminalArgs) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), terminalArgs) }; const auto termSettings = settingsStruct.DefaultSettings(); VERIFY_ARE_EQUAL(guid1, profile.Guid()); VERIFY_ARE_EQUAL(L"foo.exe", termSettings->Commandline()); @@ -640,7 +640,7 @@ namespace SettingsModelUnitTests try { - auto settingsStruct{ TerminalSettings::CreateWithProfile(*settings, profile1) }; + auto settingsStruct{ TerminalSettings::CreateWithProfile(*settings, settings->WindowSettingsDefaults(), profile1) }; VERIFY_ARE_EQUAL(1, settingsStruct.DefaultSettings()->HistorySize()); } catch (...) @@ -650,7 +650,7 @@ namespace SettingsModelUnitTests try { - auto settingsStruct{ TerminalSettings::CreateWithProfile(*settings, profile2) }; + auto settingsStruct{ TerminalSettings::CreateWithProfile(*settings, settings->WindowSettingsDefaults(), profile2) }; VERIFY_ARE_EQUAL(2, settingsStruct.DefaultSettings()->HistorySize()); } catch (...) @@ -660,7 +660,7 @@ namespace SettingsModelUnitTests try { - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, nullptr) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), nullptr) }; VERIFY_ARE_EQUAL(1, settingsStruct.DefaultSettings()->HistorySize()); } catch (...) @@ -698,7 +698,7 @@ namespace SettingsModelUnitTests VERIFY_ARE_EQUAL(settings->WindowSettingsDefaults().DefaultProfile(), settings->ActiveProfiles().GetAt(0).Guid()); try { - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, nullptr) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), nullptr) }; VERIFY_ARE_EQUAL(1, settingsStruct.DefaultSettings()->HistorySize()); } catch (...) @@ -838,58 +838,58 @@ namespace SettingsModelUnitTests { // just a profile (profile wins) NewTerminalArgs args{}; args.Profile(L"profile0"); - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, args) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), args) }; VERIFY_ARE_EQUAL(L"profile0", settingsStruct.DefaultSettings()->StartingTitle()); } { // profile and command line -> no promotion (profile wins) NewTerminalArgs args{}; args.Profile(L"profile0"); args.Commandline(L"foo.exe"); - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, args) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), args) }; VERIFY_ARE_EQUAL(L"profile0", settingsStruct.DefaultSettings()->StartingTitle()); } { // just a title -> it is propagated NewTerminalArgs args{}; args.TabTitle(L"Analog Kid"); - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, args) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), args) }; VERIFY_ARE_EQUAL(L"Analog Kid", settingsStruct.DefaultSettings()->StartingTitle()); } { // title and command line -> no promotion NewTerminalArgs args{}; args.TabTitle(L"Digital Man"); args.Commandline(L"foo.exe"); - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, args) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), args) }; VERIFY_ARE_EQUAL(L"Digital Man", settingsStruct.DefaultSettings()->StartingTitle()); } { // just a commandline -> promotion NewTerminalArgs args{}; args.Commandline(L"foo.exe"); - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, args) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), args) }; VERIFY_ARE_EQUAL(L"foo.exe", settingsStruct.DefaultSettings()->StartingTitle()); } // various typesof commandline follow { NewTerminalArgs args{}; args.Commandline(L"foo.exe bar"); - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, args) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), args) }; VERIFY_ARE_EQUAL(L"foo.exe", settingsStruct.DefaultSettings()->StartingTitle()); } { NewTerminalArgs args{}; args.Commandline(L"\"foo exe.exe\" bar"); - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, args) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), args) }; VERIFY_ARE_EQUAL(L"foo exe.exe", settingsStruct.DefaultSettings()->StartingTitle()); } { NewTerminalArgs args{}; args.Commandline(L"\"\" grand designs"); - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, args) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), args) }; VERIFY_ARE_EQUAL(L"", settingsStruct.DefaultSettings()->StartingTitle()); } { NewTerminalArgs args{}; args.Commandline(L" imagine a man"); - const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, args) }; + const auto settingsStruct{ TerminalSettings::CreateWithNewTerminalArgs(*settings, settings->WindowSettingsDefaults(), args) }; VERIFY_ARE_EQUAL(L"", settingsStruct.DefaultSettings()->StartingTitle()); } }