diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs index 30397ad4ca..9496ed1940 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs @@ -137,7 +137,7 @@ namespace ICSharpCode.SharpDevelop.Gui RoutedCommand routedCommand = e.Command as RoutedCommand; AvalonWorkbenchWindow workbenchWindow = ActiveWorkbenchWindow as AvalonWorkbenchWindow; if (!e.Handled && routedCommand != null && workbenchWindow != null && !isInNestedCanExecute) { - IInputElement target = CustomFocusManager.GetFocusedChild(workbenchWindow); + IInputElement target = workbenchWindow.GetCommandTarget(); if (target != null && target != e.OriginalSource) { isInNestedCanExecute = true; try { @@ -158,7 +158,7 @@ namespace ICSharpCode.SharpDevelop.Gui RoutedCommand routedCommand = e.Command as RoutedCommand; AvalonWorkbenchWindow workbenchWindow = ActiveWorkbenchWindow as AvalonWorkbenchWindow; if (!e.Handled && routedCommand != null && workbenchWindow != null && !isInNestedExecute) { - IInputElement target = CustomFocusManager.GetFocusedChild(workbenchWindow); + IInputElement target = workbenchWindow.GetCommandTarget(); if (target != null && target != e.OriginalSource) { isInNestedExecute = true; try { diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonWorkbenchWindow.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonWorkbenchWindow.cs index 0d83fe4a68..54a047b97e 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonWorkbenchWindow.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonWorkbenchWindow.cs @@ -123,6 +123,16 @@ namespace ICSharpCode.SharpDevelop.Gui } } + SDWindowsFormsHost GetActiveWinFormsHost() + { + if (viewTabControl != null && viewTabControl.SelectedIndex >= 0 && viewTabControl.SelectedIndex < ViewContents.Count) { + TabItem page = (TabItem)viewTabControl.Items[viewTabControl.SelectedIndex]; + return page.Content as SDWindowsFormsHost; + } else { + return this.Content as SDWindowsFormsHost; + } + } + public event EventHandler ActiveViewContentChanged; IViewContent oldActiveViewContent; @@ -443,5 +453,13 @@ namespace ICSharpCode.SharpDevelop.Gui { return "[AvalonWorkbenchWindow: " + this.Title + "]"; } + + /// + /// Gets the target for re-routing commands to this window. + /// + internal IInputElement GetCommandTarget() + { + return CustomFocusManager.GetFocusedChild(this) ?? GetActiveWinFormsHost(); + } } }