Try to fix #796: release resources on ALT-F4

This commit is contained in:
Paddy Xu
2021-01-10 15:33:24 +01:00
parent 6d81d61cc5
commit ed9334b4b6
3 changed files with 20 additions and 9 deletions

View File

@@ -34,7 +34,7 @@ namespace QuickLook
internal ViewWindowManager()
{
_viewerWindow = new ViewerWindow();
InitNewViewerWindow();
}
public void Dispose()
@@ -100,9 +100,7 @@ namespace QuickLook
_viewerWindow.Pinned = true;
var newWindow = new ViewerWindow();
_viewerWindow = newWindow;
InitNewViewerWindow();
}
public void SwitchPreview(string path = null)
@@ -168,6 +166,18 @@ namespace QuickLook
e.Throw();
}
private void InitNewViewerWindow()
{
_viewerWindow = new ViewerWindow();
_viewerWindow.Closed += (sender, e) =>
{
if (!(sender is ViewerWindow w) || w.Pinned)
return; // Pinned window has already been forgotten
StopFocusMonitor();
InitNewViewerWindow();
};
}
internal static ViewWindowManager GetInstance()
{
return _instance ?? (_instance = new ViewWindowManager());

View File

@@ -16,6 +16,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Runtime.ExceptionServices;
@@ -57,7 +58,7 @@ namespace QuickLook
internal void RunAndClose()
{
Run();
BeginClose();
Close();
}
private void PositionWindow(Size size)
@@ -276,17 +277,17 @@ namespace QuickLook
//Dispatcher.BeginInvoke(new Action(Hide), DispatcherPriority.ApplicationIdle);
ViewWindowManager.GetInstance().ForgetCurrentWindow();
BeginClose();
Close();
ProcessHelper.PerformAggressiveGC();
}
internal void BeginClose()
protected override void OnClosing(CancelEventArgs e)
{
UnloadPlugin();
busyDecorator.Dispose();
Close();
base.OnClosing(e);
ProcessHelper.PerformAggressiveGC();
}

View File

@@ -78,7 +78,7 @@ namespace QuickLook
buttonCloseWindow.Click += (sender, e) =>
{
if (Pinned)
BeginClose();
Close();
else
ViewWindowManager.GetInstance().ClosePreview();
};