diff --git a/QuickLook/KeystrokeDispatcher.cs b/QuickLook/KeystrokeDispatcher.cs index c6e38b8..e9db56c 100644 --- a/QuickLook/KeystrokeDispatcher.cs +++ b/QuickLook/KeystrokeDispatcher.cs @@ -46,7 +46,7 @@ internal class KeystrokeDispatcher : IDisposable _validKeys = [ Keys.Up, Keys.Down, Keys.Left, Keys.Right, - Keys.Enter, Keys.Space, Keys.Escape + Keys.Enter, Keys.Space, Keys.Escape, Keys.F11 ]; } @@ -135,6 +135,10 @@ internal class KeystrokeDispatcher : IDisposable case Keys.Space: PipeServerManager.SendMessage(PipeMessages.Toggle); break; + + case Keys.F11: + PipeServerManager.SendMessage(PipeMessages.Fullscreen); + break; } } else diff --git a/QuickLook/PipeServerManager.cs b/QuickLook/PipeServerManager.cs index db13216..92a3b35 100644 --- a/QuickLook/PipeServerManager.cs +++ b/QuickLook/PipeServerManager.cs @@ -36,6 +36,7 @@ public static class PipeMessages public const string Forget = "QuickLook.App.PipeMessages.Forget"; public const string Close = "QuickLook.App.PipeMessages.Close"; public const string Quit = "QuickLook.App.PipeMessages.Quit"; + public const string Fullscreen = "QuickLook.App.PipeMessages.Fullscreen"; } public class PipeServerManager : IDisposable @@ -161,6 +162,12 @@ public class PipeServerManager : IDisposable DispatcherPriority.ApplicationIdle); return false; + case PipeMessages.Fullscreen: + Application.Current.Dispatcher.BeginInvoke( + new Action(() => ViewWindowManager.GetInstance().ToggleFullscreen()), + DispatcherPriority.ApplicationIdle); + return false; + case PipeMessages.Quit: return true; diff --git a/QuickLook/ViewWindowManager.cs b/QuickLook/ViewWindowManager.cs index 3ab9ae3..56b6c5e 100644 --- a/QuickLook/ViewWindowManager.cs +++ b/QuickLook/ViewWindowManager.cs @@ -198,6 +198,14 @@ public class ViewWindowManager : IDisposable BeginShowNewWindow(_invokedPath, matchedPlugin); } + public void ToggleFullscreen() + { + if (!_viewerWindow.IsVisible) + return; + + _viewerWindow.ToggleFullscreen(); + } + private void BeginShowNewWindow(string path, IViewer matchedPlugin) { _viewerWindow.UnloadPlugin(); diff --git a/QuickLook/ViewerWindow.Actions.cs b/QuickLook/ViewerWindow.Actions.cs index 8d1f4cb..f78b051 100644 --- a/QuickLook/ViewerWindow.Actions.cs +++ b/QuickLook/ViewerWindow.Actions.cs @@ -62,6 +62,11 @@ public partial class ViewerWindow Close(); } + internal void ToggleFullscreen() + { + WindowState = WindowState == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized; + } + private void PositionWindow(Size size) { // If the window is now maximized, do not move it