diff options
Diffstat (limited to 'Xwt.Gtk.Windows')
-rw-r--r-- | Xwt.Gtk.Windows/WebViewBackend.cs | 82 | ||||
-rw-r--r-- | Xwt.Gtk.Windows/WindowsPlatformBackend.cs | 1 | ||||
-rw-r--r-- | Xwt.Gtk.Windows/Xwt.Gtk.Windows.csproj | 3 |
3 files changed, 86 insertions, 0 deletions
diff --git a/Xwt.Gtk.Windows/WebViewBackend.cs b/Xwt.Gtk.Windows/WebViewBackend.cs new file mode 100644 index 00000000..ea0165b5 --- /dev/null +++ b/Xwt.Gtk.Windows/WebViewBackend.cs @@ -0,0 +1,82 @@ +// +// WebViewBackend.cs +// +// Author: +// Cody Russell <cody@xamarin.com> +// +// Copyright (c) 2014 Xamarin Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +using System; +using System.Threading; +using System.Runtime.InteropServices; +using SWF = System.Windows.Forms; +using Xwt.GtkBackend; +using Xwt.Backends; +using GTK = Gtk; + +namespace Xwt.Gtk.Windows +{ + public class WebViewBackend : WidgetBackend, IWebViewBackend + { + SWF.WebBrowser view; + string url; + GTK.Socket socket; + + [DllImportAttribute("user32.dll", EntryPoint = "SetParent")] + internal static extern System.IntPtr SetParent([InAttribute] System.IntPtr hwndChild, [InAttribute] System.IntPtr hwndNewParent); + + public override void Initialize () + { + base.Initialize (); + + socket = new GTK.Socket (); + Widget = socket; + + GLib.Timeout.Add (50, delegate { + // We need to wait until after this widget has been parented. + Widget.Realize (); + Widget.Show (); + + var size = new System.Drawing.Size (Widget.WidthRequest, Widget.HeightRequest); + + view = new SWF.WebBrowser (); + view.Size = size; + var browser_handle = view.Handle; + IntPtr window_handle = (IntPtr)socket.Id; + SetParent (browser_handle, window_handle); + if (url != null) + view.Navigate (url); + + return false; + }); + } + + public string Url { + get { return url; } + set { + url = value; + if (view != null) + view.Navigate (url); + } + } + } +} + diff --git a/Xwt.Gtk.Windows/WindowsPlatformBackend.cs b/Xwt.Gtk.Windows/WindowsPlatformBackend.cs index 454f0d9f..8112e1e6 100644 --- a/Xwt.Gtk.Windows/WindowsPlatformBackend.cs +++ b/Xwt.Gtk.Windows/WindowsPlatformBackend.cs @@ -35,6 +35,7 @@ namespace Xwt.Gtk.Windows { base.Initialize (toolit); toolit.RegisterBackend<DesktopBackend, GtkWindowsDesktopBackend> (); + toolit.RegisterBackend<IWebViewBackend, WebViewBackend> (); } } } diff --git a/Xwt.Gtk.Windows/Xwt.Gtk.Windows.csproj b/Xwt.Gtk.Windows/Xwt.Gtk.Windows.csproj index 36f4884c..15a9c4fa 100644 --- a/Xwt.Gtk.Windows/Xwt.Gtk.Windows.csproj +++ b/Xwt.Gtk.Windows/Xwt.Gtk.Windows.csproj @@ -36,6 +36,8 @@ <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f, processorArchitecture=MSIL" /> <Reference Include="System" /> <Reference Include="System.Drawing" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" /> </ItemGroup> <ItemGroup> <Compile Include="Enums.cs" /> @@ -44,6 +46,7 @@ <Compile Include="Structs.cs" /> <Compile Include="Win32.cs" /> <Compile Include="WindowsPlatformBackend.cs" /> + <Compile Include="WebViewBackend.cs" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <ItemGroup> |