From 4a8b7c559a82afb5d286e7417529cdaf156c67ac Mon Sep 17 00:00:00 2001 From: amaitland Date: Thu, 19 May 2016 12:16:46 +1000 Subject: [PATCH] Re-enable the WPF LifespanHandler just comment the code out - add experimental note --- .../Handlers/LifespanHandler.cs | 155 +++++++++--------- .../Views/BrowserTabView.xaml.cs | 2 +- 2 files changed, 82 insertions(+), 75 deletions(-) diff --git a/CefSharp.Wpf.Example/Handlers/LifespanHandler.cs b/CefSharp.Wpf.Example/Handlers/LifespanHandler.cs index b0e139981e..8ddf0d341c 100644 --- a/CefSharp.Wpf.Example/Handlers/LifespanHandler.cs +++ b/CefSharp.Wpf.Example/Handlers/LifespanHandler.cs @@ -12,75 +12,81 @@ public class LifespanHandler : ILifeSpanHandler { bool ILifeSpanHandler.OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser) { - var chromiumWebBrowser = (ChromiumWebBrowser)browserControl; - - ChromiumWebBrowser chromiumBrowser = null; - - var windowX = (windowInfo.X == int.MinValue) ? double.NaN : windowInfo.X; - var windowY = (windowInfo.Y == int.MinValue) ? double.NaN : windowInfo.Y; - var windowWidth = (windowInfo.Width == int.MinValue) ? double.NaN : windowInfo.Width; - var windowHeight = (windowInfo.Height == int.MinValue) ? double.NaN : windowInfo.Height; - - chromiumWebBrowser.Dispatcher.Invoke(() => - { - var owner = Window.GetWindow(chromiumWebBrowser); - chromiumBrowser = new ChromiumWebBrowser - { - Address = targetUrl, - }; - - chromiumBrowser.SetAsPopup(); - chromiumBrowser.LifeSpanHandler = this; - - var popup = new Window - { - Left = windowX, - Top = windowY, - Width = windowWidth, - Height = windowHeight, - Content = chromiumBrowser, - Owner = owner, - Title = targetFrameName - }; - - var windowInteropHelper = new WindowInteropHelper(popup); - //Create the handle Window handle (In WPF there's only one handle per window, not per control) - var handle = windowInteropHelper.EnsureHandle(); - - //The parentHandle value will be used to identify monitor info and to act as the parent window for dialogs, - //context menus, etc. If parentHandle is not provided then the main screen monitor will be used and some - //functionality that requires a parent window may not function correctly. - windowInfo.SetAsWindowless(handle, true); - - popup.Closed += (o, e) => - { - var w = o as Window; - if (w != null && w.Content is IWebBrowser) - { - (w.Content as IWebBrowser).Dispose(); - w.Content = null; - } - }; - }); - - newBrowser = chromiumBrowser; + newBrowser = null; return false; + + //NOTE: This is experimental + //var chromiumWebBrowser = (ChromiumWebBrowser)browserControl; + + //ChromiumWebBrowser chromiumBrowser = null; + + //var windowX = (windowInfo.X == int.MinValue) ? double.NaN : windowInfo.X; + //var windowY = (windowInfo.Y == int.MinValue) ? double.NaN : windowInfo.Y; + //var windowWidth = (windowInfo.Width == int.MinValue) ? double.NaN : windowInfo.Width; + //var windowHeight = (windowInfo.Height == int.MinValue) ? double.NaN : windowInfo.Height; + + //chromiumWebBrowser.Dispatcher.Invoke(() => + //{ + // var owner = Window.GetWindow(chromiumWebBrowser); + // chromiumBrowser = new ChromiumWebBrowser + // { + // Address = targetUrl, + // }; + + // chromiumBrowser.SetAsPopup(); + // chromiumBrowser.LifeSpanHandler = this; + + // var popup = new Window + // { + // Left = windowX, + // Top = windowY, + // Width = windowWidth, + // Height = windowHeight, + // Content = chromiumBrowser, + // Owner = owner, + // Title = targetFrameName + // }; + + // var windowInteropHelper = new WindowInteropHelper(popup); + // //Create the handle Window handle (In WPF there's only one handle per window, not per control) + // var handle = windowInteropHelper.EnsureHandle(); + + // //The parentHandle value will be used to identify monitor info and to act as the parent window for dialogs, + // //context menus, etc. If parentHandle is not provided then the main screen monitor will be used and some + // //functionality that requires a parent window may not function correctly. + // windowInfo.SetAsWindowless(handle, true); + + // popup.Closed += (o, e) => + // { + // var w = o as Window; + // if (w != null && w.Content is IWebBrowser) + // { + // (w.Content as IWebBrowser).Dispose(); + // w.Content = null; + // } + // }; + //}); + + //newBrowser = chromiumBrowser; + + //return false; } void ILifeSpanHandler.OnAfterCreated(IWebBrowser browserControl, IBrowser browser) { - var chromiumWebBrowser = (ChromiumWebBrowser)browserControl; - - chromiumWebBrowser.Dispatcher.Invoke(() => - { - var owner = Window.GetWindow(chromiumWebBrowser); - - if (owner != null && owner.Content == browserControl) - { - owner.Show(); - } - }); + //NOTE: This is experimental + //var chromiumWebBrowser = (ChromiumWebBrowser)browserControl; + + //chromiumWebBrowser.Dispatcher.Invoke(() => + //{ + // var owner = Window.GetWindow(chromiumWebBrowser); + + // if (owner != null && owner.Content == browserControl) + // { + // owner.Show(); + // } + //}); } bool ILifeSpanHandler.DoClose(IWebBrowser browserControl, IBrowser browser) @@ -90,17 +96,18 @@ bool ILifeSpanHandler.DoClose(IWebBrowser browserControl, IBrowser browser) void ILifeSpanHandler.OnBeforeClose(IWebBrowser browserControl, IBrowser browser) { - var chromiumWebBrowser = (ChromiumWebBrowser)browserControl; - - chromiumWebBrowser.Dispatcher.Invoke(() => - { - var owner = Window.GetWindow(chromiumWebBrowser); - - if (owner != null && owner.Content == browserControl) - { - owner.Close(); - } - }); + //NOTE: This is experimental + //var chromiumWebBrowser = (ChromiumWebBrowser)browserControl; + + //chromiumWebBrowser.Dispatcher.Invoke(() => + //{ + // var owner = Window.GetWindow(chromiumWebBrowser); + + // if (owner != null && owner.Content == browserControl) + // { + // owner.Close(); + // } + //}); } } } diff --git a/CefSharp.Wpf.Example/Views/BrowserTabView.xaml.cs b/CefSharp.Wpf.Example/Views/BrowserTabView.xaml.cs index 3a12e444d7..63d6af8785 100644 --- a/CefSharp.Wpf.Example/Views/BrowserTabView.xaml.cs +++ b/CefSharp.Wpf.Example/Views/BrowserTabView.xaml.cs @@ -28,7 +28,7 @@ public BrowserTabView() // Enable touch scrolling - once properly tested this will likely become the default //browser.IsManipulationEnabled = true; - //browser.LifeSpanHandler = new LifespanHandler(); + browser.LifeSpanHandler = new LifespanHandler(); browser.MenuHandler = new MenuHandler(); browser.GeolocationHandler = new GeolocationHandler(); browser.DownloadHandler = new DownloadHandler();