From 53166c49917e1a167533f637a10a0dfd861439ed Mon Sep 17 00:00:00 2001 From: amcateer Date: Thu, 21 Nov 2019 21:25:51 -0500 Subject: [PATCH 1/4] Added a way to close the window --- src/WebWindow/WebWindow.cs | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/src/WebWindow/WebWindow.cs b/src/WebWindow/WebWindow.cs index b73597d..35b0e19 100644 --- a/src/WebWindow/WebWindow.cs +++ b/src/WebWindow/WebWindow.cs @@ -6,7 +6,7 @@ namespace WebWindows { - public class WebWindow + public class WebWindow : IDisposable { [UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate void OnWebMessageReceivedCallback([MarshalAs(UnmanagedType.LPUTF8Str)] string message); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate IntPtr OnWebResourceRequestedCallback([MarshalAs(UnmanagedType.LPUTF8Str)] string url, out int numBytes, [MarshalAs(UnmanagedType.LPUTF8Str)] out string contentType); @@ -25,6 +25,7 @@ public class WebWindow [DllImport(DllName)] static extern void WebWindow_ShowMessage(IntPtr instance, [MarshalAs(UnmanagedType.LPUTF8Str)] string title, [MarshalAs(UnmanagedType.LPUTF8Str)] string body, uint type); [DllImport(DllName)] static extern void WebWindow_SendMessage(IntPtr instance, [MarshalAs(UnmanagedType.LPUTF8Str)] string message); [DllImport(DllName)] static extern void WebWindow_AddCustomScheme(IntPtr instance, [MarshalAs(UnmanagedType.LPUTF8Str)] string scheme, IntPtr requestHandler); + [DllImport("user32.dll", CharSet = CharSet.Auto)] static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); private List _gcHandlesToFree = new List(); private IntPtr _nativeWebWindow; @@ -84,12 +85,7 @@ public WebWindow(string title, Action configure) ~WebWindow() { - // TODO: IDisposable - foreach (var gcHandle in _gcHandlesToFree) - { - gcHandle.Free(); - } - _gcHandlesToFree.Clear(); + Dispose(false); } public void Show() => WebWindow_Show(_nativeWebWindow); @@ -212,5 +208,31 @@ private void AddCustomScheme(string scheme, ResolveWebResourceDelegate requestHa var callbackPtr = Marshal.GetFunctionPointerForDelegate(callback); WebWindow_AddCustomScheme(_nativeWebWindow, scheme, callbackPtr); } + + public void Close() + { + SendMessage(Hwnd, 0x0010, IntPtr.Zero, IntPtr.Zero); + Dispose(); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(Boolean itIsSafeToAlsoFreeManagedObjects) + { + foreach (var gcHandle in _gcHandlesToFree) + { + gcHandle.Free(); + } + _nativeWebWindow = IntPtr.Zero; + + if (itIsSafeToAlsoFreeManagedObjects) + { + _gcHandlesToFree.Clear(); + } + } } } From 35e8dfc0d19a09f72d359420346a7d1ef09735c5 Mon Sep 17 00:00:00 2001 From: amcateer Date: Thu, 21 Nov 2019 23:22:00 -0500 Subject: [PATCH 2/4] Changed method of closing window to support Windows and Linux --- src/WebWindow.Native/WebWindow.Linux.cpp | 6 ++++++ src/WebWindow.Native/WebWindow.Windows.cpp | 8 ++++++++ src/WebWindow.Native/WebWindow.h | 1 + src/WebWindow/WebWindow.cs | 4 ++-- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/WebWindow.Native/WebWindow.Linux.cpp b/src/WebWindow.Native/WebWindow.Linux.cpp index 9dd6416..7cf0551 100644 --- a/src/WebWindow.Native/WebWindow.Linux.cpp +++ b/src/WebWindow.Native/WebWindow.Linux.cpp @@ -10,6 +10,7 @@ #include std::mutex invokeLockMutex; +GtkWidget* _window; struct InvokeWaitInfo { @@ -215,4 +216,9 @@ void WebWindow::AddCustomScheme(UTF8String scheme, WebResourceRequestedCallback (void*)requestHandler, NULL); } +void WebWindow::CloseWindow() +{ + gtk_close_window(_window); +} + #endif diff --git a/src/WebWindow.Native/WebWindow.Windows.cpp b/src/WebWindow.Native/WebWindow.Windows.cpp index ba8d802..4d8d30b 100644 --- a/src/WebWindow.Native/WebWindow.Windows.cpp +++ b/src/WebWindow.Native/WebWindow.Windows.cpp @@ -340,7 +340,15 @@ void WebWindow::SendMessage(UTF8String message) delete[] messageW; } +void WebWindow::CloseWindow() +{ + //SendMessage(_hWnd, 0x0010, 0, 0); + WindowProc(_hWnd, 0x0002, 0, 0); +} + void WebWindow::AddCustomScheme(UTF8String scheme, WebResourceRequestedCallback requestHandler) { _schemeToRequestHandler[scheme] = requestHandler; } + + diff --git a/src/WebWindow.Native/WebWindow.h b/src/WebWindow.Native/WebWindow.h index e7cab14..3269f1f 100644 --- a/src/WebWindow.Native/WebWindow.h +++ b/src/WebWindow.Native/WebWindow.h @@ -60,5 +60,6 @@ class WebWindow void NavigateToUrl(UTF8String url); void NavigateToString(UTF8String content); void SendMessage(UTF8String message); + void CloseWindow(); void AddCustomScheme(UTF8String scheme, WebResourceRequestedCallback requestHandler); }; diff --git a/src/WebWindow/WebWindow.cs b/src/WebWindow/WebWindow.cs index 35b0e19..8d2c664 100644 --- a/src/WebWindow/WebWindow.cs +++ b/src/WebWindow/WebWindow.cs @@ -25,7 +25,7 @@ public class WebWindow : IDisposable [DllImport(DllName)] static extern void WebWindow_ShowMessage(IntPtr instance, [MarshalAs(UnmanagedType.LPUTF8Str)] string title, [MarshalAs(UnmanagedType.LPUTF8Str)] string body, uint type); [DllImport(DllName)] static extern void WebWindow_SendMessage(IntPtr instance, [MarshalAs(UnmanagedType.LPUTF8Str)] string message); [DllImport(DllName)] static extern void WebWindow_AddCustomScheme(IntPtr instance, [MarshalAs(UnmanagedType.LPUTF8Str)] string scheme, IntPtr requestHandler); - [DllImport("user32.dll", CharSet = CharSet.Auto)] static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); + [DllImport(DllName)] static extern void WebWindow_CloseWindow(IntPtr instance); private List _gcHandlesToFree = new List(); private IntPtr _nativeWebWindow; @@ -211,7 +211,7 @@ private void AddCustomScheme(string scheme, ResolveWebResourceDelegate requestHa public void Close() { - SendMessage(Hwnd, 0x0010, IntPtr.Zero, IntPtr.Zero); + WebWindow_CloseWindow(_nativeWebWindow); Dispose(); } From 79102029fb3b696896cb5f45228b4d0f8a3df2cd Mon Sep 17 00:00:00 2001 From: amcateer Date: Thu, 21 Nov 2019 23:26:22 -0500 Subject: [PATCH 3/4] Moved Close window code into Dispose method --- src/WebWindow/WebWindow.cs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/WebWindow/WebWindow.cs b/src/WebWindow/WebWindow.cs index 8d2c664..8126a58 100644 --- a/src/WebWindow/WebWindow.cs +++ b/src/WebWindow/WebWindow.cs @@ -209,14 +209,9 @@ private void AddCustomScheme(string scheme, ResolveWebResourceDelegate requestHa WebWindow_AddCustomScheme(_nativeWebWindow, scheme, callbackPtr); } - public void Close() - { - WebWindow_CloseWindow(_nativeWebWindow); - Dispose(); - } - public void Dispose() { + WebWindow_CloseWindow(_nativeWebWindow); Dispose(true); GC.SuppressFinalize(this); } From ea1f05414b430391ac1de47cb95f316ff942f67b Mon Sep 17 00:00:00 2001 From: amcateer Date: Fri, 22 Nov 2019 01:23:26 -0500 Subject: [PATCH 4/4] Changed how I am destorying GTK Window --- src/WebWindow.Native/WebWindow.Linux.cpp | 3 +- src/WebWindow.Native/WebWindow.Native.vcxproj | 63 +++++++++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/src/WebWindow.Native/WebWindow.Linux.cpp b/src/WebWindow.Native/WebWindow.Linux.cpp index 7cf0551..633ba3c 100644 --- a/src/WebWindow.Native/WebWindow.Linux.cpp +++ b/src/WebWindow.Native/WebWindow.Linux.cpp @@ -10,7 +10,6 @@ #include std::mutex invokeLockMutex; -GtkWidget* _window; struct InvokeWaitInfo { @@ -218,7 +217,7 @@ void WebWindow::AddCustomScheme(UTF8String scheme, WebResourceRequestedCallback void WebWindow::CloseWindow() { - gtk_close_window(_window); + gtk_main_quit(); } #endif diff --git a/src/WebWindow.Native/WebWindow.Native.vcxproj b/src/WebWindow.Native/WebWindow.Native.vcxproj index 3c5ef82..8da4d94 100644 --- a/src/WebWindow.Native/WebWindow.Native.vcxproj +++ b/src/WebWindow.Native/WebWindow.Native.vcxproj @@ -1,10 +1,18 @@ + + Debug + ARM + Debug Win32 + + Release + ARM + Release Win32 @@ -34,6 +42,12 @@ v142 Unicode + + Application + true + v142 + Unicode + Application false @@ -41,6 +55,13 @@ true Unicode + + Application + false + v142 + true + Unicode + DynamicLibrary true @@ -62,9 +83,15 @@ + + + + + + @@ -75,12 +102,18 @@ true + + true + true false + + false + false @@ -97,6 +130,19 @@ Windows + + + Level3 + Disabled + true + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + true + Windows + + Level3 @@ -128,6 +174,23 @@ Windows + + + Level3 + MaxSpeed + true + true + true + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + true + true + true + Windows + + Level3