mirror of
https://github.com/QL-Win/QuickLook.git
synced 2025-12-25 02:00:12 +08:00
Try to fix #796: release resources on ALT-F4
This commit is contained in:
@@ -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());
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@ namespace QuickLook
|
||||
buttonCloseWindow.Click += (sender, e) =>
|
||||
{
|
||||
if (Pinned)
|
||||
BeginClose();
|
||||
Close();
|
||||
else
|
||||
ViewWindowManager.GetInstance().ClosePreview();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user