diff --git a/.github/actions/spelling/expect/expect.txt b/.github/actions/spelling/expect/expect.txt index 8a063cdf85c..9f1a3175c4d 100644 --- a/.github/actions/spelling/expect/expect.txt +++ b/.github/actions/spelling/expect/expect.txt @@ -170,6 +170,7 @@ blog Blt BLUESCROLL bmp +BODGY BOLDFONT BOOLIFY bools diff --git a/src/cascadia/TerminalSettingsEditor/Launch.cpp b/src/cascadia/TerminalSettingsEditor/Launch.cpp index 7ad7e526ba7..99b15cf73cb 100644 --- a/src/cascadia/TerminalSettingsEditor/Launch.cpp +++ b/src/cascadia/TerminalSettingsEditor/Launch.cpp @@ -19,6 +19,15 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation INITIALIZE_BINDABLE_ENUM_SETTING(LaunchMode, LaunchMode, LaunchMode, L"Globals_LaunchMode", L"Content"); INITIALIZE_BINDABLE_ENUM_SETTING(WindowingBehavior, WindowingMode, WindowingMode, L"Globals_WindowingBehavior", L"Content"); + + // BODGY + // Xaml code generator for x:Bind to this will fail to find UnloadObject() on Launch class. + // To work around, check it ourselves on construction and FindName to force load. + // It's specified as x:Load=false in the XAML. So it only loads if this passes. + if (CascadiaSettings::IsDefaultTerminalAvailable()) + { + FindName(L"DefaultTerminalDropdown"); + } } void Launch::OnNavigatedTo(const NavigationEventArgs& e) diff --git a/src/cascadia/TerminalSettingsEditor/Launch.xaml b/src/cascadia/TerminalSettingsEditor/Launch.xaml index 15d81b6e44f..aaceea41dfa 100644 --- a/src/cascadia/TerminalSettingsEditor/Launch.xaml +++ b/src/cascadia/TerminalSettingsEditor/Launch.xaml @@ -70,7 +70,10 @@ - + +// Return Value: +// - True if OS supports default termianl. False otherwise. +bool CascadiaSettings::IsDefaultTerminalAvailable() noexcept +{ + // Cached on first use since the OS version shouldn't change while we're running. + static bool isAvailable = _isOnBuildWithDefTerm(); + return isAvailable; +} + // Method Description: // - Returns an iterable collection of all available terminals. // Arguments: diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettings.h b/src/cascadia/TerminalSettingsModel/CascadiaSettings.h index 0c42c5b7d4f..e2d88e9b04b 100644 --- a/src/cascadia/TerminalSettingsModel/CascadiaSettings.h +++ b/src/cascadia/TerminalSettingsModel/CascadiaSettings.h @@ -100,6 +100,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation void RefreshDefaultTerminals(); + static bool IsDefaultTerminalAvailable() noexcept; Windows::Foundation::Collections::IObservableVector DefaultTerminals() const noexcept; Model::DefaultTerminal CurrentDefaultTerminal() const noexcept; void CurrentDefaultTerminal(Model::DefaultTerminal terminal); diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettings.idl b/src/cascadia/TerminalSettingsModel/CascadiaSettings.idl index 786b06cbf39..6f50235413a 100644 --- a/src/cascadia/TerminalSettingsModel/CascadiaSettings.idl +++ b/src/cascadia/TerminalSettingsModel/CascadiaSettings.idl @@ -45,6 +45,7 @@ namespace Microsoft.Terminal.Settings.Model Guid GetProfileForArgs(NewTerminalArgs newTerminalArgs); void RefreshDefaultTerminals(); + static Boolean IsDefaultTerminalAvailable { get; }; Windows.Foundation.Collections.IObservableVector DefaultTerminals { get; }; DefaultTerminal CurrentDefaultTerminal; }