diff --git a/src/cascadia/TerminalSettingsEditor/Appearances.cpp b/src/cascadia/TerminalSettingsEditor/Appearances.cpp index 0cc3ed8bdf..24d0e3b780 100644 --- a/src/cascadia/TerminalSettingsEditor/Appearances.cpp +++ b/src/cascadia/TerminalSettingsEditor/Appearances.cpp @@ -1189,13 +1189,25 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void Appearances::FontFaceBox_GotFocus(const Windows::Foundation::IInspectable& sender, const RoutedEventArgs&) { + const auto box = sender.as(); _updateFontNameFilter({}); - sender.as().IsSuggestionListOpen(true); + box.IsSuggestionListOpen(true); + _fontFaceBoxHasUserInput = false; } void Appearances::FontFaceBox_LostFocus(const IInspectable& sender, const RoutedEventArgs&) { - _updateFontName(sender.as().Text()); + const auto box = sender.as(); + if (_fontFaceBoxHasUserInput) + { + _updateFontName(box.Text()); + } + else + { + // AutoSuggestBox restores its cached user query when Tab closes the suggestion list. + // Programmatic Text updates don't synchronize that cache, so restore the committed value. + box.Text(Appearance().FontFace()); + } } void Appearances::FontFaceBox_QuerySubmitted(const AutoSuggestBox& sender, const AutoSuggestBoxQuerySubmittedEventArgs& args) @@ -1237,6 +1249,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation Dispatcher().RunAsync(CoreDispatcherPriority::Normal, [weakThis{ get_weak() }, weakSender{ winrt::make_weak(sender) }, fontSpec{ std::move(fontSpec) }]() { if (const auto self{ weakThis.get() }) { + self->_fontFaceBoxHasUserInput = false; + if (const auto box{ weakSender.get() }) { box.Text(fontSpec); @@ -1255,6 +1269,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation return; } + _fontFaceBoxHasUserInput = true; + const auto fontSpec = sender.Text(); std::wstring_view filter{ fontSpec }; diff --git a/src/cascadia/TerminalSettingsEditor/Appearances.h b/src/cascadia/TerminalSettingsEditor/Appearances.h index e0e8248db9..886574971b 100644 --- a/src/cascadia/TerminalSettingsEditor/Appearances.h +++ b/src/cascadia/TerminalSettingsEditor/Appearances.h @@ -237,6 +237,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation Windows::Foundation::Collections::IObservableVector _FontAxesNames; Windows::Foundation::Collections::IObservableVector _FontFeaturesNames; std::wstring _fontNameFilter; + bool _fontFaceBoxHasUserInput = false; bool _ShowAllFonts = false; static void _ViewModelChanged(const Windows::UI::Xaml::DependencyObject& d, const Windows::UI::Xaml::DependencyPropertyChangedEventArgs& e);