From 08715a6e46f7c926c77493866a7e875cc61379fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Pol=C3=A1=C5=A1ek?= Date: Tue, 27 Jan 2026 20:52:12 +0100 Subject: [PATCH] CmdPal: Allow list item context menu (#45086) ## Summary of the Pull Request This PR enables pointer-invoked context menus for list items when the list contains at least one item, including the primary item. The command bar "More" button or Ctrl+K hotkey remain unaffected - the menu is not accessible through those. image ## PR Checklist - [x] Closes: #45083 - [ ] **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 - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **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) - [ ] **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: #xxx ## Detailed Description of the Pull Request / Additional comments ## Validation Steps Performed --- .../ContextMenuViewModel.cs | 2 +- .../Microsoft.CmdPal.UI/Controls/CommandBar.xaml.cs | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/modules/cmdpal/Core/Microsoft.CmdPal.Core.ViewModels/ContextMenuViewModel.cs b/src/modules/cmdpal/Core/Microsoft.CmdPal.Core.ViewModels/ContextMenuViewModel.cs index 0263f20464..07c238ab42 100644 --- a/src/modules/cmdpal/Core/Microsoft.CmdPal.Core.ViewModels/ContextMenuViewModel.cs +++ b/src/modules/cmdpal/Core/Microsoft.CmdPal.Core.ViewModels/ContextMenuViewModel.cs @@ -53,7 +53,7 @@ public partial class ContextMenuViewModel : ObservableObject, { if (SelectedItem is not null) { - if (SelectedItem.MoreCommands.Count() > 1) + if (SelectedItem.PrimaryCommand is not null || SelectedItem.HasMoreCommands) { ContextMenuStack.Clear(); PushContextStack(SelectedItem.AllCommands); diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/CommandBar.xaml.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/CommandBar.xaml.cs index 5666381d82..133a9364f0 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/CommandBar.xaml.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI/Controls/CommandBar.xaml.cs @@ -44,13 +44,14 @@ public sealed partial class CommandBar : UserControl, public void Receive(OpenContextMenuMessage message) { - if (!ViewModel.ShouldShowContextMenu) - { - return; - } - if (message.Element is null) { + // This is invoked from the "More" button on the command bar + if (!ViewModel.ShouldShowContextMenu) + { + return; + } + _ = DispatcherQueue.TryEnqueue( () => { @@ -65,6 +66,7 @@ public sealed partial class CommandBar : UserControl, } else { + // This is invoked from a specific element _ = DispatcherQueue.TryEnqueue( () => {