diff --git a/.github/actions/spelling/allow/allow.txt b/.github/actions/spelling/allow/allow.txt index a99422e8b0b..117e643159b 100644 --- a/.github/actions/spelling/allow/allow.txt +++ b/.github/actions/spelling/allow/allow.txt @@ -71,7 +71,9 @@ sustainability sxn Tencent toolset +Uids UEFI +UIDs uiatextrange und vsdevcmd diff --git a/src/cascadia/TerminalSettingsEditor/Actions.cpp b/src/cascadia/TerminalSettingsEditor/Actions.cpp index f27d89eb27d..0685b57e18d 100644 --- a/src/cascadia/TerminalSettingsEditor/Actions.cpp +++ b/src/cascadia/TerminalSettingsEditor/Actions.cpp @@ -4,6 +4,7 @@ #include "pch.h" #include "Actions.h" #include "Actions.g.cpp" +#include "NavigateToPageArgs.g.h" #include "LibraryResources.h" #include "../TerminalSettingsModel/AllShortcutActions.h" @@ -27,7 +28,9 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void Actions::OnNavigatedTo(const NavigationEventArgs& e) { - _ViewModel = e.Parameter().as(); + const auto args = e.Parameter().as(); + _ViewModel = args.ViewModel().as(); + BringIntoViewWhenLoaded(args.ElementToFocus()); // Subscribe to the view model's FocusContainer event. // Use the KeyBindingViewModel or index provided in the event to focus the corresponding container diff --git a/src/cascadia/TerminalSettingsEditor/AddProfile.cpp b/src/cascadia/TerminalSettingsEditor/AddProfile.cpp index 03864e855e0..db14375ff37 100644 --- a/src/cascadia/TerminalSettingsEditor/AddProfile.cpp +++ b/src/cascadia/TerminalSettingsEditor/AddProfile.cpp @@ -29,6 +29,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void AddProfile::OnNavigatedTo(const NavigationEventArgs& e) { _State = e.Parameter().as(); + BringIntoViewWhenLoaded(_State.ElementToFocus()); TraceLoggingWrite( g_hTerminalSettingsEditorProvider, diff --git a/src/cascadia/TerminalSettingsEditor/AddProfile.h b/src/cascadia/TerminalSettingsEditor/AddProfile.h index 7bfa0654f20..f4f7501d3cb 100644 --- a/src/cascadia/TerminalSettingsEditor/AddProfile.h +++ b/src/cascadia/TerminalSettingsEditor/AddProfile.h @@ -26,8 +26,9 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation struct AddProfilePageNavigationState : AddProfilePageNavigationStateT { public: - AddProfilePageNavigationState(const Model::CascadiaSettings& settings) : - _Settings{ settings } {} + AddProfilePageNavigationState(const Model::CascadiaSettings& settings, const hstring& elementToFocus = {}) : + _Settings{ settings }, + _ElementToFocus{ elementToFocus } {} void RequestAddNew() { @@ -42,6 +43,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation til::event AddNew; WINRT_PROPERTY(Model::CascadiaSettings, Settings, nullptr); + WINRT_PROPERTY(hstring, ElementToFocus); }; struct AddProfile : public HasScrollViewer, AddProfileT diff --git a/src/cascadia/TerminalSettingsEditor/AddProfile.idl b/src/cascadia/TerminalSettingsEditor/AddProfile.idl index 480c69bcbe1..c8d7bd85cdb 100644 --- a/src/cascadia/TerminalSettingsEditor/AddProfile.idl +++ b/src/cascadia/TerminalSettingsEditor/AddProfile.idl @@ -8,6 +8,8 @@ namespace Microsoft.Terminal.Settings.Editor runtimeclass AddProfilePageNavigationState { Microsoft.Terminal.Settings.Model.CascadiaSettings Settings; + String ElementToFocus { get; }; + void RequestAddNew(); void RequestDuplicate(Guid profile); event AddNewArgs AddNew; diff --git a/src/cascadia/TerminalSettingsEditor/AddProfile.xaml b/src/cascadia/TerminalSettingsEditor/AddProfile.xaml index 1db1bbd4d3b..633dd20875f 100644 --- a/src/cascadia/TerminalSettingsEditor/AddProfile.xaml +++ b/src/cascadia/TerminalSettingsEditor/AddProfile.xaml @@ -37,7 +37,8 @@ - + Loaded(winrt::auto_revoke, [weakThis{ get_weak() }, elementToFocus](auto&&, auto&&) { + if (const auto strongThis = weakThis.get()) + { + if (const auto element = strongThis->FindName(elementToFocus)) + { + element.as().StartBringIntoView(); + } + } + }); + } + IObservableVector Appearances::FilteredFontList() { if (!_filteredFonts) diff --git a/src/cascadia/TerminalSettingsEditor/Appearances.h b/src/cascadia/TerminalSettingsEditor/Appearances.h index e8b1cac6c3c..6c5647cd445 100644 --- a/src/cascadia/TerminalSettingsEditor/Appearances.h +++ b/src/cascadia/TerminalSettingsEditor/Appearances.h @@ -188,6 +188,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation struct Appearances : AppearancesT { Appearances(); + void BringIntoViewWhenLoaded(hstring elementToFocus); // CursorShape visibility logic bool IsVintageCursor() const; @@ -210,6 +211,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation bool IsCustomFontWeight(); til::property_changed_event PropertyChanged; + winrt::Windows::UI::Xaml::FrameworkElement::Loaded_revoker _loadedRevoker; WINRT_PROPERTY(Windows::Foundation::Collections::IObservableVector, FontWeightList); diff --git a/src/cascadia/TerminalSettingsEditor/Appearances.xaml b/src/cascadia/TerminalSettingsEditor/Appearances.xaml index 23e117a8ae4..435139ff67f 100644 --- a/src/cascadia/TerminalSettingsEditor/Appearances.xaml +++ b/src/cascadia/TerminalSettingsEditor/Appearances.xaml @@ -72,7 +72,8 @@ Style="{StaticResource TextBlockSubHeaderStyle}" /> - - - - - - - - - - @@ -439,7 +449,8 @@ - @@ -448,7 +459,8 @@ - @@ -457,7 +469,8 @@ - @@ -475,7 +488,8 @@ Style="{StaticResource TextBlockSubHeaderStyle}" /> - @@ -487,7 +501,8 @@ - - - - - diff --git a/src/cascadia/TerminalSettingsEditor/ColorSchemes.cpp b/src/cascadia/TerminalSettingsEditor/ColorSchemes.cpp index 899cc5f8263..0a046f6939b 100644 --- a/src/cascadia/TerminalSettingsEditor/ColorSchemes.cpp +++ b/src/cascadia/TerminalSettingsEditor/ColorSchemes.cpp @@ -4,6 +4,7 @@ #include "pch.h" #include "ColorSchemes.h" #include "ColorTableEntry.g.cpp" +#include "NavigateToPageArgs.g.h" #include "ColorSchemes.g.cpp" #include @@ -35,9 +36,12 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void ColorSchemes::OnNavigatedTo(const NavigationEventArgs& e) { - _ViewModel = e.Parameter().as(); + const auto args = e.Parameter().as(); + _ViewModel = args.ViewModel().as(); _ViewModel.CurrentPage(ColorSchemesSubPage::Base); + BringIntoViewWhenLoaded(args.ElementToFocus()); + _layoutUpdatedRevoker = LayoutUpdated(winrt::auto_revoke, [this](auto /*s*/, auto /*e*/) { // Only let this succeed once. _layoutUpdatedRevoker.revoke(); diff --git a/src/cascadia/TerminalSettingsEditor/ColorSchemesPageViewModel.h b/src/cascadia/TerminalSettingsEditor/ColorSchemesPageViewModel.h index e559432b78d..dd60f8de20e 100644 --- a/src/cascadia/TerminalSettingsEditor/ColorSchemesPageViewModel.h +++ b/src/cascadia/TerminalSettingsEditor/ColorSchemesPageViewModel.h @@ -37,6 +37,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation WINRT_OBSERVABLE_PROPERTY(ColorSchemesSubPage, CurrentPage, _propertyChangedHandlers, ColorSchemesSubPage::Base); WINRT_OBSERVABLE_PROPERTY(Windows::Foundation::Collections::IObservableVector, AllColorSchemes, _propertyChangedHandlers, nullptr); + WINRT_PROPERTY(hstring, ElementToFocus); private: Editor::ColorSchemeViewModel _CurrentScheme{ nullptr }; diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.cpp b/src/cascadia/TerminalSettingsEditor/Compatibility.cpp index 9fa7b81ecfb..81e5bc66e6e 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.cpp +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.cpp @@ -6,6 +6,7 @@ #include "EnumEntry.h" #include "Compatibility.g.cpp" #include "CompatibilityViewModel.g.cpp" +#include "NavigateToPageArgs.g.h" using namespace winrt::Windows::UI::Xaml::Navigation; using namespace winrt::Microsoft::Terminal::Settings::Model; @@ -54,7 +55,9 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void Compatibility::OnNavigatedTo(const NavigationEventArgs& e) { - _ViewModel = e.Parameter().as(); + const auto args = e.Parameter().as(); + _ViewModel = args.ViewModel().as(); + BringIntoViewWhenLoaded(args.ElementToFocus()); TraceLoggingWrite( g_hTerminalSettingsEditorProvider, diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml index cb666963120..54354f3ed40 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml @@ -26,13 +26,15 @@ - + - + - - + - - + diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Base.cpp b/src/cascadia/TerminalSettingsEditor/Profiles_Base.cpp index 774ecbb34de..cce287ebe55 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Base.cpp +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Base.cpp @@ -30,9 +30,10 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void Profiles_Base::OnNavigatedTo(const NavigationEventArgs& e) { - const auto args = e.Parameter().as(); - _Profile = args.Profile(); + const auto args = e.Parameter().as(); + _Profile = args.ViewModel().as(); _windowRoot = args.WindowRoot(); + BringIntoViewWhenLoaded(args.ElementToFocus()); // Check the use parent directory box if the starting directory is empty if (_Profile.StartingDirectory().empty()) diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Base.xaml b/src/cascadia/TerminalSettingsEditor/Profiles_Base.xaml index 813cada4c54..0c10bf11b86 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Base.xaml +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Base.xaml @@ -40,7 +40,8 @@ Additionally, the JSON stubs generated by auto-generated profiles come with a name, so the name will always be overridden. --> - @@ -49,7 +50,7 @@ - - - - - @@ -234,7 +238,8 @@ - diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Base_Orphaned.cpp b/src/cascadia/TerminalSettingsEditor/Profiles_Base_Orphaned.cpp index dc1de90cb03..560c87655ce 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Base_Orphaned.cpp +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Base_Orphaned.cpp @@ -23,8 +23,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void Profiles_Base_Orphaned::OnNavigatedTo(const NavigationEventArgs& e) { - const auto args = e.Parameter().as(); - _Profile = args.Profile(); + const auto args = e.Parameter().as(); + _Profile = args.ViewModel().as(); _layoutUpdatedRevoker = LayoutUpdated(winrt::auto_revoke, [this](auto /*s*/, auto /*e*/) { // This event fires every time the layout changes, but it is always the last one to fire diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Base_Orphaned.xaml b/src/cascadia/TerminalSettingsEditor/Profiles_Base_Orphaned.xaml index 4259435f03c..6f928b0cb73 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Base_Orphaned.xaml +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Base_Orphaned.xaml @@ -23,7 +23,8 @@ - +