theming needs to be windowsettings aware

This commit is contained in:
Mike Griese
2026-06-16 09:15:51 -05:00
parent 448487bbfd
commit bb8b7ab0df
26 changed files with 123 additions and 91 deletions

View File

@@ -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; };

View File

@@ -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; };

View File

@@ -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);
}
}

View File

@@ -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<Pane> NavigateDirection(const std::shared_ptr<Pane> sourcePane,
const winrt::Microsoft::Terminal::Settings::Model::FocusDirection& direction,

View File

@@ -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.
}

View File

@@ -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();

View File

@@ -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()

View File

@@ -10,9 +10,11 @@ namespace winrt::TerminalApp::implementation
class SettingsPaneContent : public winrt::implements<SettingsPaneContent, IPaneContent>, 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; }

View File

@@ -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<winrt::WUX::Media::Brush>();
}

View File

@@ -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<Microsoft::Terminal::Control::TermControl> _control{ nullptr };
winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings _settings{ nullptr };
winrt::Microsoft::Terminal::Settings::Model::WindowSettings _windowSettings{ nullptr };
winrt::Windows::Foundation::Collections::IObservableVector<TerminalApp::FilteredTask> _allTasks{ nullptr };
void _runCommandButtonClicked(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs&);

View File

@@ -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;
});
}

View File

@@ -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))

View File

@@ -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<TerminalSettingsCache>(settings);
_terminalSettingsCache = std::make_shared<TerminalSettingsCache>(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<SnippetsPaneContent>() };
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<MarkdownPaneContent>(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<SettingsPaneContent>(_settings) };
auto settingsContent{ winrt::make_self<SettingsPaneContent>(_settings, _currentWindowSettings()) };
auto sui = settingsContent->SettingsUI();
if (_hostingHwnd)

View File

@@ -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()) };

View File

@@ -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();

View File

@@ -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<TerminalSettingsPair> 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.

View File

@@ -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<TerminalSettingsPair> 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<winrt::guid, std::pair<Microsoft::Terminal::Settings::Model::Profile, std::optional<winrt::Microsoft::Terminal::Settings::TerminalSettingsCreateResult>>> profileGuidSettingsMap;
};
}

View File

@@ -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{};

View File

@@ -50,12 +50,11 @@ namespace winrt::Microsoft::Terminal::Settings
return { horizAlign, vertAlign };
}
winrt::com_ptr<TerminalSettings> TerminalSettings::_CreateWithProfileCommon(const Model::CascadiaSettings& appSettings, const Model::Profile& profile)
winrt::com_ptr<TerminalSettings> TerminalSettings::_CreateWithProfileCommon(const Model::CascadiaSettings& appSettings, const Model::WindowSettings& windowSettings, const Model::Profile& profile)
{
auto settings{ winrt::make_self<TerminalSettings>() };
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> TerminalSettings::CreateForPreview(const Model::CascadiaSettings& appSettings, const Model::Profile& profile)
winrt::com_ptr<TerminalSettings> 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<TerminalSettings> 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<TerminalSettings>();
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)

View File

@@ -57,12 +57,16 @@ namespace winrt::Microsoft::Terminal::Settings
{
TerminalSettings() = default;
static winrt::com_ptr<TerminalSettings> CreateForPreview(const Model::CascadiaSettings& appSettings, const Model::Profile& profile);
static winrt::com_ptr<TerminalSettings> 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<std::array<Microsoft::Terminal::Core::Color, COLOR_TABLE_SIZE>> _ColorTable;
std::span<Microsoft::Terminal::Core::Color> _getColorTableImpl();
static winrt::com_ptr<TerminalSettings> _CreateWithProfileCommon(const Model::CascadiaSettings& appSettings, const Model::Profile& profile);
static winrt::com_ptr<TerminalSettings> _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;

View File

@@ -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<implementation::ProfileViewModel>(profile, appSettings, dispatcher);
return winrt::make<implementation::ProfileViewModel>(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<Editor::ProfileViewModel>() }
{
InitializeComponent();
@@ -198,10 +200,12 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
// - settings - the new settings source
// Return value:
// - <none>
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<Editor::GlobalAppearance>(), winrt::make<NavigateToPageArgs>(winrt::make<GlobalAppearanceViewModel>(_settingsClone.GlobalSettings(), _settingsClone.WindowSettingsDefaults()), *this, elementToFocus));
contentFrame().Navigate(xaml_typename<Editor::GlobalAppearance>(), winrt::make<NavigateToPageArgs>(winrt::make<GlobalAppearanceViewModel>(_settingsClone.GlobalSettings(), _windowSettingsClone), *this, elementToFocus));
_breadcrumbs.Append(winrt::make<Breadcrumb>(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;

View File

@@ -46,9 +46,9 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
struct MainPage : MainPageT<MainPage>
{
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<HWND> _hostingHwnd;

View File

@@ -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<Object, Microsoft.Terminal.Settings.Model.SettingsTarget> OpenJson;
event Windows.Foundation.TypedEventHandler<Object, Windows.Foundation.Collections.IVectorView<Microsoft.Terminal.Settings.Model.SettingsLoadWarnings> > ShowLoadWarningsDialog;

View File

@@ -28,11 +28,12 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
Windows::Foundation::Collections::IObservableVector<Editor::Font> ProfileViewModel::_MonospaceFontList{ nullptr };
Windows::Foundation::Collections::IObservableVector<Editor::Font> 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<implementation::AppearanceViewModel>(profile.DefaultAppearance().try_as<AppearanceConfig>()) },
_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

View File

@@ -34,7 +34,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
static Windows::Foundation::Collections::IObservableVector<Editor::Font> CompleteFontList() noexcept { return _FontList; };
static Windows::Foundation::Collections::IObservableVector<Editor::Font> 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<Editor::Font> _FontList;
Model::CascadiaSettings _appSettings;
Model::WindowSettings _windowSettings{ nullptr };
Editor::AppearanceViewModel _unfocusedAppearanceViewModel;
};

View File

@@ -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());
}
}