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();