From 40335a6998d2a085098c589e6ce622407c6bb322 Mon Sep 17 00:00:00 2001
From: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com>
Date: Wed, 7 Jun 2023 16:52:47 +0200
Subject: [PATCH] [Peek] Set button color on theme change (#26564)
* [WIP] Set button color manually
* Remove unused aliases
---
src/modules/peek/Peek.UI/MainWindow.xaml.cs | 30 +++++++++++++++++--
.../peek/Peek.UI/Views/TitleBar.xaml.cs | 8 +++++
2 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/src/modules/peek/Peek.UI/MainWindow.xaml.cs b/src/modules/peek/Peek.UI/MainWindow.xaml.cs
index 81aa4264bf..6e7a33beb9 100644
--- a/src/modules/peek/Peek.UI/MainWindow.xaml.cs
+++ b/src/modules/peek/Peek.UI/MainWindow.xaml.cs
@@ -4,12 +4,12 @@
using System;
using interop;
+using ManagedCommon;
using Microsoft.PowerToys.Telemetry;
+using Microsoft.UI;
using Microsoft.UI.Windowing;
-using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Input;
using Peek.Common.Constants;
-using Peek.Common.Helpers;
using Peek.FilePreviewer.Models;
using Peek.UI.Extensions;
using Peek.UI.Helpers;
@@ -23,15 +23,20 @@ namespace Peek.UI
///
/// An empty window that can be used on its own or navigated to within a Frame.
///
- public sealed partial class MainWindow : WindowEx
+ public sealed partial class MainWindow : WindowEx, IDisposable
{
public MainWindowViewModel ViewModel { get; }
+ private ThemeListener themeListener;
+
public MainWindow()
{
InitializeComponent();
this.Activated += PeekWindow_Activated;
+ themeListener = new ThemeListener();
+ themeListener.ThemeChanged += (_) => HandleThemeChange();
+
ViewModel = App.GetService();
NativeEventWaiter.WaitForEventLoop(Constants.ShowPeekEvent(), OnPeekHotkey);
@@ -41,6 +46,20 @@ namespace Peek.UI
AppWindow.Closing += AppWindow_Closing;
}
+ private void HandleThemeChange()
+ {
+ AppWindow appWindow = this.GetAppWindow();
+
+ if (ThemeHelpers.GetAppTheme() == AppTheme.Light)
+ {
+ appWindow.TitleBar.ButtonForegroundColor = Colors.DarkSlateGray;
+ }
+ else
+ {
+ appWindow.TitleBar.ButtonForegroundColor = Colors.White;
+ }
+ }
+
private void PeekWindow_Activated(object sender, Microsoft.UI.Xaml.WindowActivatedEventArgs args)
{
if (args.WindowActivationState == Microsoft.UI.Xaml.WindowActivationState.Deactivated)
@@ -203,5 +222,10 @@ namespace Peek.UI
return false;
}
+
+ public void Dispose()
+ {
+ themeListener?.Dispose();
+ }
}
}
diff --git a/src/modules/peek/Peek.UI/Views/TitleBar.xaml.cs b/src/modules/peek/Peek.UI/Views/TitleBar.xaml.cs
index 84b3389643..400db5670f 100644
--- a/src/modules/peek/Peek.UI/Views/TitleBar.xaml.cs
+++ b/src/modules/peek/Peek.UI/Views/TitleBar.xaml.cs
@@ -226,6 +226,14 @@ namespace Peek.UI.Views
appWindow.TitleBar.ExtendsContentIntoTitleBar = true;
appWindow.TitleBar.ButtonBackgroundColor = Colors.Transparent;
appWindow.TitleBar.ButtonInactiveBackgroundColor = Colors.Transparent;
+ if (ThemeHelpers.GetAppTheme() == AppTheme.Light)
+ {
+ appWindow.TitleBar.ButtonForegroundColor = Colors.DarkSlateGray;
+ }
+ else
+ {
+ appWindow.TitleBar.ButtonForegroundColor = Colors.White;
+ }
mainWindow.SetTitleBar(this);
}