From b6319e522ac3e594056989a5fb6db3145c98cba2 Mon Sep 17 00:00:00 2001 From: Zhe Fang Date: Wed, 9 Jul 2025 10:29:28 -0400 Subject: [PATCH] fix #16 --- .../Helper/ForegroundWindowWatcherHelper.cs | 21 +------------------ .../LyricsRendererViewModel.Messages.cs | 2 ++ .../ViewModels/LyricsWindowViewModel.cs | 5 +++-- 3 files changed, 6 insertions(+), 22 deletions(-) diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/ForegroundWindowWatcherHelper.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/ForegroundWindowWatcherHelper.cs index f27e96e..cbfea1b 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/ForegroundWindowWatcherHelper.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/ForegroundWindowWatcherHelper.cs @@ -16,9 +16,6 @@ namespace BetterLyrics.WinUI3.Helper private readonly List _hooks = new(); private HWND _currentForeground = HWND.NULL; private readonly IntPtr _selfHwnd; - private readonly DispatcherTimer _pollingTimer; - private DateTime _lastEventTime = DateTime.MinValue; - private const int ThrottleIntervalMs = 1000; public delegate void WindowChangedHandler(HWND hwnd); private readonly WindowChangedHandler _onWindowChanged; @@ -28,13 +25,6 @@ namespace BetterLyrics.WinUI3.Helper _selfHwnd = selfHwnd; _onWindowChanged = onWindowChanged; _winEventDelegate = new User32.WinEventProc(WinEventProc); - - _pollingTimer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(200) }; - _pollingTimer.Tick += (_, _) => - { - if (_currentForeground != IntPtr.Zero && _currentForeground != _selfHwnd) - _onWindowChanged?.Invoke(_currentForeground); - }; } public void Start() @@ -64,8 +54,6 @@ namespace BetterLyrics.WinUI3.Helper User32.WINEVENT.WINEVENT_OUTOFCONTEXT ) ); - - _pollingTimer.Start(); } public void Stop() @@ -74,7 +62,6 @@ namespace BetterLyrics.WinUI3.Helper User32.UnhookWinEvent(hook); _hooks.Clear(); - _pollingTimer.Stop(); } private void WinEventProc( @@ -87,15 +74,9 @@ namespace BetterLyrics.WinUI3.Helper uint dwmsEventTime ) { - if (hwnd == IntPtr.Zero || hwnd == _selfHwnd) + if (hwnd == IntPtr.Zero) return; - var now = DateTime.Now; - if ((now - _lastEventTime).TotalMilliseconds < ThrottleIntervalMs) - return; - - _lastEventTime = now; - if (eventType == User32.EventConstants.EVENT_SYSTEM_FOREGROUND) { _currentForeground = hwnd; diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Messages.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Messages.cs index 1883bb0..a63a9b4 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Messages.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsRendererViewModel.Messages.cs @@ -79,10 +79,12 @@ namespace BetterLyrics.WinUI3.ViewModels if (message.PropertyName == nameof(LyricsWindowViewModel.IsDockMode)) { _isDockMode = message.NewValue; + UpdateFontColor(); } else if (message.PropertyName == nameof(LyricsWindowViewModel.IsDesktopMode)) { _isDesktopMode = message.NewValue; + UpdateFontColor(); } } else if (message.Sender is LyricsPageViewModel) diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsWindowViewModel.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsWindowViewModel.cs index ba7012f..d83c6c2 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsWindowViewModel.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsWindowViewModel.cs @@ -1,5 +1,6 @@ // 2025/6/23 by Zhe Fang +using System.Diagnostics; using System.Threading.Tasks; using BetterLyrics.WinUI3.Enums; using BetterLyrics.WinUI3.Helper; @@ -148,6 +149,7 @@ namespace BetterLyrics.WinUI3 DesktopModeHelper.Lock(window); IsLyricsWindowLocked = true; + StartWatchWindowColorChange(WindowColorSampleMode.WindowEdge); } private void StopWatchWindowColorChange() @@ -167,7 +169,6 @@ namespace BetterLyrics.WinUI3 IsDesktopMode = !IsDesktopMode; if (IsDesktopMode) { - StartWatchWindowColorChange(WindowColorSampleMode.WindowEdge); DesktopModeHelper.Enable(window); } else @@ -187,8 +188,8 @@ namespace BetterLyrics.WinUI3 IsDockMode = !IsDockMode; if (IsDockMode) { - StartWatchWindowColorChange(WindowColorSampleMode.BelowWindow); DockModeHelper.Enable(window, _settingsService.LyricsFontSize * 4); + StartWatchWindowColorChange(WindowColorSampleMode.BelowWindow); } else {