diff --git a/QuickLook/Converters/BooleanToResizeBorderThicknessConverter.cs b/QuickLook/Converters/BooleanToResizeBorderThicknessConverter.cs index c77d1a0..cf5adf3 100644 --- a/QuickLook/Converters/BooleanToResizeBorderThicknessConverter.cs +++ b/QuickLook/Converters/BooleanToResizeBorderThicknessConverter.cs @@ -10,7 +10,7 @@ namespace QuickLook.Converters public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) - return Visibility.Visible; + return 0; var v = (bool) value; diff --git a/QuickLook/Converters/BooleanToResizeModeConverter.cs b/QuickLook/Converters/BooleanToResizeModeConverter.cs new file mode 100644 index 0000000..09431e6 --- /dev/null +++ b/QuickLook/Converters/BooleanToResizeModeConverter.cs @@ -0,0 +1,25 @@ +using System; +using System.Globalization; +using System.Windows; +using System.Windows.Data; + +namespace QuickLook.Converters +{ + public sealed class BooleanToResizeModeConverter : DependencyObject, IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value == null) + return ResizeMode.CanResize; + + var v = (bool) value; + + return v ? ResizeMode.CanResize : ResizeMode.NoResize; + } + + object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/QuickLook/MainWindowTransparent.xaml b/QuickLook/MainWindowTransparent.xaml index 55e9959..4c1d7c5 100644 --- a/QuickLook/MainWindowTransparent.xaml +++ b/QuickLook/MainWindowTransparent.xaml @@ -17,8 +17,13 @@ ShowActivated="False" ShowInTaskbar="False" FontFamily="Segoe UI,Microsoft Yahei UI"> + + + + base.Hide()); - } - internal void BeginShow(IViewer matchedPlugin, string path) { ContextObject.CurrentContentContainer = container; @@ -129,8 +96,20 @@ namespace QuickLook SetOpenWithButtonAndPath(path); + // revert UI changes + ContextObject.IsBusy = true; + + var newHeight = ContextObject.PreferredSize.Height + titlebar.Height + windowBorder.BorderThickness.Top + + windowBorder.BorderThickness.Bottom; + var newWidth = ContextObject.PreferredSize.Width + windowBorder.BorderThickness.Left + + windowBorder.BorderThickness.Right; + + ResizeAndCenter(new Size(newWidth, newHeight)); + Show(); + //WindowHelper.SetActivate(new WindowInteropHelper(this), ContextObject.CanFocus); + // load plugin, do not block UI Exception thrown = null; Dispatcher.BeginInvoke(new Action(() => @@ -159,9 +138,9 @@ namespace QuickLook buttonOpenWith.Content = isExe == true ? $"Run {appFriendlyName}" : $"Open with {appFriendlyName}"; } - internal bool BeginHide(bool quit = false) + internal bool BeginHide(bool quitIfViewer = false, bool disposePluginOnly = false) { - if (quit && App.RunningAsViewer) + if (quitIfViewer && App.RunningAsViewer) { Application.Current.Shutdown(); return true; @@ -170,9 +149,20 @@ namespace QuickLook if (Visibility != Visibility.Visible) return false; - Hide(); + UnloadPlugin(); + ContextObject.Reset(); + GC.Collect(); - return true; + // revert UI changes + ContextObject.IsBusy = true; + + if (!disposePluginOnly) + { + Hide(); + return true; + } + + return false; } } } \ No newline at end of file diff --git a/QuickLook/QuickLook.csproj b/QuickLook/QuickLook.csproj index 7bea191..28f5406 100644 --- a/QuickLook/QuickLook.csproj +++ b/QuickLook/QuickLook.csproj @@ -80,6 +80,7 @@ Properties\GitVersion.cs + diff --git a/QuickLook/ViewWindowManager.cs b/QuickLook/ViewWindowManager.cs index a222b92..54b93ac 100644 --- a/QuickLook/ViewWindowManager.cs +++ b/QuickLook/ViewWindowManager.cs @@ -32,14 +32,15 @@ namespace QuickLook // do we need switch to another file? var replaceView = key == Keys.Up || key == Keys.Down || key == Keys.Left || key == Keys.Right; - if (replaceView && _currentMainWindow.IsLoaded && _currentMainWindow.Visibility != Visibility.Visible) + if (replaceView && _currentMainWindow.Visibility != Visibility.Visible) return; if (!WindowHelper.IsFocusedControlExplorerItem()) - if (!WindowHelper.IsFocusedWindowSelf()) + if (replaceView || !WindowHelper.IsFocusedWindowSelf()) return; - if (!replaceView && _currentMainWindow.BeginHide()) + // should the window be closed (replaceView == false), return without showing new one + if (_currentMainWindow.BeginHide(disposePluginOnly: replaceView)) return; var path = GetCurrentSelection();