mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 10:46:33 +02:00
CmdPal: Add a button to toggle the visibility of the dev ribbon (#45379)
## Summary of the Pull Request This PR adds an option to toggle visibility of the dev ribbon. The state is only temporary and does not persist across app runs -- that is intentional to prevent the dev from turning it off permanently. <img width="648" height="519" alt="image" src="https://github.com/user-attachments/assets/c5b348f6-8f3c-4ec2-a250-e051fd003e09" /> <img width="1313" height="751" alt="image" src="https://github.com/user-attachments/assets/89928e30-b0dc-4a14-b5fb-bf68357a145b" /> <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #45371 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **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 <!-- 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
This commit is contained in:
@@ -206,9 +206,10 @@
|
||||
|
||||
<!-- More section -->
|
||||
<TextBlock Style="{ThemeResource SettingsSectionHeaderTextBlockStyle}" Text="More" />
|
||||
<Border>
|
||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
||||
<Button Command="{x:Bind ViewModel.OpenInternalToolsCommand}" Content="Open internal tools" />
|
||||
</Border>
|
||||
<Button Command="{x:Bind ViewModel.ToggleDevRibbonVisibilityCommand}" Content="Hide me" />
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Footer -->
|
||||
|
||||
@@ -54,6 +54,7 @@ public sealed partial class MainWindow : WindowEx,
|
||||
IRecipient<ErrorOccurredMessage>,
|
||||
IRecipient<DragStartedMessage>,
|
||||
IRecipient<DragCompletedMessage>,
|
||||
IRecipient<ToggleDevRibbonMessage>,
|
||||
IDisposable,
|
||||
IHostWindow
|
||||
{
|
||||
@@ -91,6 +92,8 @@ public sealed partial class MainWindow : WindowEx,
|
||||
|
||||
private bool _preventHideWhenDeactivated;
|
||||
|
||||
private DevRibbon? _devRibbon;
|
||||
|
||||
private MainWindowViewModel ViewModel { get; }
|
||||
|
||||
public bool IsVisibleToUser { get; private set; } = true;
|
||||
@@ -139,6 +142,7 @@ public sealed partial class MainWindow : WindowEx,
|
||||
WeakReferenceMessenger.Default.Register<ErrorOccurredMessage>(this);
|
||||
WeakReferenceMessenger.Default.Register<DragStartedMessage>(this);
|
||||
WeakReferenceMessenger.Default.Register<DragCompletedMessage>(this);
|
||||
WeakReferenceMessenger.Default.Register<ToggleDevRibbonMessage>(this);
|
||||
|
||||
// Hide our titlebar.
|
||||
// We need to both ExtendsContentIntoTitleBar, then set the height to Collapsed
|
||||
@@ -212,7 +216,8 @@ public sealed partial class MainWindow : WindowEx,
|
||||
// Add dev ribbon if enabled
|
||||
if (!BuildInfo.IsCiBuild)
|
||||
{
|
||||
RootElement.Children.Add(new DevRibbon { Margin = new Thickness(-1, -1, 120, -1) });
|
||||
_devRibbon = new DevRibbon { Margin = new Thickness(-1, -1, 120, -1) };
|
||||
RootElement.Children.Add(_devRibbon);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1134,6 +1139,11 @@ public sealed partial class MainWindow : WindowEx,
|
||||
DisposeAcrylic();
|
||||
}
|
||||
|
||||
public void Receive(ToggleDevRibbonMessage message)
|
||||
{
|
||||
_devRibbon?.Visibility = _devRibbon.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
|
||||
}
|
||||
|
||||
public void Receive(DragStartedMessage message)
|
||||
{
|
||||
_preventHideWhenDeactivated = true;
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
// Copyright (c) Microsoft Corporation
|
||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
namespace Microsoft.CmdPal.UI.Messages;
|
||||
|
||||
public record ToggleDevRibbonMessage;
|
||||
@@ -57,6 +57,13 @@
|
||||
HeaderIcon="{ui:FontIcon Glyph=}">
|
||||
<Button Click="OpenCurrentLogCardClicked" Content="Open log" />
|
||||
</controls:SettingsCard>
|
||||
<controls:SettingsCard
|
||||
x:Name="ToggleDevRibbonVisibilitySettingsCard"
|
||||
Description="This is only temporary and state is not saved"
|
||||
Header="Toggle dev ribbon visibility"
|
||||
HeaderIcon="{ui:FontIcon Glyph=}">
|
||||
<Button Click="ToggleDevRibbonClicked" Content="Toggle dev ribbon" />
|
||||
</controls:SettingsCard>
|
||||
|
||||
<!-- Data Section -->
|
||||
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}" Text="Data and Files" />
|
||||
|
||||
@@ -2,8 +2,11 @@
|
||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using CommunityToolkit.Mvvm.Messaging;
|
||||
using ManagedCommon;
|
||||
using Microsoft.CmdPal.Core.Common.Services;
|
||||
using Microsoft.CmdPal.UI.Messages;
|
||||
using Microsoft.CommandPalette.Extensions.Toolkit;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.UI.Xaml;
|
||||
using Windows.System;
|
||||
@@ -94,4 +97,9 @@ public sealed partial class InternalPage : Page
|
||||
Logger.LogError("Failed to open directory in Explorer", ex);
|
||||
}
|
||||
}
|
||||
|
||||
private void ToggleDevRibbonClicked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
WeakReferenceMessenger.Default.Send(new ToggleDevRibbonMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,6 +107,12 @@ internal sealed partial class DevRibbonViewModel : ObservableObject
|
||||
WeakReferenceMessenger.Default.Send(new OpenSettingsMessage("Internal"));
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ToggleDevRibbonVisibility()
|
||||
{
|
||||
WeakReferenceMessenger.Default.Send(new ToggleDevRibbonMessage());
|
||||
}
|
||||
|
||||
private sealed partial class DevRibbonTraceListener(DevRibbonViewModel viewModel) : TraceListener
|
||||
{
|
||||
private const string TimestampFormat = "yyyy-MM-dd HH:mm:ss.fff";
|
||||
|
||||
Reference in New Issue
Block a user