diff --git a/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PluginInterface.cs b/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PluginInterface.cs
index 1fb61d8..d79edab 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PluginInterface.cs
+++ b/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PluginInterface.cs
@@ -24,13 +24,14 @@ namespace QuickLook.Plugin.IPreviewHandlers
case ".docx":
case ".xls":
case ".xlsx":
+ case ".bbb":
case ".xlsm":
// Visio Viewer will not quit after preview, which cause serious memory issue
//case ".vsd":
//case ".vsdx":
case ".ppt":
case ".pptx":
- return true;
+ return PreviewHandlerHost.GetPreviewHandlerGUID(path) != Guid.Empty;
}
return false;
@@ -47,11 +48,7 @@ namespace QuickLook.Plugin.IPreviewHandlers
context.ViewerContent = _panel;
context.Title = Path.GetFileName(path);
- _panel.Loaded += (sender, e) =>
- {
- _panel.PreviewFile(path);
- SetForegroundWindow(new WindowInteropHelper(context.ViewerWindow).Handle);
- };
+ _panel.PreviewFile(path, context);
context.IsBusy = false;
}
@@ -63,12 +60,7 @@ namespace QuickLook.Plugin.IPreviewHandlers
_panel?.Dispose();
_panel = null;
}
-
-
- [DllImport("user32.dll")]
- [return: MarshalAs(UnmanagedType.Bool)]
- private static extern bool SetForegroundWindow(IntPtr hWnd);
-
+
~PluginInterface()
{
Cleanup();
diff --git a/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PreviewHandlerHost.cs b/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PreviewHandlerHost.cs
index 2c5c22f..e77a770 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PreviewHandlerHost.cs
+++ b/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PreviewHandlerHost.cs
@@ -61,7 +61,7 @@ namespace QuickLook.Plugin.IPreviewHandlers
///
///
///
- private Guid GetPreviewHandlerGUID(string filename)
+ public static Guid GetPreviewHandlerGUID(string filename)
{
// open the registry key corresponding to the file extension
var ext = Registry.ClassesRoot.OpenSubKey(Path.GetExtension(filename));
@@ -150,8 +150,4 @@ namespace QuickLook.Plugin.IPreviewHandlers
}
}
}
-
- #region COM Interop
-
- #endregion
}
\ No newline at end of file
diff --git a/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PreviewPanel.xaml.cs b/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PreviewPanel.xaml.cs
index 0c165cb..ee4c6a3 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PreviewPanel.xaml.cs
+++ b/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PreviewPanel.xaml.cs
@@ -1,6 +1,8 @@
using System;
using System.Runtime.InteropServices;
using System.Windows.Controls;
+using System.Windows.Interop;
+using System.Windows.Threading;
namespace QuickLook.Plugin.IPreviewHandlers
{
@@ -9,7 +11,7 @@ namespace QuickLook.Plugin.IPreviewHandlers
///
public partial class PreviewPanel : UserControl, IDisposable
{
- private PreviewHandlerHost _control = new PreviewHandlerHost();
+ private PreviewHandlerHost _control;
public PreviewPanel()
{
@@ -25,17 +27,23 @@ namespace QuickLook.Plugin.IPreviewHandlers
_control = null;
}
- public void PreviewFile(string file)
+ public void PreviewFile(string file, ContextObject context)
{
- _control = new PreviewHandlerHost();
+ Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() =>
+ {
+ _control = new PreviewHandlerHost();
+ presenter.Child = _control;
+ _control.Open(file);
+ }), DispatcherPriority.Render);
- presenter.Child = _control;
-
- _control.Open(file);
-
- SetActiveWindow(presenter.Handle);
+ //SetForegroundWindow(new WindowInteropHelper(context.ViewerWindow).Handle);
+ //SetActiveWindow(presenter.Handle);
}
+ [DllImport("user32.dll")]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ private static extern bool SetForegroundWindow(IntPtr hWnd);
+
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetActiveWindow(IntPtr hWnd);