diff --git a/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs b/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs index e0a2f31896..f995266b6c 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs @@ -27,7 +27,7 @@ namespace ICSharpCode.SharpDevelop.Gui /// /// Workbench implementation using WPF and AvalonDock. /// - sealed partial class WpfWorkbench : Window, IWorkbench + sealed partial class WpfWorkbench : Window, IWorkbench, System.Windows.Forms.IWin32Window { const string mainMenuPath = "/SharpDevelop/Workbench/MainMenu"; const string viewContentPath = "/SharpDevelop/Workbench/Pads"; @@ -53,10 +53,20 @@ namespace ICSharpCode.SharpDevelop.Gui } } - public System.Windows.Forms.IWin32Window MainWin32Window { get; private set; } + public System.Windows.Forms.IWin32Window MainWin32Window { get { return this; } } public ISynchronizeInvoke SynchronizingObject { get; private set; } public Window MainWindow { get { return this; } } + IntPtr System.Windows.Forms.IWin32Window.Handle { + get { + var wnd = System.Windows.PresentationSource.FromVisual(this) as System.Windows.Interop.IWin32Window; + if (wnd != null) + return wnd.Handle; + else + return IntPtr.Zero; + } + } + List padDescriptorCollection = new List(); ToolBar[] toolBars; @@ -70,7 +80,6 @@ namespace ICSharpCode.SharpDevelop.Gui protected override void OnSourceInitialized(EventArgs e) { - this.MainWin32Window = this.GetWin32Window(); base.OnSourceInitialized(e); HwndSource.FromHwnd(this.MainWin32Window.Handle).AddHook(SingleInstanceHelper.WndProc); } diff --git a/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs b/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs index c4bc4e8ed1..37b18f926a 100644 --- a/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs +++ b/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs @@ -86,6 +86,7 @@ namespace ICSharpCode.SharpDevelop.Gui var messageService = (WinFormsMessageService)Core.Services.ServiceManager.Instance.MessageService; messageService.DialogOwner = workbench.MainWin32Window; + Debug.Assert(messageService.DialogOwner != null); messageService.DialogSynchronizeInvoke = workbench.SynchronizingObject; workbench.Initialize(); diff --git a/src/Main/Base/Project/Src/Util/ExtensionMethods.cs b/src/Main/Base/Project/Src/Util/ExtensionMethods.cs index e2721c6e94..b7272307d5 100644 --- a/src/Main/Base/Project/Src/Util/ExtensionMethods.cs +++ b/src/Main/Base/Project/Src/Util/ExtensionMethods.cs @@ -134,32 +134,6 @@ namespace ICSharpCode.SharpDevelop return result; } - /// - /// Gets the IWin32Window associated with a WPF window. - /// - public static WinForms.IWin32Window GetWin32Window(this System.Windows.Window window) - { - var wnd = System.Windows.PresentationSource.FromVisual(window) as System.Windows.Interop.IWin32Window; - if (wnd != null) - return new Win32WindowAdapter(wnd); - else - return null; - } - - sealed class Win32WindowAdapter : WinForms.IWin32Window - { - readonly System.Windows.Interop.IWin32Window window; - - public Win32WindowAdapter(System.Windows.Interop.IWin32Window window) - { - this.window = window; - } - - public IntPtr Handle { - get { return window.Handle; } - } - } - /// /// Sets the Content property of the specified ControlControl to the specified content. /// If the content is a Windows-Forms control, it is wrapped in a WindowsFormsHost.