From 8c69a7bbd53ad03c2087b2a9289fcde8f24a8615 Mon Sep 17 00:00:00 2001 From: kice Date: Wed, 7 Jul 2021 08:28:38 +0800 Subject: [PATCH] More responsive auto-hide window On my PC with VS debugging, looks like it will take around 0~200ms to execute auto hide; expect to be a lot sooner if it is release build with no debugger attach. ~~Waiting 1.5 seconds for auto-hide kicks in will make me close the window instead.~~ --- .../Controls/AutoHideWindowManager.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Controls/AutoHideWindowManager.cs b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Controls/AutoHideWindowManager.cs index be92fe771..fb5795911 100644 --- a/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Controls/AutoHideWindowManager.cs +++ b/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Controls/AutoHideWindowManager.cs @@ -28,6 +28,7 @@ internal class AutoHideWindowManager private DockingManager _manager; private WeakReference _currentAutohiddenAnchor = null; private DispatcherTimer _closeTimer = null; + private int _fastTimer = 0; #endregion @@ -68,13 +69,23 @@ public void HideAutoWindow( LayoutAnchorControl anchor = null ) private void SetupCloseTimer() { _closeTimer = new DispatcherTimer( DispatcherPriority.Background ); - _closeTimer.Interval = TimeSpan.FromMilliseconds( 1500 ); + _closeTimer.Interval = TimeSpan.FromMilliseconds( 100 ); _closeTimer.Tick += ( s, e ) => { if( _manager.AutoHideWindow.IsWin32MouseOver || ( ( LayoutAnchorable )_manager.AutoHideWindow.Model ).IsActive || _manager.AutoHideWindow.IsResizing ) + { + if (_fastTimer == 0) { + _closeTimer.Interval = TimeSpan.FromMilliseconds( 1500 ); + _fastTimer = -1; + } + else if (_fastTimer > 0) + { + --_fastTimer; + } return; + } StopCloseTimer(); }; @@ -82,6 +93,7 @@ private void SetupCloseTimer() private void StartCloseTimer() { + _fastTimer = 5; _closeTimer.Start(); }