diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditor.xaml.cs b/src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditor.xaml.cs index 767b56f811..619dfc7c8e 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditor.xaml.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditor.xaml.cs @@ -4,6 +4,7 @@ using System.Windows; using System.Windows.Controls; +using System.Windows.Input; using FancyZonesEditor.Models; using FancyZonesEditor.Utils; @@ -23,6 +24,25 @@ namespace FancyZonesEditor { InitializeComponent(); Loaded += OnLoaded; + KeyDown += CanvasEditor_KeyDown; + } + + private void CanvasEditor_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) + { + if (e.Key == Key.Tab && (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))) + { + e.Handled = true; + App.Overlay.FocusEditorWindow(); + } + } + + public void FocusZone() + { + if (Preview.Children.Count > 0) + { + var canvas = Preview.Children[0] as CanvasZone; + canvas.FocusZone(); + } } private void OnLoaded(object sender, RoutedEventArgs e) diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditorWindow.xaml.cs b/src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditorWindow.xaml.cs index 3ab05331e2..a165de943c 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditorWindow.xaml.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditorWindow.xaml.cs @@ -18,6 +18,7 @@ namespace FancyZonesEditor InitializeComponent(); KeyUp += CanvasEditorWindow_KeyUp; + KeyDown += CanvasEditorWindow_KeyDown; _model = App.Overlay.CurrentDataContext as CanvasLayoutModel; _stashedModel = (CanvasLayoutModel)_model.Clone(); @@ -49,5 +50,14 @@ namespace FancyZonesEditor OnCancel(sender, null); } } + + private void CanvasEditorWindow_KeyDown(object sender, KeyEventArgs e) + { + if (e.Key == Key.Tab && (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))) + { + e.Handled = true; + App.Overlay.FocusEditor(); + } + } } } diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/CanvasZone.xaml.cs b/src/modules/fancyzones/editor/FancyZonesEditor/CanvasZone.xaml.cs index 7c5a53a894..fe52de8573 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/CanvasZone.xaml.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/CanvasZone.xaml.cs @@ -341,6 +341,11 @@ namespace FancyZonesEditor public int ZoneIndex { get => zoneIndex; set => zoneIndex = value; } + public void FocusZone() + { + Keyboard.Focus(RootBorder); + } + private void NWResize_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e) { snappyX = NewMagneticSnapper(true, ResizeMode.BottomEdge); diff --git a/src/modules/fancyzones/editor/FancyZonesEditor/Overlay.cs b/src/modules/fancyzones/editor/FancyZonesEditor/Overlay.cs index 7588bfdaed..57e3d83ce3 100644 --- a/src/modules/fancyzones/editor/FancyZonesEditor/Overlay.cs +++ b/src/modules/fancyzones/editor/FancyZonesEditor/Overlay.cs @@ -14,7 +14,8 @@ namespace FancyZonesEditor { private MainWindow _mainWindow; private LayoutPreview _layoutPreview; - private UserControl _editor; + private UserControl _editorLayout; + private EditorWindow _editorWindow; public List Monitors { get; private set; } @@ -228,34 +229,32 @@ namespace FancyZonesEditor _layoutPreview = null; if (CurrentDataContext is GridLayoutModel) { - _editor = new GridEditor(); + _editorLayout = new GridEditor(); } else if (CurrentDataContext is CanvasLayoutModel) { - _editor = new CanvasEditor(); + _editorLayout = new CanvasEditor(); } - CurrentLayoutWindow.Content = _editor; - - EditorWindow window; + CurrentLayoutWindow.Content = _editorLayout; if (model is GridLayoutModel) { - window = new GridEditorWindow(); + _editorWindow = new GridEditorWindow(); } else { - window = new CanvasEditorWindow(); + _editorWindow = new CanvasEditorWindow(); } - window.Owner = Monitors[App.Overlay.CurrentDesktop].Window; - window.DataContext = model; - window.Show(); + _editorWindow.Owner = Monitors[App.Overlay.CurrentDesktop].Window; + _editorWindow.DataContext = model; + _editorWindow.Show(); } public void CloseEditor() { - _editor = null; + _editorLayout = null; _layoutPreview = new LayoutPreview { IsActualSize = true, @@ -267,6 +266,22 @@ namespace FancyZonesEditor OpenMainWindow(); } + public void FocusEditor() + { + if (_editorLayout != null && _editorLayout is CanvasEditor canvasEditor) + { + canvasEditor.FocusZone(); + } + } + + public void FocusEditorWindow() + { + if (_editorWindow != null) + { + _editorWindow.Focus(); + } + } + public void CloseLayoutWindow() { for (int i = 0; i < DesktopsCount; i++)