From e7de5c7b8d56fdf57d950efb4912e92251be5a91 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 6 Nov 2025 16:53:32 +0800 Subject: [PATCH] Make update notification InfoBar clickable in Flyout (#42064) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Resolves #38854 by making the "Update available" InfoBar in the tray icon flyout clickable, providing direct navigation to the General settings page where users can manage updates. ## Problem When PowerToys has an available update, users experience unnecessary navigation friction: 1. Click PowerToys tray icon → flyout opens with "Update available" InfoBar 2. InfoBar is not clickable, only the settings wheel is interactive 3. Click settings wheel → opens Dashboard page (not where updates are managed) 4. Navigate to General page → finally access update controls Users requested making the "Update available" text itself a hyperlink for direct access to update functionality. ## Solution Made the InfoBar interactive by adding a `Tapped` event handler that: - Hides the flyout (consistent with other flyout actions) - Opens Settings window directly to the General page using `App.OpenSettingsWindow(typeof(GeneralPage))` ## Changes **Files Modified:** - `src/settings-ui/Settings.UI/SettingsXAML/Flyout/LaunchPage.xaml`: Added `Tapped="UpdateInfoBar_Tapped"` event - `src/settings-ui/Settings.UI/SettingsXAML/Flyout/LaunchPage.xaml.cs`: Added event handler and navigation logic ## User Experience **Before:** Tray Icon → Flyout → Settings Wheel → Dashboard → Navigate to General → Update Controls **After:** Tray Icon → Flyout → **Click "Update available"** → General Page → Update Controls The InfoBar now behaves as a clickable hyperlink as requested, while preserving all existing functionality. Users can still use the settings wheel if preferred, but now have a more direct path to update management. ## Testing The implementation follows existing patterns in the codebase and uses established APIs. The InfoBar only appears when updates are in `ReadyToInstall` or `ReadyToDownload` states, ensuring the navigation is contextually appropriate. > [!WARNING] > >
> Firewall rules blocked me from connecting to one or more addresses (expand for details) > > #### I tried to connect to the following addresses, but was blocked by firewall rules: > > - `i1qvsblobprodcus353.vsblob.vsassets.io` > - Triggering command: `dotnet build` (dns block) > > If you need me to access, download, or install something from one of these locations, you can either: > > - Configure [Actions setup steps](https://gh.io/copilot/actions-setup-steps) to set up my environment, which run before the firewall is enabled > - Add the appropriate URLs or hosts to the custom allowlist in this repository's [Copilot coding agent settings](https://github.com/microsoft/PowerToys/settings/copilot/coding_agent) (admins only) > >
Original prompt > > ---- > > *This section details on the original issue you should resolve* > > Taskbar icon should provide link directly to update page > ### Description of the new feature / enhancement > > Right now when there is an update the following message appears when you click on the PT icon in the taskbar: > > ![Image](https://github.com/user-attachments/assets/18641e1c-d80b-4f7e-b206-8c9a36f2de36) > > When you click on the settings wheel you go to the dashboard page: > > ![Image](https://github.com/user-attachments/assets/e951b988-79ab-48b3-8714-a26999223153) > > Then you need to click on the Learn more button before you finally get to the page where you can install the update: > > ![Image](https://github.com/user-attachments/assets/914c9c00-a642-40da-bfb5-439c1fd930c0) > > Can't you make the **_Update available_** a hyperlink or add another button that would link directly to the General page (or wherever the update button is) so we can quickly install the update instead of going a roundabout way every time? > > ![Image](https://github.com/user-attachments/assets/5c065eed-84ad-47be-9432-607155065a17) > > ### Scenario when this would be used? > > When there is an update. It's a usability annoyance more than anything. > > ### Supporting information > > _No response_ > > ## Comments on the Issue (you are @copilot in this section) > > > >
Fixes microsoft/PowerToys#38854 --- ✨ Let Copilot coding agent [set things up for you](https://github.com/microsoft/PowerToys/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: niels9001 <9866362+niels9001@users.noreply.github.com> Co-authored-by: Niels Laute --- .../Settings.UI/SettingsXAML/Flyout/LaunchPage.xaml | 4 ++-- .../Settings.UI/SettingsXAML/Flyout/LaunchPage.xaml.cs | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Flyout/LaunchPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Flyout/LaunchPage.xaml index 07b6a00c21..8dea006b08 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Flyout/LaunchPage.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/Flyout/LaunchPage.xaml @@ -111,7 +111,8 @@ x:Uid="UpdateAvailableInfoBar" IsClosable="False" IsOpen="{x:Bind ViewModel.IsUpdateAvailable, Mode=OneWay}" - Severity="Success" /> + Severity="Success" + Tapped="UpdateInfoBar_Tapped" /> diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Flyout/LaunchPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Flyout/LaunchPage.xaml.cs index aad7dcf215..51219309e0 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Flyout/LaunchPage.xaml.cs +++ b/src/settings-ui/Settings.UI/SettingsXAML/Flyout/LaunchPage.xaml.cs @@ -10,6 +10,7 @@ using Microsoft.PowerToys.Settings.UI.Controls; using Microsoft.PowerToys.Settings.UI.Library; using Microsoft.PowerToys.Settings.UI.Library.Telemetry.Events; using Microsoft.PowerToys.Settings.UI.ViewModels; +using Microsoft.PowerToys.Settings.UI.Views; using Microsoft.PowerToys.Telemetry; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; @@ -183,5 +184,14 @@ namespace Microsoft.PowerToys.Settings.UI.Flyout // Closing manually the flyout since no window will steal the focus App.GetFlyoutWindow()?.Hide(); } + + private void UpdateInfoBar_Tapped(object sender, Microsoft.UI.Xaml.Input.TappedRoutedEventArgs e) + { + // Hide the flyout before opening settings window + App.GetFlyoutWindow()?.Hide(); + + // Open Settings window directly to General page where update controls are located + App.OpenSettingsWindow(typeof(GeneralPage)); + } } }