From 25362e8b95faa5a5114b93efbdaa155c052db926 Mon Sep 17 00:00:00 2001 From: Mike Griese Date: Wed, 14 Apr 2021 07:17:08 -0500 Subject: [PATCH 1/4] the whole thing --- .../Resources/en-US/Resources.resw | 63 +++++++++-------- src/cascadia/TerminalApp/TerminalPage.cpp | 70 ++++++++++++++++++- src/cascadia/TerminalApp/TerminalPage.h | 5 +- src/cascadia/TerminalApp/TerminalPage.idl | 1 + src/cascadia/TerminalApp/TerminalPage.xaml | 6 ++ 5 files changed, 113 insertions(+), 32 deletions(-) diff --git a/src/cascadia/TerminalApp/Resources/en-US/Resources.resw b/src/cascadia/TerminalApp/Resources/en-US/Resources.resw index e947785730a..f45f92d8b12 100644 --- a/src/cascadia/TerminalApp/Resources/en-US/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/en-US/Resources.resw @@ -1,17 +1,17 @@  - @@ -618,10 +618,17 @@ Another window with that name already exists + + Successfully renamed window + + + Successfully renamed window to "{}" + {} will be replaced by the new name assigned by the user + Maximize Restore Down - \ No newline at end of file + diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index 20dec5e9227..d6828238173 100644 --- a/src/cascadia/TerminalApp/TerminalPage.cpp +++ b/src/cascadia/TerminalApp/TerminalPage.cpp @@ -2601,15 +2601,65 @@ namespace winrt::TerminalApp::implementation { return _WindowName; } - void TerminalPage::WindowName(const winrt::hstring& value) + + winrt::fire_and_forget TerminalPage::WindowName(const winrt::hstring& value) { - if (_WindowName != value) + const bool changed = _WindowName != value; + if (changed) { _WindowName = value; - _PropertyChangedHandlers(*this, WUX::Data::PropertyChangedEventArgs{ L"WindowNameForDisplay" }); + } + auto weakThis{ get_weak() }; + // On the foreground thread, raise property changed notifications, and + // display the success toast. + co_await resume_foreground(Dispatcher()); + if (auto page{ weakThis.get() }) + { + if (changed) + { + page->_PropertyChangedHandlers(*this, WUX::Data::PropertyChangedEventArgs{ L"WindowNameForDisplay" }); + page->_PropertyChangedHandlers(*this, WUX::Data::PropertyChangedEventArgs{ L"RenameSucceededText" }); + + // DON'T display the confirmation if this is the name we were + // given on startup! + if (_page->_startupState == StartupState::Initialized) + { + page->_DisplayRenameSuccessToast(); + } + } } } + // Method Description: + // - Display the rename succeeded toast. If this is the first time we're + // being called, load the TeachingTip manually and wire it up to the Toast + // object. + // - This should be called on the UI thread. + // Arguments: + // - + // Return Value: + // - + void TerminalPage::_DisplayRenameSuccessToast() + { + // If we haven't ever loaded the TeachingTip, then do so now and + // create the toast for it. + if (_windowRenameSucceededToast == nullptr) + { + if (MUX::Controls::TeachingTip tip{ FindName(L"RenameSucceededToast").try_as() }) + { + _windowRenameSucceededToast = std::make_shared(tip); + // Make sure to use the weak ref when setting up this + // callback. + tip.Closed({ get_weak(), &TerminalPage::_FocusActiveControl }); + } + } + _UpdateTeachingTipTheme(RenameSucceededToast().try_as()); + + if (_windowRenameSucceededToast != nullptr) + { + _windowRenameSucceededToast->Open(); + } + } // WindowId is a otherwise generic WINRT_OBSERVABLE_PROPERTY, but it needs // to raise a PropertyChanged for WindowIdForDisplay, instead of // WindowId. @@ -2652,6 +2702,20 @@ namespace winrt::TerminalApp::implementation _WindowName; } + // Method Description: + // - Returns a string of text like "Successfully renamed window to + // "{WindowNameForDisplay()}"". This is used for the RenameSucceededToast + // when a rename is successful. + // Arguments: + // - + // Return Value: + // - a string for displaying the name of the window. + winrt::hstring TerminalPage::RenameSucceededText() const noexcept + { + return winrt::hstring{ fmt::format(std::wstring_view(RS_(L"RenameSucceededText")), + std::wstring_view(WindowNameForDisplay())) }; + } + // Method Description: // - Called when an attempt to rename the window has failed. This will open // the toast displaying a message to the user that the attempt to rename diff --git a/src/cascadia/TerminalApp/TerminalPage.h b/src/cascadia/TerminalApp/TerminalPage.h index 1a7beba3b41..a8401e209ca 100644 --- a/src/cascadia/TerminalApp/TerminalPage.h +++ b/src/cascadia/TerminalApp/TerminalPage.h @@ -102,11 +102,12 @@ namespace winrt::TerminalApp::implementation // WINRT_OBSERVABLE_PROPERTY's, but we want them to raise // WindowNameForDisplay and WindowIdForDisplay instead winrt::hstring WindowName() const noexcept; - void WindowName(const winrt::hstring& value); + winrt::fire_and_forget WindowName(const winrt::hstring& value); uint64_t WindowId() const noexcept; void WindowId(const uint64_t& value); winrt::hstring WindowIdForDisplay() const noexcept; winrt::hstring WindowNameForDisplay() const noexcept; + winrt::hstring RenameSucceededText() const noexcept; WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); @@ -175,6 +176,7 @@ namespace winrt::TerminalApp::implementation std::shared_ptr _windowIdToast{ nullptr }; std::shared_ptr _windowRenameFailedToast{ nullptr }; + std::shared_ptr _windowRenameSucceededToast{ nullptr }; void _ShowAboutDialog(); winrt::Windows::Foundation::IAsyncOperation _ShowCloseWarningDialog(); @@ -327,6 +329,7 @@ namespace winrt::TerminalApp::implementation void _WindowRenamerActionClick(const IInspectable& sender, const IInspectable& eventArgs); void _RequestWindowRename(const winrt::hstring& newName); void _WindowRenamerKeyUp(const IInspectable& sender, winrt::Windows::UI::Xaml::Input::KeyRoutedEventArgs const& e); + void _DisplayRenameSuccessToast(); void _UpdateTeachingTipTheme(winrt::Windows::UI::Xaml::FrameworkElement element); diff --git a/src/cascadia/TerminalApp/TerminalPage.idl b/src/cascadia/TerminalApp/TerminalPage.idl index bf665d91bb2..334d3cd54fc 100644 --- a/src/cascadia/TerminalApp/TerminalPage.idl +++ b/src/cascadia/TerminalApp/TerminalPage.idl @@ -32,6 +32,7 @@ namespace TerminalApp UInt64 WindowId; String WindowNameForDisplay { get; }; String WindowIdForDisplay { get; }; + String RenameSucceededText { get; }; void RenameFailed(); // We cannot use the default XAML APIs because we want to make sure diff --git a/src/cascadia/TerminalApp/TerminalPage.xaml b/src/cascadia/TerminalApp/TerminalPage.xaml index 35ac1807db6..1288cbd7804 100644 --- a/src/cascadia/TerminalApp/TerminalPage.xaml +++ b/src/cascadia/TerminalApp/TerminalPage.xaml @@ -133,6 +133,12 @@ x:Load="False" IsLightDismissEnabled="True" /> + + Date: Wed, 14 Apr 2021 10:59:46 -0500 Subject: [PATCH 2/4] derp --- src/cascadia/TerminalApp/TerminalPage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index d6828238173..4b14f331a47 100644 --- a/src/cascadia/TerminalApp/TerminalPage.cpp +++ b/src/cascadia/TerminalApp/TerminalPage.cpp @@ -2622,7 +2622,7 @@ namespace winrt::TerminalApp::implementation // DON'T display the confirmation if this is the name we were // given on startup! - if (_page->_startupState == StartupState::Initialized) + if (page->_startupState == StartupState::Initialized) { page->_DisplayRenameSuccessToast(); } From 1239835f0f36b215a37c9b745c8b4119c1da2c1a Mon Sep 17 00:00:00 2001 From: Mike Griese Date: Wed, 21 Apr 2021 06:35:32 -0500 Subject: [PATCH 3/4] remove the specific success toast. That's unnecessary. --- .../Resources/en-US/Resources.resw | 7 --- src/cascadia/TerminalApp/TerminalPage.cpp | 47 +------------------ src/cascadia/TerminalApp/TerminalPage.h | 2 - src/cascadia/TerminalApp/TerminalPage.idl | 1 - src/cascadia/TerminalApp/TerminalPage.xaml | 6 --- 5 files changed, 2 insertions(+), 61 deletions(-) diff --git a/src/cascadia/TerminalApp/Resources/en-US/Resources.resw b/src/cascadia/TerminalApp/Resources/en-US/Resources.resw index f45f92d8b12..addde462c91 100644 --- a/src/cascadia/TerminalApp/Resources/en-US/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/en-US/Resources.resw @@ -618,13 +618,6 @@ Another window with that name already exists - - Successfully renamed window - - - Successfully renamed window to "{}" - {} will be replaced by the new name assigned by the user - Maximize diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index 7e15e6116ad..95c5350d344 100644 --- a/src/cascadia/TerminalApp/TerminalPage.cpp +++ b/src/cascadia/TerminalApp/TerminalPage.cpp @@ -2622,6 +2622,7 @@ namespace winrt::TerminalApp::implementation { if (changed) { + page->_PropertyChangedHandlers(*this, WUX::Data::PropertyChangedEventArgs{ L"WindowName" }); page->_PropertyChangedHandlers(*this, WUX::Data::PropertyChangedEventArgs{ L"WindowNameForDisplay" }); page->_PropertyChangedHandlers(*this, WUX::Data::PropertyChangedEventArgs{ L"RenameSucceededText" }); @@ -2629,42 +2630,12 @@ namespace winrt::TerminalApp::implementation // given on startup! if (page->_startupState == StartupState::Initialized) { - page->_DisplayRenameSuccessToast(); + page->IdentifyWindow(); } } } } - // Method Description: - // - Display the rename succeeded toast. If this is the first time we're - // being called, load the TeachingTip manually and wire it up to the Toast - // object. - // - This should be called on the UI thread. - // Arguments: - // - - // Return Value: - // - - void TerminalPage::_DisplayRenameSuccessToast() - { - // If we haven't ever loaded the TeachingTip, then do so now and - // create the toast for it. - if (_windowRenameSucceededToast == nullptr) - { - if (MUX::Controls::TeachingTip tip{ FindName(L"RenameSucceededToast").try_as() }) - { - _windowRenameSucceededToast = std::make_shared(tip); - // Make sure to use the weak ref when setting up this - // callback. - tip.Closed({ get_weak(), &TerminalPage::_FocusActiveControl }); - } - } - _UpdateTeachingTipTheme(RenameSucceededToast().try_as()); - - if (_windowRenameSucceededToast != nullptr) - { - _windowRenameSucceededToast->Open(); - } - } // WindowId is a otherwise generic WINRT_OBSERVABLE_PROPERTY, but it needs // to raise a PropertyChanged for WindowIdForDisplay, instead of // WindowId. @@ -2707,20 +2678,6 @@ namespace winrt::TerminalApp::implementation _WindowName; } - // Method Description: - // - Returns a string of text like "Successfully renamed window to - // "{WindowNameForDisplay()}"". This is used for the RenameSucceededToast - // when a rename is successful. - // Arguments: - // - - // Return Value: - // - a string for displaying the name of the window. - winrt::hstring TerminalPage::RenameSucceededText() const noexcept - { - return winrt::hstring{ fmt::format(std::wstring_view(RS_(L"RenameSucceededText")), - std::wstring_view(WindowNameForDisplay())) }; - } - // Method Description: // - Called when an attempt to rename the window has failed. This will open // the toast displaying a message to the user that the attempt to rename diff --git a/src/cascadia/TerminalApp/TerminalPage.h b/src/cascadia/TerminalApp/TerminalPage.h index a8401e209ca..8cc9912d94d 100644 --- a/src/cascadia/TerminalApp/TerminalPage.h +++ b/src/cascadia/TerminalApp/TerminalPage.h @@ -107,7 +107,6 @@ namespace winrt::TerminalApp::implementation void WindowId(const uint64_t& value); winrt::hstring WindowIdForDisplay() const noexcept; winrt::hstring WindowNameForDisplay() const noexcept; - winrt::hstring RenameSucceededText() const noexcept; WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); @@ -176,7 +175,6 @@ namespace winrt::TerminalApp::implementation std::shared_ptr _windowIdToast{ nullptr }; std::shared_ptr _windowRenameFailedToast{ nullptr }; - std::shared_ptr _windowRenameSucceededToast{ nullptr }; void _ShowAboutDialog(); winrt::Windows::Foundation::IAsyncOperation _ShowCloseWarningDialog(); diff --git a/src/cascadia/TerminalApp/TerminalPage.idl b/src/cascadia/TerminalApp/TerminalPage.idl index 334d3cd54fc..bf665d91bb2 100644 --- a/src/cascadia/TerminalApp/TerminalPage.idl +++ b/src/cascadia/TerminalApp/TerminalPage.idl @@ -32,7 +32,6 @@ namespace TerminalApp UInt64 WindowId; String WindowNameForDisplay { get; }; String WindowIdForDisplay { get; }; - String RenameSucceededText { get; }; void RenameFailed(); // We cannot use the default XAML APIs because we want to make sure diff --git a/src/cascadia/TerminalApp/TerminalPage.xaml b/src/cascadia/TerminalApp/TerminalPage.xaml index 1288cbd7804..35ac1807db6 100644 --- a/src/cascadia/TerminalApp/TerminalPage.xaml +++ b/src/cascadia/TerminalApp/TerminalPage.xaml @@ -133,12 +133,6 @@ x:Load="False" IsLightDismissEnabled="True" /> - - Date: Thu, 22 Apr 2021 15:54:39 -0500 Subject: [PATCH 4/4] Address Carlos' concerns --- .../Resources/en-US/Resources.resw | 56 +++++++++---------- src/cascadia/TerminalApp/TerminalPage.cpp | 1 - src/cascadia/TerminalApp/TerminalPage.h | 1 - 3 files changed, 28 insertions(+), 30 deletions(-) diff --git a/src/cascadia/TerminalApp/Resources/en-US/Resources.resw b/src/cascadia/TerminalApp/Resources/en-US/Resources.resw index addde462c91..e947785730a 100644 --- a/src/cascadia/TerminalApp/Resources/en-US/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/en-US/Resources.resw @@ -1,17 +1,17 @@  - @@ -624,4 +624,4 @@ Restore Down - + \ No newline at end of file diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index 95c5350d344..081840c3fa3 100644 --- a/src/cascadia/TerminalApp/TerminalPage.cpp +++ b/src/cascadia/TerminalApp/TerminalPage.cpp @@ -2624,7 +2624,6 @@ namespace winrt::TerminalApp::implementation { page->_PropertyChangedHandlers(*this, WUX::Data::PropertyChangedEventArgs{ L"WindowName" }); page->_PropertyChangedHandlers(*this, WUX::Data::PropertyChangedEventArgs{ L"WindowNameForDisplay" }); - page->_PropertyChangedHandlers(*this, WUX::Data::PropertyChangedEventArgs{ L"RenameSucceededText" }); // DON'T display the confirmation if this is the name we were // given on startup! diff --git a/src/cascadia/TerminalApp/TerminalPage.h b/src/cascadia/TerminalApp/TerminalPage.h index 8cc9912d94d..9925c838067 100644 --- a/src/cascadia/TerminalApp/TerminalPage.h +++ b/src/cascadia/TerminalApp/TerminalPage.h @@ -327,7 +327,6 @@ namespace winrt::TerminalApp::implementation void _WindowRenamerActionClick(const IInspectable& sender, const IInspectable& eventArgs); void _RequestWindowRename(const winrt::hstring& newName); void _WindowRenamerKeyUp(const IInspectable& sender, winrt::Windows::UI::Xaml::Input::KeyRoutedEventArgs const& e); - void _DisplayRenameSuccessToast(); void _UpdateTeachingTipTheme(winrt::Windows::UI::Xaml::FrameworkElement element);