mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-08 12:18:50 +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 -->
|
<!-- More section -->
|
||||||
<TextBlock Style="{ThemeResource SettingsSectionHeaderTextBlockStyle}" Text="More" />
|
<TextBlock Style="{ThemeResource SettingsSectionHeaderTextBlockStyle}" Text="More" />
|
||||||
<Border>
|
<StackPanel Orientation="Horizontal" Spacing="8">
|
||||||
<Button Command="{x:Bind ViewModel.OpenInternalToolsCommand}" Content="Open internal tools" />
|
<Button Command="{x:Bind ViewModel.OpenInternalToolsCommand}" Content="Open internal tools" />
|
||||||
</Border>
|
<Button Command="{x:Bind ViewModel.ToggleDevRibbonVisibilityCommand}" Content="Hide me" />
|
||||||
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ public sealed partial class MainWindow : WindowEx,
|
|||||||
IRecipient<ErrorOccurredMessage>,
|
IRecipient<ErrorOccurredMessage>,
|
||||||
IRecipient<DragStartedMessage>,
|
IRecipient<DragStartedMessage>,
|
||||||
IRecipient<DragCompletedMessage>,
|
IRecipient<DragCompletedMessage>,
|
||||||
|
IRecipient<ToggleDevRibbonMessage>,
|
||||||
IDisposable,
|
IDisposable,
|
||||||
IHostWindow
|
IHostWindow
|
||||||
{
|
{
|
||||||
@@ -91,6 +92,8 @@ public sealed partial class MainWindow : WindowEx,
|
|||||||
|
|
||||||
private bool _preventHideWhenDeactivated;
|
private bool _preventHideWhenDeactivated;
|
||||||
|
|
||||||
|
private DevRibbon? _devRibbon;
|
||||||
|
|
||||||
private MainWindowViewModel ViewModel { get; }
|
private MainWindowViewModel ViewModel { get; }
|
||||||
|
|
||||||
public bool IsVisibleToUser { get; private set; } = true;
|
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<ErrorOccurredMessage>(this);
|
||||||
WeakReferenceMessenger.Default.Register<DragStartedMessage>(this);
|
WeakReferenceMessenger.Default.Register<DragStartedMessage>(this);
|
||||||
WeakReferenceMessenger.Default.Register<DragCompletedMessage>(this);
|
WeakReferenceMessenger.Default.Register<DragCompletedMessage>(this);
|
||||||
|
WeakReferenceMessenger.Default.Register<ToggleDevRibbonMessage>(this);
|
||||||
|
|
||||||
// Hide our titlebar.
|
// Hide our titlebar.
|
||||||
// We need to both ExtendsContentIntoTitleBar, then set the height to Collapsed
|
// 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
|
// Add dev ribbon if enabled
|
||||||
if (!BuildInfo.IsCiBuild)
|
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();
|
DisposeAcrylic();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Receive(ToggleDevRibbonMessage message)
|
||||||
|
{
|
||||||
|
_devRibbon?.Visibility = _devRibbon.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
|
||||||
|
}
|
||||||
|
|
||||||
public void Receive(DragStartedMessage message)
|
public void Receive(DragStartedMessage message)
|
||||||
{
|
{
|
||||||
_preventHideWhenDeactivated = true;
|
_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=}">
|
HeaderIcon="{ui:FontIcon Glyph=}">
|
||||||
<Button Click="OpenCurrentLogCardClicked" Content="Open log" />
|
<Button Click="OpenCurrentLogCardClicked" Content="Open log" />
|
||||||
</controls:SettingsCard>
|
</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 -->
|
<!-- Data Section -->
|
||||||
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}" Text="Data and Files" />
|
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}" Text="Data and Files" />
|
||||||
|
|||||||
@@ -2,8 +2,11 @@
|
|||||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
// See the LICENSE file in the project root for more information.
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using CommunityToolkit.Mvvm.Messaging;
|
||||||
using ManagedCommon;
|
using ManagedCommon;
|
||||||
using Microsoft.CmdPal.Core.Common.Services;
|
using Microsoft.CmdPal.Core.Common.Services;
|
||||||
|
using Microsoft.CmdPal.UI.Messages;
|
||||||
|
using Microsoft.CommandPalette.Extensions.Toolkit;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.UI.Xaml;
|
using Microsoft.UI.Xaml;
|
||||||
using Windows.System;
|
using Windows.System;
|
||||||
@@ -94,4 +97,9 @@ public sealed partial class InternalPage : Page
|
|||||||
Logger.LogError("Failed to open directory in Explorer", ex);
|
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"));
|
WeakReferenceMessenger.Default.Send(new OpenSettingsMessage("Internal"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[RelayCommand]
|
||||||
|
private void ToggleDevRibbonVisibility()
|
||||||
|
{
|
||||||
|
WeakReferenceMessenger.Default.Send(new ToggleDevRibbonMessage());
|
||||||
|
}
|
||||||
|
|
||||||
private sealed partial class DevRibbonTraceListener(DevRibbonViewModel viewModel) : TraceListener
|
private sealed partial class DevRibbonTraceListener(DevRibbonViewModel viewModel) : TraceListener
|
||||||
{
|
{
|
||||||
private const string TimestampFormat = "yyyy-MM-dd HH:mm:ss.fff";
|
private const string TimestampFormat = "yyyy-MM-dd HH:mm:ss.fff";
|
||||||
|
|||||||
Reference in New Issue
Block a user