diff --git a/Source/Libs/AtkSharp/AtkSharp-api.xml b/Source/Libs/AtkSharp/AtkSharp-api.xml index 4be018fc8..e876131c5 100644 --- a/Source/Libs/AtkSharp/AtkSharp-api.xml +++ b/Source/Libs/AtkSharp/AtkSharp-api.xml @@ -6,7 +6,7 @@ Please DO NOT MODIFY THIS FILE, modify .metadata files instead. --> - + diff --git a/Source/Libs/GLibSharp/GLibSharp-api.xml b/Source/Libs/GLibSharp/GLibSharp-api.xml index e34ecc234..6f15f8bee 100644 --- a/Source/Libs/GLibSharp/GLibSharp-api.xml +++ b/Source/Libs/GLibSharp/GLibSharp-api.xml @@ -1,6 +1,6 @@ - + diff --git a/Source/Libs/GdkSharp/GdkSharp-api.xml b/Source/Libs/GdkSharp/GdkSharp-api.xml index 4ba1a40d5..ff9ba8380 100644 --- a/Source/Libs/GdkSharp/GdkSharp-api.xml +++ b/Source/Libs/GdkSharp/GdkSharp-api.xml @@ -6,7 +6,7 @@ Please DO NOT MODIFY THIS FILE, modify .metadata files instead. --> - + @@ -5301,7 +5301,7 @@ - + diff --git a/Source/Libs/GioSharp/GioSharp-api.xml b/Source/Libs/GioSharp/GioSharp-api.xml index 27891c837..8aa79bec9 100644 --- a/Source/Libs/GioSharp/GioSharp-api.xml +++ b/Source/Libs/GioSharp/GioSharp-api.xml @@ -6,7 +6,7 @@ Please DO NOT MODIFY THIS FILE, modify .metadata files instead. --> - + diff --git a/Source/Libs/GtkSharp/Application.cs b/Source/Libs/GtkSharp/Application.cs index 539dd7623..c7ac7dea7 100644 --- a/Source/Libs/GtkSharp/Application.cs +++ b/Source/Libs/GtkSharp/Application.cs @@ -31,35 +31,12 @@ namespace Gtk { const int WS_EX_TOOLWINDOW = 0x00000080; const int WS_OVERLAPPEDWINDOW = 0x00CF0000; - [UnmanagedFunctionPointer(CallingConvention.Winapi)] - delegate IntPtr d_Win32CreateWindow(int dwExStyle, string lpClassName, string lpWindowName,int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, IntPtr hMenu, IntPtr hInstance, IntPtr lParam); - static d_Win32CreateWindow Win32CreateWindow; - - [UnmanagedFunctionPointer(CallingConvention.Winapi)] - delegate bool d_Win32DestroyWindow(IntPtr window); - static d_Win32DestroyWindow Win32DestroyWindow; - static Application () { if (!GLib.Thread.Supported) GLib.Thread.Init (); - - switch (Environment.OSVersion.Platform) { - case PlatformID.Win32NT: - case PlatformID.Win32S: - case PlatformID.Win32Windows: - case PlatformID.WinCE: - Win32CreateWindow = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load("user32.dll"), "CreateWindowExW")); - Win32DestroyWindow = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load("user32.dll"), "DestroyWindow")); - - // No idea why we need to create that window, but it enables visual styles on the Windows platform - IntPtr window = Win32CreateWindow (WS_EX_TOOLWINDOW, "static", "gtk-sharp visual styles window", WS_OVERLAPPEDWINDOW, 0, 0, 0, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); - Win32DestroyWindow (window); - break; - default: - break; - } } + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate void d_gtk_init(ref int argc, ref IntPtr argv); static d_gtk_init gtk_init = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_init")); diff --git a/Source/Libs/GtkSharp/GtkSharp-api.xml b/Source/Libs/GtkSharp/GtkSharp-api.xml index 56ae9d1a5..00dea7387 100644 --- a/Source/Libs/GtkSharp/GtkSharp-api.xml +++ b/Source/Libs/GtkSharp/GtkSharp-api.xml @@ -6,7 +6,7 @@ Please DO NOT MODIFY THIS FILE, modify .metadata files instead. --> - + diff --git a/Source/Libs/PangoSharp/PangoSharp-api.xml b/Source/Libs/PangoSharp/PangoSharp-api.xml index 872ad00ee..b08b430d8 100644 --- a/Source/Libs/PangoSharp/PangoSharp-api.xml +++ b/Source/Libs/PangoSharp/PangoSharp-api.xml @@ -6,7 +6,7 @@ Please DO NOT MODIFY THIS FILE, modify .metadata files instead. --> - + diff --git a/Source/Libs/PangoSharp/PangoSharp.metadata b/Source/Libs/PangoSharp/PangoSharp.metadata index 161bcfef3..8b17b57d0 100644 --- a/Source/Libs/PangoSharp/PangoSharp.metadata +++ b/Source/Libs/PangoSharp/PangoSharp.metadata @@ -36,7 +36,7 @@ VersionString 1 CairoHelper - libpangocairo-1.0-0.dll + Library.PangoCairo 1 1 ref diff --git a/Source/Libs/Shared/GLibrary.cs b/Source/Libs/Shared/GLibrary.cs index 3503952be..66f624b97 100644 --- a/Source/Libs/Shared/GLibrary.cs +++ b/Source/Libs/Shared/GLibrary.cs @@ -6,58 +6,56 @@ class GLibrary { private static Dictionary _libraries; private static Dictionary _customlibraries; - private static List<(Library Library, string WindowsLib, string LinuxLib, string OSXLib)> _libdict; + private static Dictionary _libraryDefinitions; static GLibrary() { _customlibraries = new Dictionary(); _libraries = new Dictionary(); - _libdict = new List<(Library, string, string, string)>(); - _libdict.Add((Library.GLib, "libglib-2.0-0.dll", "libglib-2.0.so.0", "libglib-2.0.0.dylib")); - _libdict.Add((Library.GObject, "libgobject-2.0-0.dll", "libgobject-2.0.so.0", "libgobject-2.0.0.dylib")); - _libdict.Add((Library.Cairo, "libcairo-2.dll", "libcairo.so.2", "libcairo.2.dylib")); - _libdict.Add((Library.Gio, "libgio-2.0-0.dll", "libgio-2.0.so.0", "libgio-2.0.0.dylib")); - _libdict.Add((Library.Atk, "libatk-1.0-0.dll", "libatk-1.0.so.0", "libatk-1.0.0.dylib")); - _libdict.Add((Library.Pango, "libpango-1.0-0.dll", "libpango-1.0.so.0", "libpango-1.0.0.dylib")); - _libdict.Add((Library.Gdk, "libgdk-3-0.dll", "libgdk-3.so.0", "libgdk-3.0.dylib")); - _libdict.Add((Library.GdkPixbuf, "libgdk_pixbuf-2.0-0.dll", "libgdk_pixbuf-2.0.so.0", "libgdk_pixbuf-2.0.dylib")); - _libdict.Add((Library.Gtk, "libgtk-3-0.dll", "libgtk-3.so.0", "libgtk-3.0.dylib")); - _libdict.Add((Library.PangoCairo, "libpangocairo-1.0-0.dll", "libpangocairo-1.0.so.0", "libpangocairo-1.0.0.dylib")); - } - - public static IntPtr Load(string libname) - { - var index = _libdict.FindIndex((e) => (e.WindowsLib == libname || e.LinuxLib == libname || e.OSXLib == libname)); - - if (index != -1) - return Load(_libdict[index].Library); - - var ret = IntPtr.Zero; - if (!_customlibraries.TryGetValue(libname, out ret)) - _customlibraries[libname] = ret = FuncLoader.LoadLibrary(libname); - - return ret; + _libraryDefinitions = new Dictionary(); + _libraryDefinitions[Library.GLib] = new[] { "libglib-2.0-0.dll", "libglib-2.0.so.0", "libglib-2.0.0.dylib", "glib-2.dll" }; + _libraryDefinitions[Library.GObject] = new[] { "libgobject-2.0-0.dll", "libgobject-2.0.so.0", "libgobject-2.0.0.dylib", "gobject-2.dll" }; + _libraryDefinitions[Library.Cairo] = new[] { "libcairo-2.dll", "libcairo.so.2", "libcairo.2.dylib", "cairo.dll" }; + _libraryDefinitions[Library.Gio] = new[] { "libgio-2.0-0.dll", "libgio-2.0.so.0", "libgio-2.0.0.dylib", "gio-2.dll" }; + _libraryDefinitions[Library.Atk] = new[] { "libatk-1.0-0.dll", "libatk-1.0.so.0", "libatk-1.0.0.dylib", "atk-1.dll" }; + _libraryDefinitions[Library.Pango] = new[] { "libpango-1.0-0.dll", "libpango-1.0.so.0", "libpango-1.0.0.dylib", "pango-1.dll" }; + _libraryDefinitions[Library.Gdk] = new[] { "libgdk-3-0.dll", "libgdk-3.so.0", "libgdk-3.0.dylib", "gdk-3.dll" }; + _libraryDefinitions[Library.GdkPixbuf] = new[] { "libgdk_pixbuf-2.0-0.dll", "libgdk_pixbuf-2.0.so.0", "libgdk_pixbuf-2.0.dylib", "gdk_pixbuf-2.dll" }; + _libraryDefinitions[Library.Gtk] = new[] { "libgtk-3-0.dll", "libgtk-3.so.0", "libgtk-3.0.dylib", "gtk-3.dll" }; + _libraryDefinitions[Library.PangoCairo] = new[] { "libpangocairo-1.0-0.dll", "libpangocairo-1.0.so.0", "libpangocairo-1.0.0.dylib", "pangocairo-1.dll" }; } public static IntPtr Load(Library library) { - IntPtr ret = IntPtr.Zero; - if (!_libraries.TryGetValue(library, out ret)) + var ret = IntPtr.Zero; + if (_libraries.TryGetValue(library, out ret)) + return ret; + + if (FuncLoader.IsWindows) + ret = FuncLoader.LoadLibrary(_libraryDefinitions[library][0]); + else if (FuncLoader.IsOSX) + ret = FuncLoader.LoadLibrary(_libraryDefinitions[library][2]); + else + ret = FuncLoader.LoadLibrary(_libraryDefinitions[library][1]); + + if (ret == IntPtr.Zero) { - var i = _libdict.Find((e) => e.Library == library); - var s = i.LinuxLib; + for (int i = 0; i < _libraryDefinitions[library].Length; i++) + { + ret = FuncLoader.LoadLibrary(_libraryDefinitions[library][i]); - if (FuncLoader.IsWindows) - s = i.WindowsLib; - else if (FuncLoader.IsOSX) - s = i.OSXLib; - - _libraries[library] = ret = FuncLoader.LoadLibrary(s); + if (ret != IntPtr.Zero) + break; + } } if (ret == IntPtr.Zero) - throw new DllNotFoundException(library.ToString()); + { + var err = library + ": " + string.Join(", ", _libraryDefinitions); + throw new DllNotFoundException(err); + } + _libraries[library] = ret; return ret; } } \ No newline at end of file diff --git a/Source/Tools/GapiCodegen/Ctor.cs b/Source/Tools/GapiCodegen/Ctor.cs index 9a2653b6f..8acde2a42 100644 --- a/Source/Tools/GapiCodegen/Ctor.cs +++ b/Source/Tools/GapiCodegen/Ctor.cs @@ -67,7 +67,7 @@ namespace GtkSharp.Generation { { sw.WriteLine("\t\t[UnmanagedFunctionPointer (CallingConvention.Cdecl)]"); sw.WriteLine("\t\tdelegate IntPtr d_{0}({1});", CName, Parameters.ImportSignature); - sw.WriteLine("\t\tstatic d_{0} {0} = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(\"{1}\"), \"{0}\"));", CName, LibraryName); + sw.WriteLine("\t\tstatic d_{0} {0} = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load({1}), \"{0}\"));", CName, LibraryName); sw.WriteLine(); } diff --git a/Source/Tools/GapiCodegen/EnumGen.cs b/Source/Tools/GapiCodegen/EnumGen.cs index 1db901b89..ec942cfb4 100644 --- a/Source/Tools/GapiCodegen/EnumGen.cs +++ b/Source/Tools/GapiCodegen/EnumGen.cs @@ -121,7 +121,7 @@ namespace GtkSharp.Generation { var funcname = Elem.GetAttribute("gtype"); sw.WriteLine ("\t\t[UnmanagedFunctionPointer (CallingConvention.Cdecl)]"); sw.WriteLine ("\t\tdelegate IntPtr d_" + funcname + "();"); - sw.WriteLine ("\t\tstatic d_" + funcname + " " + funcname + " = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(\"" + LibraryName + "\"), \"" + funcname + "\"));"); + sw.WriteLine ("\t\tstatic d_" + funcname + " " + funcname + " = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(" + LibraryName + "), \"" + funcname + "\"));"); sw.WriteLine (); sw.WriteLine ("\t\tpublic static GLib.GType GType {"); sw.WriteLine ("\t\t\tget {"); diff --git a/Source/Tools/GapiCodegen/Method.cs b/Source/Tools/GapiCodegen/Method.cs index e37e0c0dd..818fcb87a 100644 --- a/Source/Tools/GapiCodegen/Method.cs +++ b/Source/Tools/GapiCodegen/Method.cs @@ -198,7 +198,7 @@ namespace GtkSharp.Generation { sw.WriteLine("\t\tdelegate " + retval.CSType + " d_" + CName + "(" + import_sig + ");"); else sw.WriteLine("\t\tdelegate " + retval.MarshalType + " d_" + CName + "(" + import_sig + ");"); - sw.WriteLine("\t\tstatic d_" + CName + " " + CName + " = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(\"" + LibraryName + "\"), \"" + CName + "\"));"); + sw.WriteLine("\t\tstatic d_" + CName + " " + CName + " = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(" + LibraryName + "), \"" + CName + "\"));"); sw.WriteLine(); } diff --git a/Source/Tools/GapiCodegen/OpaqueGen.cs b/Source/Tools/GapiCodegen/OpaqueGen.cs index 288efd17d..8acabb087 100644 --- a/Source/Tools/GapiCodegen/OpaqueGen.cs +++ b/Source/Tools/GapiCodegen/OpaqueGen.cs @@ -186,7 +186,7 @@ namespace GtkSharp.Generation { #endif if (set_gvalue != null) { sw.WriteLine("\t\tdelegate IntPtr d_{0}(ref GLib.Value val, IntPtr obj);", set_gvalue.CName); - sw.WriteLine("\t\tstatic d_{0} {0} = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(\"{1}\"), \"{0}\"));", set_gvalue.CName, LibraryName); + sw.WriteLine("\t\tstatic d_{0} {0} = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load({1}), \"{0}\"));", set_gvalue.CName, LibraryName); sw.WriteLine (); sw.WriteLine ("\t\tpublic void SetGValue (ref GLib.Value val)"); sw.WriteLine ("\t\t{");