Skip to content

Commit

Permalink
Re-enable the WPF LifespanHandler just comment the code out - add exp…
Browse files Browse the repository at this point in the history
…erimental note
  • Loading branch information
amaitland committed May 27, 2016
1 parent 4997494 commit 4a8b7c5
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 75 deletions.
155 changes: 81 additions & 74 deletions CefSharp.Wpf.Example/Handlers/LifespanHandler.cs
Expand Up @@ -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)
Expand All @@ -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();
// }
//});
}
}
}
2 changes: 1 addition & 1 deletion CefSharp.Wpf.Example/Views/BrowserTabView.xaml.cs
Expand Up @@ -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();
Expand Down

0 comments on commit 4a8b7c5

Please sign in to comment.