mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-15 19:27:56 +01:00
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request Implements comprehensive hotkey conflict detection and resolution system for PowerToys, providing real-time conflict checking and centralized management interface. ## PR Checklist - [ ] **Closes:** #xxx - [x] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [x] **Localization:** All end-user-facing strings can be localized - [x] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [x] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: [Shortcut conflict detction dev spec](https://github.com/MicrosoftDocs/windows-dev-docs/pull/5519) ## TODO Lists - [x] Add real-time hotkey validation functionality to the hotkey dialog - [x] Immediately detect conflicts and update shortcut conflict status after applying new shortcuts - [x] Return conflict list from runner hotkey conflict detector for conflict checking. - [x] Implement the Tooltip for every shortcut control - [x] Add dialog UI for showing all the shortcut conflicts - [x] Support changing shortcut directly inside the shortcut conflict window/dialog, no need to nav to the settings page. - [x] Redesign the `ShortcutConflictDialogContentControl` to align with the spec - [x] Add navigating and changing hotkey auctionability to the `ShortcutConflictDialogContentControl` - [x] Add telemetry. Impemented in [another PR](https://github.com/shuaiyuanxx/PowerToys/pull/47) ## Shortcut Conflict Support Modules  <details> <summary>Demo videos</summary> https://github.com/user-attachments/assets/476d992c-c6ca-4bcd-a3f2-b26cc612d1b9 https://github.com/user-attachments/assets/1c1a2537-de54-4db2-bdbf-6f1908ff1ce7 https://github.com/user-attachments/assets/9c992254-fc2b-402c-beec-20fceef25e6b https://github.com/user-attachments/assets/d66abc1c-b8bf-45f8-a552-ec989dab310f </details> <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed Manually validation performed. --------- Signed-off-by: Shawn Yuan <shuaiyuan@microsoft.com> Signed-off-by: Shuai Yuan <shuai.yuan.zju@gmail.com> Co-authored-by: Niels Laute <niels.laute@live.nl>
187 lines
9.2 KiB
XML
187 lines
9.2 KiB
XML
<Page
|
|
x:Class="Microsoft.PowerToys.Settings.UI.OOBE.Views.OobeWhatsNew"
|
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:controls="using:Microsoft.PowerToys.Settings.UI.Controls"
|
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
xmlns:tk7controls="using:CommunityToolkit.WinUI.UI.Controls"
|
|
xmlns:tkcontrols="using:CommunityToolkit.WinUI.Controls"
|
|
xmlns:ui="using:CommunityToolkit.WinUI"
|
|
Loaded="Page_Loaded"
|
|
mc:Ignorable="d">
|
|
|
|
<!-- Main layout container -->
|
|
<Grid>
|
|
<!-- Main content grid -->
|
|
<Grid Margin="0,24,0,0">
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="*" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<!-- Compact Header overlay that covers both InfoBar and Title sections -->
|
|
<Border
|
|
x:Name="HeaderOverlay"
|
|
Grid.Row="0"
|
|
Grid.RowSpan="2"
|
|
Margin="0,-24,0,0"
|
|
VerticalAlignment="Top"
|
|
BorderThickness="0"
|
|
Canvas.ZIndex="1">
|
|
|
|
<Grid>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<tkcontrols:SettingsCard
|
|
x:Name="WhatsNewDataDiagnosticsInfoBar"
|
|
x:Uid="Oobe_WhatsNew_DataDiagnostics_InfoBar"
|
|
Grid.Row="0"
|
|
Padding="12,8,12,8"
|
|
Background="{ThemeResource InfoBarInformationalSeverityBackgroundBrush}"
|
|
IsTabStop="{x:Bind ShowDataDiagnosticsInfoBar, Mode=OneWay}"
|
|
Visibility="{x:Bind ShowDataDiagnosticsInfoBar, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}">
|
|
<tkcontrols:SettingsCard.HeaderIcon>
|
|
<FontIcon Foreground="{ThemeResource InfoBarInformationalSeverityIconBackground}" Glyph="" />
|
|
</tkcontrols:SettingsCard.HeaderIcon>
|
|
<tkcontrols:SettingsCard.Description>
|
|
<StackPanel>
|
|
<TextBlock x:Name="WhatsNewDataDiagnosticsInfoBarDescText">
|
|
<Hyperlink NavigateUri="https://aka.ms/powertoys-data-and-privacy-documentation">
|
|
<Run x:Uid="Oobe_WhatsNew_DataDiagnostics_InfoBar_Desc" />
|
|
</Hyperlink>
|
|
</TextBlock>
|
|
<TextBlock x:Name="WhatsNewDataDiagnosticsInfoBarDescTextYesClicked" Visibility="Collapsed">
|
|
<Run x:Uid="Oobe_WhatsNew_DataDiagnostics_Yes_Click_InfoBar_Desc" />
|
|
<Hyperlink Click="DataDiagnostics_OpenSettings_Click">
|
|
<Run x:Uid="Oobe_WhatsNew_DataDiagnostics_Yes_Click_OpenSettings_Text" />
|
|
</Hyperlink>
|
|
</TextBlock>
|
|
</StackPanel>
|
|
</tkcontrols:SettingsCard.Description>
|
|
<StackPanel Orientation="Horizontal" Spacing="8">
|
|
<Button
|
|
x:Name="DataDiagnosticsButtonYes"
|
|
x:Uid="Oobe_WhatsNew_DataDiagnostics_Button_Yes"
|
|
Click="DataDiagnostics_InfoBar_YesNo_Click"
|
|
CommandParameter="Yes" />
|
|
<HyperlinkButton
|
|
x:Name="DataDiagnosticsButtonNo"
|
|
x:Uid="Oobe_WhatsNew_DataDiagnostics_Button_No"
|
|
Click="DataDiagnostics_InfoBar_YesNo_Click"
|
|
CommandParameter="No" />
|
|
<Button
|
|
Margin="16,0,0,0"
|
|
Click="DataDiagnostics_InfoBar_Close_Click"
|
|
Content="{ui:FontIcon Glyph=,
|
|
FontSize=16}"
|
|
Style="{StaticResource SubtleButtonStyle}" />
|
|
</StackPanel>
|
|
</tkcontrols:SettingsCard>
|
|
|
|
<Grid Grid.Row="1" Margin="16,12,0,12">
|
|
<StackPanel
|
|
VerticalAlignment="Top"
|
|
Orientation="Vertical"
|
|
Spacing="4">
|
|
<TextBlock
|
|
x:Uid="Oobe_WhatsNew"
|
|
AutomationProperties.HeadingLevel="Level1"
|
|
Style="{StaticResource TitleTextBlockStyle}" />
|
|
<HyperlinkButton NavigateUri="https://github.com/microsoft/PowerToys/releases" Style="{StaticResource TextButtonStyle}">
|
|
<TextBlock x:Uid="Oobe_WhatsNew_DetailedReleaseNotesLink" TextWrapping="Wrap" />
|
|
</HyperlinkButton>
|
|
</StackPanel>
|
|
|
|
<!-- ShortcutConflictControl positioned at the right side -->
|
|
<controls:ShortcutConflictControl
|
|
Grid.RowSpan="2"
|
|
Margin="0,0,16,0"
|
|
HorizontalAlignment="Right"
|
|
VerticalAlignment="Center"
|
|
AllHotkeyConflictsData="{x:Bind AllHotkeyConflictsData, Mode=OneWay}"
|
|
Visibility="{x:Bind HasConflicts, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}" />
|
|
</Grid>
|
|
</Grid>
|
|
</Border>
|
|
|
|
<!-- Reduced spacer for the compact header overlay -->
|
|
<Grid Grid.Row="0" Height="0" />
|
|
<Grid Grid.Row="1" Height="80" />
|
|
|
|
<InfoBar
|
|
x:Name="ErrorInfoBar"
|
|
x:Uid="Oobe_WhatsNew_LoadingError"
|
|
Grid.Row="2"
|
|
VerticalAlignment="Top"
|
|
IsClosable="False"
|
|
IsTabStop="False"
|
|
Severity="Error">
|
|
<InfoBar.ActionButton>
|
|
<Button
|
|
x:Uid="RetryBtn"
|
|
HorizontalAlignment="Right"
|
|
Click="LoadReleaseNotes_Click">
|
|
<StackPanel Orientation="Horizontal" Spacing="8">
|
|
<FontIcon FontSize="16" Glyph="" />
|
|
<TextBlock x:Uid="RetryLabel" />
|
|
</StackPanel>
|
|
</Button>
|
|
</InfoBar.ActionButton>
|
|
</InfoBar>
|
|
<InfoBar
|
|
x:Name="ProxyWarningInfoBar"
|
|
x:Uid="Oobe_WhatsNew_ProxyAuthenticationWarning"
|
|
Grid.Row="2"
|
|
VerticalAlignment="Top"
|
|
IsClosable="False"
|
|
IsTabStop="False"
|
|
Severity="Warning">
|
|
<InfoBar.ActionButton>
|
|
<Button
|
|
x:Uid="RetryBtn"
|
|
HorizontalAlignment="Right"
|
|
Click="LoadReleaseNotes_Click">
|
|
<StackPanel Orientation="Horizontal" Spacing="8">
|
|
<FontIcon FontSize="16" Glyph="" />
|
|
<TextBlock x:Uid="RetryLabel" />
|
|
</StackPanel>
|
|
</Button>
|
|
</InfoBar.ActionButton>
|
|
</InfoBar>
|
|
|
|
<ScrollViewer Grid.Row="3" VerticalScrollBarVisibility="Auto">
|
|
<Grid Margin="32,16,32,24">
|
|
<ProgressRing
|
|
x:Name="LoadingProgressRing"
|
|
HorizontalAlignment="Center"
|
|
VerticalAlignment="Center"
|
|
IsIndeterminate="True"
|
|
Visibility="Visible" />
|
|
<tk7controls:MarkdownTextBlock
|
|
x:Name="ReleaseNotesMarkdown"
|
|
VerticalAlignment="Top"
|
|
Background="Transparent"
|
|
Header1FontSize="20"
|
|
Header1FontWeight="SemiBold"
|
|
Header1Margin="0,0,0,4"
|
|
Header3FontSize="16"
|
|
Header3FontWeight="SemiBold"
|
|
Header4FontSize="16"
|
|
Header4FontWeight="SemiBold"
|
|
HorizontalRuleMargin="24"
|
|
LinkClicked="ReleaseNotesMarkdown_LinkClicked"
|
|
ListMargin="-18,4,0,12"
|
|
ParagraphMargin="0,0,0,0"
|
|
TableMargin="24"
|
|
Visibility="Collapsed" />
|
|
</Grid>
|
|
</ScrollViewer>
|
|
</Grid>
|
|
</Grid>
|
|
</Page> |