diff --git a/src/cascadia/TerminalApp/Jumplist.cpp b/src/cascadia/TerminalApp/Jumplist.cpp index 53bfc8e7552..b06f5ab2c62 100644 --- a/src/cascadia/TerminalApp/Jumplist.cpp +++ b/src/cascadia/TerminalApp/Jumplist.cpp @@ -118,8 +118,13 @@ static std::wstring_view _getExePath() // - settings - The settings object to update the jumplist with. // Return Value: // - -HRESULT Jumplist::UpdateJumplist(const CascadiaSettings& settings) noexcept +winrt::fire_and_forget Jumplist::UpdateJumplist(const CascadiaSettings& settings) noexcept { + // make sure to capture the settings _before_ the co_await + const auto strongSettings = settings; + + co_await winrt::resume_background(); + try { auto jumplistInstance = winrt::create_instance(CLSID_DestinationList, CLSCTX_ALL); @@ -131,10 +136,10 @@ HRESULT Jumplist::UpdateJumplist(const CascadiaSettings& settings) noexcept // It's easier to clear the list and re-add everything. The settings aren't // updated often, and there likely isn't a huge amount of items to add. - RETURN_IF_FAILED(jumplistItems->Clear()); + THROW_IF_FAILED(jumplistItems->Clear()); // Update the list of profiles. - RETURN_IF_FAILED(_updateProfiles(jumplistItems.get(), settings.Profiles().GetView())); + THROW_IF_FAILED(_updateProfiles(jumplistItems.get(), strongSettings.Profiles().GetView())); // TODO GH#1571: Add items from the future customizable new tab dropdown as well. // This could either replace the default profiles, or be added alongside them. @@ -142,13 +147,11 @@ HRESULT Jumplist::UpdateJumplist(const CascadiaSettings& settings) noexcept // Add the items to the jumplist Task section. // The Tasks section is immutable by the user, unlike the destinations // section that can have its items pinned and removed. - RETURN_IF_FAILED(jumplistInstance->AddUserTasks(jumplistItems.get())); - - RETURN_IF_FAILED(jumplistInstance->CommitList()); + THROW_IF_FAILED(jumplistInstance->AddUserTasks(jumplistItems.get())); - return S_OK; + THROW_IF_FAILED(jumplistInstance->CommitList()); } - CATCH_RETURN(); + CATCH_LOG(); } // Method Description: diff --git a/src/cascadia/TerminalApp/Jumplist.h b/src/cascadia/TerminalApp/Jumplist.h index 3f9baa6cd3b..997c9778f82 100644 --- a/src/cascadia/TerminalApp/Jumplist.h +++ b/src/cascadia/TerminalApp/Jumplist.h @@ -18,7 +18,7 @@ struct IShellLinkW; class Jumplist { public: - static HRESULT UpdateJumplist(const winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings& settings) noexcept; + static winrt::fire_and_forget UpdateJumplist(const winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings& settings) noexcept; private: [[nodiscard]] static HRESULT _updateProfiles(IObjectCollection* jumplistItems, winrt::Windows::Foundation::Collections::IVectorView profiles) noexcept;