[f-spot: 2/8] bundle gio-sharp
- From: Stephane Delcroix <sdelcroix src gnome org>
- To: svn-commits-list gnome org
- Subject: [f-spot: 2/8] bundle gio-sharp
- Date: Tue, 26 May 2009 07:13:29 -0400 (EDT)
commit 72c32cf79e423c85da56a24c23e1902c723f6cf4
Author: Stephane Delcroix <stephane delcroix org>
Date: Tue May 26 11:42:59 2009 +0200
bundle gio-sharp
---
configure.ac | 3 +
gio-sharp/Makefile.am | 18 +
gio-sharp/generator/AliasGen.cs | 30 +
gio-sharp/generator/BoxedGen.cs | 82 +
gio-sharp/generator/ByRefGen.cs | 63 +
gio-sharp/generator/CallbackGen.cs | 306 ++
gio-sharp/generator/ChildProperty.cs | 45 +
gio-sharp/generator/ClassBase.cs | 480 +++
gio-sharp/generator/ClassGen.cs | 94 +
gio-sharp/generator/CodeGenerator.cs | 122 +
gio-sharp/generator/ConstFilenameGen.cs | 52 +
gio-sharp/generator/ConstStringGen.cs | 59 +
gio-sharp/generator/Ctor.cs | 165 +
gio-sharp/generator/EnumGen.cs | 127 +
gio-sharp/generator/FieldBase.cs | 270 ++
gio-sharp/generator/GenBase.cs | 142 +
gio-sharp/generator/GenerationInfo.cs | 188 ++
gio-sharp/generator/HandleBase.cs | 81 +
gio-sharp/generator/IAccessor.cs | 29 +
gio-sharp/generator/IGeneratable.cs | 71 +
gio-sharp/generator/IManualMarshaler.cs | 32 +
gio-sharp/generator/InterfaceGen.cs | 384 +++
gio-sharp/generator/LPGen.cs | 58 +
gio-sharp/generator/LPUGen.cs | 58 +
gio-sharp/generator/Makefile.am | 66 +
gio-sharp/generator/ManagedCallString.cs | 152 +
gio-sharp/generator/ManualGen.cs | 58 +
gio-sharp/generator/MarshalGen.cs | 56 +
gio-sharp/generator/Method.cs | 304 ++
gio-sharp/generator/MethodBase.cs | 184 ++
gio-sharp/generator/MethodBody.cs | 177 ++
gio-sharp/generator/ObjectBase.cs | 36 +
gio-sharp/generator/ObjectField.cs | 48 +
gio-sharp/generator/ObjectGen.cs | 425 +++
gio-sharp/generator/OpaqueGen.cs | 230 ++
gio-sharp/generator/Parameters.cs | 728 +++++
gio-sharp/generator/Parser.cs | 170 +
gio-sharp/generator/Property.cs | 193 ++
gio-sharp/generator/PropertyBase.cs | 122 +
gio-sharp/generator/ReturnValue.cs | 170 +
gio-sharp/generator/Signal.cs | 587 ++++
gio-sharp/generator/Signature.cs | 123 +
gio-sharp/generator/SimpleBase.cs | 121 +
gio-sharp/generator/SimpleGen.cs | 31 +
gio-sharp/generator/Statistics.cs | 197 ++
gio-sharp/generator/StructBase.cs | 230 ++
gio-sharp/generator/StructField.cs | 149 +
gio-sharp/generator/StructGen.cs | 53 +
gio-sharp/generator/SymbolTable.cs | 412 +++
gio-sharp/generator/VMSignature.cs | 75 +
gio-sharp/generator/VirtualMethod.cs | 168 +
gio-sharp/gio/AppInfoAdapter.custom | 28 +
gio-sharp/gio/AssemblyInfo.cs | 7 +
gio-sharp/gio/File.custom | 31 +
gio-sharp/gio/FileAdapter.custom | 46 +
gio-sharp/gio/FileEnumerator.custom | 59 +
gio-sharp/gio/FileFactory.cs | 59 +
gio-sharp/gio/Gio.metadata | 58 +
gio-sharp/gio/GioStream.cs | 215 ++
gio-sharp/gio/Makefile.am | 43 +
gio-sharp/gio/gio-api.raw | 5078 ++++++++++++++++++++++++++++++
gio-sharp/gio/gtk-sharp.snk | Bin 0 -> 596 bytes
62 files changed, 13848 insertions(+), 0 deletions(-)
diff --git a/configure.ac b/configure.ac
index a44b900..8c90148 100644
--- a/configure.ac
+++ b/configure.ac
@@ -356,4 +356,7 @@ f-spot.spec
f-spot.desktop.in
f-spot-view.desktop.in
f-spot-import.desktop.in
+gio-sharp/Makefile
+gio-sharp/gio/Makefile
+gio-sharp/generator/Makefile
)
diff --git a/gio-sharp/Makefile.am b/gio-sharp/Makefile.am
new file mode 100644
index 0000000..b739437
--- /dev/null
+++ b/gio-sharp/Makefile.am
@@ -0,0 +1,18 @@
+SUBDIRS = \
+ generator \
+ gio
+
+fetch:
+ rm -rf fetch
+ git clone git://gitorious.org/gio-sharp/mainline.git fetch
+
+update:
+ cp fetch/generator/*.cs generator/
+ cp fetch/gio/*.custom \
+ fetch/gio/*.cs \
+ fetch/gio/gio-api.raw \
+ fetch/gio/Gio.metadata \
+ fetch/gio/gtk-sharp.snk \
+ gio
+
+.PHONY: fetch update
diff --git a/gio-sharp/generator/AliasGen.cs b/gio-sharp/generator/AliasGen.cs
new file mode 100644
index 0000000..19911d6
--- /dev/null
+++ b/gio-sharp/generator/AliasGen.cs
@@ -0,0 +1,30 @@
+// GtkSharp.Generation.AliasGen.cs - The Alias type Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2003 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+namespace GtkSharp.Generation {
+
+ using System;
+
+ public class AliasGen : SimpleBase {
+
+ public AliasGen (string ctype, string type) : base (ctype, type, String.Empty) {}
+ }
+}
+
diff --git a/gio-sharp/generator/BoxedGen.cs b/gio-sharp/generator/BoxedGen.cs
new file mode 100644
index 0000000..759868c
--- /dev/null
+++ b/gio-sharp/generator/BoxedGen.cs
@@ -0,0 +1,82 @@
+// GtkSharp.Generation.BoxedGen.cs - The Boxed Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.IO;
+ using System.Xml;
+
+ public class BoxedGen : StructBase {
+
+ public BoxedGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
+
+ public override void Generate (GenerationInfo gen_info)
+ {
+ Method copy = methods["Copy"] as Method;
+ methods.Remove ("Copy");
+ methods.Remove ("Free");
+
+ gen_info.CurrentType = Name;
+
+ StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
+ base.Generate (gen_info);
+ sw.WriteLine ("\t\t[DllImport(\"glibsharpglue-2\")]");
+ sw.WriteLine ("\t\tstatic extern IntPtr glibsharp_value_get_boxed (ref GLib.Value val);");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\t[DllImport(\"glibsharpglue-2\")]");
+ sw.WriteLine ("\t\tstatic extern void glibsharp_value_set_boxed (ref GLib.Value val, ref " + QualifiedName + " boxed);");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tpublic static explicit operator GLib.Value (" + QualifiedName + " boxed)");
+ sw.WriteLine ("\t\t{");
+
+ sw.WriteLine ("\t\t\tGLib.Value val = GLib.Value.Empty;");
+ sw.WriteLine ("\t\t\tval.Init (" + QualifiedName + ".GType);");
+ sw.WriteLine ("\t\t\tglibsharp_value_set_boxed (ref val, ref boxed);");
+ sw.WriteLine ("\t\t\treturn val;");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tpublic static explicit operator " + QualifiedName + " (GLib.Value val)");
+ sw.WriteLine ("\t\t{");
+
+ sw.WriteLine ("\t\t\tIntPtr boxed_ptr = glibsharp_value_get_boxed (ref val);");
+ sw.WriteLine ("\t\t\treturn New (boxed_ptr);");
+ sw.WriteLine ("\t\t}");
+
+ if (copy != null && copy.IsDeprecated) {
+ sw.WriteLine ();
+ sw.WriteLine ("\t\t[Obsolete(\"This is a no-op\")]");
+ sw.WriteLine ("\t\tpublic " + QualifiedName + " Copy() {");
+ sw.WriteLine ("\t\t\treturn this;");
+ sw.WriteLine ("\t\t}");
+ }
+
+ sw.WriteLine ("#endregion");
+ AppendCustom(sw, gen_info.CustomDir);
+ sw.WriteLine ("\t}");
+ sw.WriteLine ("}");
+ sw.Close ();
+ gen_info.Writer = null;
+ Statistics.BoxedCount++;
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/ByRefGen.cs b/gio-sharp/generator/ByRefGen.cs
new file mode 100644
index 0000000..7a2641e
--- /dev/null
+++ b/gio-sharp/generator/ByRefGen.cs
@@ -0,0 +1,63 @@
+// GtkSharp.Generation.ByRefGen.cs - The ByRef type Generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2003 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+
+ public class ByRefGen : SimpleBase, IManualMarshaler {
+
+ public ByRefGen (string ctype, string type) : base (ctype, type, type + ".Empty") {}
+
+ public override string MarshalType {
+ get {
+ return "IntPtr";
+ }
+ }
+
+ public override string CallByName (string var_name)
+ {
+ return "native_" + var_name;
+ }
+
+ public string AllocNative ()
+ {
+ return "Marshal.AllocHGlobal (Marshal.SizeOf (typeof (" + QualifiedName + ")))";
+ }
+
+ public string AllocNative (string var_name)
+ {
+ return "GLib.Marshaller.StructureToPtrAlloc (" + var_name + ")";
+ }
+
+ public override string FromNative (string var_name)
+ {
+ return String.Format ("({0}) Marshal.PtrToStructure ({1}, typeof ({0}))", QualifiedName, var_name);
+ }
+
+ public string ReleaseNative (string var_name)
+ {
+ return "Marshal.FreeHGlobal (" + var_name + ")";
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/CallbackGen.cs b/gio-sharp/generator/CallbackGen.cs
new file mode 100644
index 0000000..a30cfa5
--- /dev/null
+++ b/gio-sharp/generator/CallbackGen.cs
@@ -0,0 +1,306 @@
+// GtkSharp.Generation.CallbackGen.cs - The Callback Generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2002-2003 Mike Kestner
+// Copyright (c) 2007 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.IO;
+ using System.Xml;
+
+ public class CallbackGen : GenBase, IAccessor {
+
+ private Parameters parms;
+ private Signature sig = null;
+ private ReturnValue retval;
+ private bool valid = true;
+
+ public CallbackGen (XmlElement ns, XmlElement elem) : base (ns, elem)
+ {
+ retval = new ReturnValue (elem ["return-type"]);
+ parms = new Parameters (elem ["parameters"]);
+ parms.HideData = true;
+ }
+
+ public override string DefaultValue {
+ get { return "null"; }
+ }
+
+ public override bool Validate ()
+ {
+ if (!retval.Validate ()) {
+ Console.WriteLine ("rettype: " + retval.CType + " in callback " + CName);
+ Statistics.ThrottledCount++;
+ valid = false;
+ return false;
+ }
+
+ if (!parms.Validate ()) {
+ Console.WriteLine (" in callback " + CName);
+ Statistics.ThrottledCount++;
+ valid = false;
+ return false;
+ }
+
+ valid = true;
+ return true;
+ }
+
+ public string InvokerName {
+ get {
+ if (!valid)
+ return String.Empty;
+ return NS + "Sharp." + Name + "Invoker";
+ }
+ }
+
+ public override string MarshalType {
+ get {
+ if (valid)
+ return NS + "Sharp." + Name + "Native";
+ else
+ return "";
+ }
+ }
+
+ public override string CallByName (string var_name)
+ {
+ return var_name + ".NativeDelegate";
+ }
+
+ public override string FromNative (string var)
+ {
+ return NS + "Sharp." + Name + "Wrapper.GetManagedDelegate (" + var + ")";
+ }
+
+ public void WriteAccessors (StreamWriter sw, string indent, string var)
+ {
+ sw.WriteLine (indent + "get {");
+ sw.WriteLine (indent + "\treturn " + FromNative (var) + ";");
+ sw.WriteLine (indent + "}");
+ }
+
+ string CastFromInt (string type)
+ {
+ return type != "int" ? "(" + type + ") " : "";
+ }
+
+ string InvokeString {
+ get {
+ if (parms.Count == 0)
+ return String.Empty;
+
+ string[] result = new string [parms.Count];
+ for (int i = 0; i < parms.Count; i++) {
+ Parameter p = parms [i];
+ IGeneratable igen = p.Generatable;
+
+ if (i > 0 && parms [i - 1].IsString && p.IsLength) {
+ string string_name = parms [i - 1].Name;
+ result[i] = igen.CallByName (CastFromInt (p.CSType) + "System.Text.Encoding.UTF8.GetByteCount (" + string_name + ")");
+ continue;
+ }
+
+ p.CallName = p.Name;
+ result [i] = p.CallString;
+ if (p.IsUserData)
+ result [i] = "__data";
+ }
+
+ return String.Join (", ", result);
+ }
+ }
+
+ MethodBody body;
+
+ void GenInvoker (GenerationInfo gen_info, StreamWriter sw)
+ {
+ if (sig == null)
+ sig = new Signature (parms);
+
+ sw.WriteLine ("\tinternal class " + Name + "Invoker {");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\t" + Name + "Native native_cb;");
+ sw.WriteLine ("\t\tIntPtr __data;");
+ sw.WriteLine ("\t\tGLib.DestroyNotify __notify;");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\t~" + Name + "Invoker ()");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tif (__notify == null)");
+ sw.WriteLine ("\t\t\t\treturn;");
+ sw.WriteLine ("\t\t\t__notify (__data);");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tinternal " + Name + "Invoker (" + Name + "Native native_cb) : this (native_cb, IntPtr.Zero, null) {}");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tinternal " + Name + "Invoker (" + Name + "Native native_cb, IntPtr data) : this (native_cb, data, null) {}");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tinternal " + Name + "Invoker (" + Name + "Native native_cb, IntPtr data, GLib.DestroyNotify notify)");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tthis.native_cb = native_cb;");
+ sw.WriteLine ("\t\t\t__data = data;");
+ sw.WriteLine ("\t\t\t__notify = notify;");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tinternal " + QualifiedName + " Handler {");
+ sw.WriteLine ("\t\t\tget {");
+ sw.WriteLine ("\t\t\t\treturn new " + QualifiedName + "(InvokeNative);");
+ sw.WriteLine ("\t\t\t}");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\t" + retval.CSType + " InvokeNative (" + sig + ")");
+ sw.WriteLine ("\t\t{");
+ body.Initialize (gen_info);
+ string call = "native_cb (" + InvokeString + ")";
+ if (retval.IsVoid)
+ sw.WriteLine ("\t\t\t" + call + ";");
+ else
+ sw.WriteLine ("\t\t\t" + retval.CSType + " result = " + retval.FromNative (call) + ";");
+ body.Finish (sw, String.Empty);
+ if (!retval.IsVoid)
+ sw.WriteLine ("\t\t\treturn result;");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ("\t}");
+ sw.WriteLine ();
+ }
+
+ public string GenWrapper (GenerationInfo gen_info)
+ {
+ string wrapper = Name + "Native";
+ string qualname = MarshalType;
+
+ if (!Validate ())
+ return String.Empty;
+
+ body = new MethodBody (parms);
+
+ StreamWriter save_sw = gen_info.Writer;
+ StreamWriter sw = gen_info.Writer = gen_info.OpenStream (qualname);
+
+ sw.WriteLine ("namespace " + NS + "Sharp {");
+ sw.WriteLine ();
+ sw.WriteLine ("\tusing System;");
+ sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+ sw.WriteLine ();
+ sw.WriteLine ("#region Autogenerated code");
+ sw.WriteLine ("\t[GLib.CDeclCallback]");
+ sw.WriteLine ("\tinternal delegate " + retval.MarshalType + " " + wrapper + "(" + parms.ImportSignature + ");");
+ sw.WriteLine ();
+ GenInvoker (gen_info, sw);
+ sw.WriteLine ("\tinternal class " + Name + "Wrapper {");
+ sw.WriteLine ();
+ ManagedCallString call = new ManagedCallString (parms, false);
+ sw.WriteLine ("\t\tpublic " + retval.MarshalType + " NativeCallback (" + parms.ImportSignature + ")");
+ sw.WriteLine ("\t\t{");
+ string unconditional = call.Unconditional ("\t\t\t");
+ if (unconditional.Length > 0)
+ sw.WriteLine (unconditional);
+ sw.WriteLine ("\t\t\ttry {");
+ string call_setup = call.Setup ("\t\t\t\t");
+ if (call_setup.Length > 0)
+ sw.WriteLine (call_setup);
+ if (retval.CSType == "void")
+ sw.WriteLine ("\t\t\t\tmanaged ({0});", call);
+ else
+ sw.WriteLine ("\t\t\t\t{0} __ret = managed ({1});", retval.CSType, call);
+ string finish = call.Finish ("\t\t\t\t");
+ if (finish.Length > 0)
+ sw.WriteLine (finish);
+ sw.WriteLine ("\t\t\t\tif (release_on_call)\n\t\t\t\t\tgch.Free ();");
+ if (retval.CSType != "void")
+ sw.WriteLine ("\t\t\t\treturn {0};", retval.ToNative ("__ret"));
+
+ /* If the function expects one or more "out" parameters(error parameters are excluded) or has a return value different from void and bool, exceptions
+ * thrown in the managed function have to be considered fatal meaning that an exception is to be thrown and the function call cannot not return
+ */
+ bool fatal = (retval.MarshalType != "void" && retval.MarshalType != "bool") || call.HasOutParam;
+ sw.WriteLine ("\t\t\t} catch (Exception e) {");
+ sw.WriteLine ("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (e, " + (fatal ? "true" : "false") + ");");
+ if (fatal) {
+ sw.WriteLine ("\t\t\t\t// NOTREACHED: Above call does not return.");
+ sw.WriteLine ("\t\t\t\tthrow e;");
+ } else if (retval.MarshalType == "bool") {
+ sw.WriteLine ("\t\t\t\treturn false;");
+ }
+ sw.WriteLine ("\t\t\t}");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tbool release_on_call = false;");
+ sw.WriteLine ("\t\tGCHandle gch;");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tpublic void PersistUntilCalled ()");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\trelease_on_call = true;");
+ sw.WriteLine ("\t\t\tgch = GCHandle.Alloc (this);");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tinternal " + wrapper + " NativeDelegate;");
+ sw.WriteLine ("\t\t" + NS + "." + Name + " managed;");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tpublic " + Name + "Wrapper (" + NS + "." + Name + " managed)");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tthis.managed = managed;");
+ sw.WriteLine ("\t\t\tif (managed != null)");
+ sw.WriteLine ("\t\t\t\tNativeDelegate = new " + wrapper + " (NativeCallback);");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tpublic static " + NS + "." + Name + " GetManagedDelegate (" + wrapper + " native)");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tif (native == null)");
+ sw.WriteLine ("\t\t\t\treturn null;");
+ sw.WriteLine ("\t\t\t" + Name + "Wrapper wrapper = (" + Name + "Wrapper) native.Target;");
+ sw.WriteLine ("\t\t\tif (wrapper == null)");
+ sw.WriteLine ("\t\t\t\treturn null;");
+ sw.WriteLine ("\t\t\treturn wrapper.managed;");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ("\t}");
+ sw.WriteLine ("#endregion");
+ sw.WriteLine ("}");
+ sw.Close ();
+ gen_info.Writer = save_sw;
+ return NS + "Sharp." + Name + "Wrapper";
+ }
+
+ public override void Generate (GenerationInfo gen_info)
+ {
+ gen_info.CurrentType = Name;
+
+ sig = new Signature (parms);
+
+ StreamWriter sw = gen_info.OpenStream (Name);
+
+ sw.WriteLine ("namespace " + NS + " {");
+ sw.WriteLine ();
+ sw.WriteLine ("\tusing System;");
+ sw.WriteLine ();
+ sw.WriteLine ("\t{0} delegate " + retval.CSType + " " + Name + "(" + sig.ToString() + ");", IsInternal ? "internal" : "public");
+ sw.WriteLine ();
+ sw.WriteLine ("}");
+
+ sw.Close ();
+
+ GenWrapper (gen_info);
+
+ Statistics.CBCount++;
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/ChildProperty.cs b/gio-sharp/generator/ChildProperty.cs
new file mode 100644
index 0000000..fe361ed
--- /dev/null
+++ b/gio-sharp/generator/ChildProperty.cs
@@ -0,0 +1,45 @@
+// GtkSharp.Generation.ChildProperty.cs - GtkContainer child properties
+//
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+
+ public class ChildProperty : Property {
+
+ public ChildProperty (XmlElement elem, ClassBase container_type) : base (elem, container_type) {}
+
+ protected override string PropertyAttribute (string qpname) {
+ return "[Gtk.ChildProperty (" + qpname + ")]";
+ }
+
+ protected override string RawGetter (string qpname) {
+ return "parent.ChildGetProperty (child, " + qpname + ")";
+ }
+
+ protected override string RawSetter (string qpname) {
+ return "parent.ChildSetProperty(child, " + qpname + ", val)";
+ }
+
+ }
+}
+
diff --git a/gio-sharp/generator/ClassBase.cs b/gio-sharp/generator/ClassBase.cs
new file mode 100644
index 0000000..e8532f2
--- /dev/null
+++ b/gio-sharp/generator/ClassBase.cs
@@ -0,0 +1,480 @@
+// GtkSharp.Generation.ClassBase.cs - Common code between object
+// and interface wrappers
+//
+// Authors: Rachel Hestilow <hestilow ximian com>
+// Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2002 Rachel Hestilow
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+
+ public abstract class ClassBase : GenBase {
+ protected Hashtable props = new Hashtable();
+ protected Hashtable fields = new Hashtable();
+ protected Hashtable sigs = new Hashtable();
+ protected Hashtable methods = new Hashtable();
+ protected ArrayList interfaces = new ArrayList();
+ protected ArrayList managed_interfaces = new ArrayList();
+ protected ArrayList ctors = new ArrayList();
+
+ private bool ctors_initted = false;
+ private Hashtable clash_map;
+ private bool deprecated = false;
+ private bool isabstract = false;
+
+ public Hashtable Methods {
+ get {
+ return methods;
+ }
+ }
+
+ public Hashtable Signals {
+ get {
+ return sigs;
+ }
+ }
+
+ public ClassBase Parent {
+ get {
+ string parent = Elem.GetAttribute("parent");
+
+ if (parent == "")
+ return null;
+ else
+ return SymbolTable.Table.GetClassGen(parent);
+ }
+ }
+
+ protected ClassBase (XmlElement ns, XmlElement elem) : base (ns, elem) {
+
+ if (elem.HasAttribute ("deprecated")) {
+ string attr = elem.GetAttribute ("deprecated");
+ deprecated = attr == "1" || attr == "true";
+ }
+
+ if (elem.HasAttribute ("abstract")) {
+ string attr = elem.GetAttribute ("abstract");
+ isabstract = attr == "1" || attr == "true";
+ }
+
+ foreach (XmlNode node in elem.ChildNodes) {
+ if (!(node is XmlElement)) continue;
+ XmlElement member = (XmlElement) node;
+ if (member.HasAttribute ("hidden"))
+ continue;
+
+ string name;
+ switch (node.Name) {
+ case "method":
+ name = member.GetAttribute("name");
+ while (methods.ContainsKey(name))
+ name += "mangled";
+ methods.Add (name, new Method (member, this));
+ break;
+
+ case "property":
+ name = member.GetAttribute("name");
+ while (props.ContainsKey(name))
+ name += "mangled";
+ props.Add (name, new Property (member, this));
+ break;
+
+ case "field":
+ name = member.GetAttribute("name");
+ while (fields.ContainsKey (name))
+ name += "mangled";
+ fields.Add (name, new ObjectField (member, this));
+ break;
+
+ case "signal":
+ name = member.GetAttribute("name");
+ while (sigs.ContainsKey(name))
+ name += "mangled";
+ sigs.Add (name, new Signal (member, this));
+ break;
+
+ case "implements":
+ ParseImplements (member);
+ break;
+
+ case "constructor":
+ ctors.Add (new Ctor (member, this));
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ public override bool Validate ()
+ {
+ if (Parent != null && !Parent.ValidateForSubclass ())
+ return false;
+ foreach (string iface in interfaces) {
+ InterfaceGen igen = SymbolTable.Table[iface] as InterfaceGen;
+ if (igen == null) {
+ Console.WriteLine (QualifiedName + " implements unknown GInterface " + iface);
+ return false;
+ }
+ if (!igen.ValidateForSubclass ()) {
+ Console.WriteLine (QualifiedName + " implements invalid GInterface " + iface);
+ return false;
+ }
+ }
+
+ ArrayList invalids = new ArrayList ();
+
+ foreach (Property prop in props.Values) {
+ if (!prop.Validate ()) {
+ Console.WriteLine ("in type " + QualifiedName);
+ invalids.Add (prop);
+ }
+ }
+ foreach (Property prop in invalids)
+ props.Remove (prop.Name);
+ invalids.Clear ();
+
+ foreach (Signal sig in sigs.Values) {
+ if (!sig.Validate ()) {
+ Console.WriteLine ("in type " + QualifiedName);
+ invalids.Add (sig);
+ }
+ }
+ foreach (Signal sig in invalids)
+ sigs.Remove (sig.Name);
+ invalids.Clear ();
+
+ foreach (ObjectField field in fields.Values) {
+ if (!field.Validate ()) {
+ Console.WriteLine ("in type " + QualifiedName);
+ invalids.Add (field);
+ }
+ }
+ foreach (ObjectField field in invalids)
+ fields.Remove (field.Name);
+ invalids.Clear ();
+
+ foreach (Method method in methods.Values) {
+ if (!method.Validate ()) {
+ Console.WriteLine ("in type " + QualifiedName);
+ invalids.Add (method);
+ }
+ }
+ foreach (Method method in invalids)
+ methods.Remove (method.Name);
+ invalids.Clear ();
+
+ foreach (Ctor ctor in ctors) {
+ if (!ctor.Validate ()) {
+ Console.WriteLine ("in type " + QualifiedName);
+ invalids.Add (ctor);
+ }
+ }
+ foreach (Ctor ctor in invalids)
+ ctors.Remove (ctor);
+ invalids.Clear ();
+
+ return true;
+ }
+
+ public virtual bool ValidateForSubclass ()
+ {
+ ArrayList invalids = new ArrayList ();
+
+ foreach (Signal sig in sigs.Values) {
+ if (!sig.Validate ()) {
+ Console.WriteLine ("in type " + QualifiedName);
+ invalids.Add (sig);
+ }
+ }
+ foreach (Signal sig in invalids)
+ sigs.Remove (sig.Name);
+ invalids.Clear ();
+
+ return true;
+ }
+
+ public bool IsDeprecated {
+ get {
+ return deprecated;
+ }
+ }
+
+ public bool IsAbstract {
+ get {
+ return isabstract;
+ }
+ }
+
+ public abstract string AssignToName { get; }
+
+ public abstract string CallByName ();
+
+ public override string DefaultValue {
+ get {
+ return "null";
+ }
+ }
+
+ protected bool IsNodeNameHandled (string name)
+ {
+ switch (name) {
+ case "method":
+ case "property":
+ case "field":
+ case "signal":
+ case "implements":
+ case "constructor":
+ case "disabledefaultconstructor":
+ return true;
+
+ default:
+ return false;
+ }
+ }
+
+ public void GenProperties (GenerationInfo gen_info, ClassBase implementor)
+ {
+ if (props.Count == 0)
+ return;
+
+ foreach (Property prop in props.Values)
+ prop.Generate (gen_info, "\t\t", implementor);
+ }
+
+ public void GenSignals (GenerationInfo gen_info, ClassBase implementor)
+ {
+ if (sigs == null)
+ return;
+
+ foreach (Signal sig in sigs.Values)
+ sig.Generate (gen_info, implementor);
+ }
+
+ protected void GenFields (GenerationInfo gen_info)
+ {
+ foreach (ObjectField field in fields.Values)
+ field.Generate (gen_info, "\t\t");
+ }
+
+ private void ParseImplements (XmlElement member)
+ {
+ foreach (XmlNode node in member.ChildNodes) {
+ if (node.Name != "interface")
+ continue;
+ XmlElement element = (XmlElement) node;
+ if (element.HasAttribute ("hidden"))
+ continue;
+ if (element.HasAttribute ("cname"))
+ interfaces.Add (element.GetAttribute ("cname"));
+ else if (element.HasAttribute ("name"))
+ managed_interfaces.Add (element.GetAttribute ("name"));
+ }
+ }
+
+ protected bool IgnoreMethod (Method method, ClassBase implementor)
+ {
+ if (implementor != null && implementor.QualifiedName != this.QualifiedName && method.IsStatic)
+ return true;
+
+ string mname = method.Name;
+ return ((method.IsSetter || (method.IsGetter && mname.StartsWith("Get"))) &&
+ ((props != null) && props.ContainsKey(mname.Substring(3)) ||
+ (fields != null) && fields.ContainsKey(mname.Substring(3))));
+ }
+
+ public void GenMethods (GenerationInfo gen_info, Hashtable collisions, ClassBase implementor)
+ {
+ if (methods == null)
+ return;
+
+ foreach (Method method in methods.Values) {
+ if (IgnoreMethod (method, implementor))
+ continue;
+
+ string oname = null, oprotection = null;
+ if (collisions != null && collisions.Contains (method.Name)) {
+ oname = method.Name;
+ oprotection = method.Protection;
+ method.Name = QualifiedName + "." + method.Name;
+ method.Protection = "";
+ }
+ method.Generate (gen_info, implementor);
+ if (oname != null) {
+ method.Name = oname;
+ method.Protection = oprotection;
+ }
+ }
+ }
+
+ public Method GetMethod (string name)
+ {
+ return (Method) methods[name];
+ }
+
+ public Property GetProperty (string name)
+ {
+ return (Property) props[name];
+ }
+
+ public Signal GetSignal (string name)
+ {
+ return (Signal) sigs[name];
+ }
+
+ public Method GetMethodRecursively (string name)
+ {
+ return GetMethodRecursively (name, false);
+ }
+
+ public virtual Method GetMethodRecursively (string name, bool check_self)
+ {
+ Method p = null;
+ if (check_self)
+ p = GetMethod (name);
+ if (p == null && Parent != null)
+ p = Parent.GetMethodRecursively (name, true);
+
+ if (check_self && p == null) {
+ foreach (string iface in interfaces) {
+ ClassBase igen = SymbolTable.Table.GetClassGen (iface);
+ if (igen == null)
+ continue;
+ p = igen.GetMethodRecursively (name, true);
+ if (p != null)
+ break;
+ }
+ }
+
+ return p;
+ }
+
+ public virtual Property GetPropertyRecursively (string name)
+ {
+ ClassBase klass = this;
+ Property p = null;
+ while (klass != null && p == null) {
+ p = (Property) klass.GetProperty (name);
+ klass = klass.Parent;
+ }
+
+ return p;
+ }
+
+ public Signal GetSignalRecursively (string name)
+ {
+ return GetSignalRecursively (name, false);
+ }
+
+ public virtual Signal GetSignalRecursively (string name, bool check_self)
+ {
+ Signal p = null;
+ if (check_self)
+ p = GetSignal (name);
+ if (p == null && Parent != null)
+ p = Parent.GetSignalRecursively (name, true);
+
+ if (check_self && p == null) {
+ foreach (string iface in interfaces) {
+ ClassBase igen = SymbolTable.Table.GetClassGen (iface);
+ if (igen == null)
+ continue;
+ p = igen.GetSignalRecursively (name, true);
+ if (p != null)
+ break;
+ }
+ }
+
+ return p;
+ }
+
+ public bool Implements (string iface)
+ {
+ if (interfaces.Contains (iface))
+ return true;
+ else if (Parent != null)
+ return Parent.Implements (iface);
+ else
+ return false;
+ }
+
+ public ArrayList Ctors { get { return ctors; } }
+
+ bool HasStaticCtor (string name)
+ {
+ if (Parent != null && Parent.HasStaticCtor (name))
+ return true;
+
+ foreach (Ctor ctor in Ctors)
+ if (ctor.StaticName == name)
+ return true;
+
+ return false;
+ }
+
+ private void InitializeCtors ()
+ {
+ if (ctors_initted)
+ return;
+
+ if (Parent != null)
+ Parent.InitializeCtors ();
+
+ ArrayList valid_ctors = new ArrayList();
+ clash_map = new Hashtable();
+
+ foreach (Ctor ctor in ctors) {
+ if (clash_map.Contains (ctor.Signature.Types)) {
+ Ctor clash = clash_map [ctor.Signature.Types] as Ctor;
+ Ctor alter = ctor.Preferred ? clash : ctor;
+ alter.IsStatic = true;
+ if (Parent != null && Parent.HasStaticCtor (alter.StaticName))
+ alter.Modifiers = "new ";
+ } else
+ clash_map [ctor.Signature.Types] = ctor;
+
+ valid_ctors.Add (ctor);
+ }
+
+ ctors = valid_ctors;
+ ctors_initted = true;
+ }
+
+ protected virtual void GenCtors (GenerationInfo gen_info)
+ {
+ InitializeCtors ();
+ foreach (Ctor ctor in ctors)
+ ctor.Generate (gen_info);
+ }
+
+ public virtual void Finish (StreamWriter sw, string indent)
+ {
+ }
+
+ public virtual void Prepare (StreamWriter sw, string indent)
+ {
+ }
+ }
+}
diff --git a/gio-sharp/generator/ClassGen.cs b/gio-sharp/generator/ClassGen.cs
new file mode 100644
index 0000000..700a27a
--- /dev/null
+++ b/gio-sharp/generator/ClassGen.cs
@@ -0,0 +1,94 @@
+// GtkSharp.Generation.ClassGen.cs - The Class Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Text;
+ using System.Xml;
+
+ public class ClassGen : ClassBase {
+
+ public ClassGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
+
+ public override string AssignToName {
+ get {
+ return String.Empty;
+ }
+ }
+
+ public override string MarshalType {
+ get {
+ return String.Empty;
+ }
+ }
+
+ public override string CallByName ()
+ {
+ return String.Empty;
+ }
+
+ public override string CallByName (string var)
+ {
+ return String.Empty;
+ }
+
+ public override string FromNative (string var)
+ {
+ return String.Empty;
+ }
+
+ public override void Generate (GenerationInfo gen_info)
+ {
+ gen_info.CurrentType = Name;
+
+ StreamWriter sw = gen_info.Writer = gen_info.OpenStream(Name);
+
+ sw.WriteLine ("namespace " + NS + " {");
+ sw.WriteLine ();
+ sw.WriteLine ("\tusing System;");
+ sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+ sw.WriteLine ();
+
+ sw.WriteLine ("#region Autogenerated code");
+ if (IsDeprecated)
+ sw.WriteLine ("\t[Obsolete]");
+ sw.Write ("\t{0} class " + Name, IsInternal ? "internal" : "public");
+ sw.WriteLine (" {");
+ sw.WriteLine ();
+
+ GenProperties (gen_info, null);
+ GenMethods (gen_info, null, null);
+
+ sw.WriteLine ("#endregion");
+ AppendCustom(sw, gen_info.CustomDir);
+
+ sw.WriteLine ("\t}");
+ sw.WriteLine ("}");
+
+ sw.Close ();
+ gen_info.Writer = null;
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/CodeGenerator.cs b/gio-sharp/generator/CodeGenerator.cs
new file mode 100644
index 0000000..f45c7a0
--- /dev/null
+++ b/gio-sharp/generator/CodeGenerator.cs
@@ -0,0 +1,122 @@
+// GtkSharp.Generation.CodeGenerator.cs - The main code generation engine.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003-2004 Novell Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.Xml;
+
+ public class CodeGenerator {
+
+ public static int Main (string[] args)
+ {
+ if (args.Length < 2) {
+ Console.WriteLine ("Usage: codegen --generate <filename1...>");
+ return 0;
+ }
+
+ bool generate = false;
+ string dir = "";
+ string custom_dir = "";
+ string assembly_name = "";
+ string glue_filename = "";
+ string glue_includes = "";
+ string gluelib_name = "";
+
+ SymbolTable table = SymbolTable.Table;
+ ArrayList gens = new ArrayList ();
+ foreach (string arg in args) {
+ string filename = arg;
+ if (arg == "--generate") {
+ generate = true;
+ continue;
+ } else if (arg == "--include") {
+ generate = false;
+ continue;
+ } else if (arg.StartsWith ("-I:")) {
+ generate = false;
+ filename = filename.Substring (3);
+ } else if (arg.StartsWith ("--outdir=")) {
+ generate = false;
+ dir = arg.Substring (9);
+ continue;
+ } else if (arg.StartsWith ("--customdir=")) {
+ generate = false;
+ custom_dir = arg.Substring (12);
+ continue;
+ } else if (arg.StartsWith ("--assembly-name=")) {
+ generate = false;
+ assembly_name = arg.Substring (16);
+ continue;
+ } else if (arg.StartsWith ("--glue-filename=")) {
+ generate = false;
+ glue_filename = arg.Substring (16);
+ continue;
+ } else if (arg.StartsWith ("--glue-includes=")) {
+ generate = false;
+ glue_includes = arg.Substring (16);
+ continue;
+ } else if (arg.StartsWith ("--gluelib-name=")) {
+ generate = false;
+ gluelib_name = arg.Substring (15);
+ continue;
+ }
+
+ Parser p = new Parser ();
+ IGeneratable[] curr_gens = p.Parse (filename);
+ table.AddTypes (curr_gens);
+ if (generate)
+ gens.AddRange (curr_gens);
+ }
+
+ // Now that everything is loaded, validate all the to-be-
+ // generated generatables and then remove the invalid ones.
+ ArrayList invalids = new ArrayList ();
+ foreach (IGeneratable gen in gens) {
+ if (!gen.Validate ())
+ invalids.Add (gen);
+ }
+ foreach (IGeneratable gen in invalids)
+ gens.Remove (gen);
+
+ GenerationInfo gen_info = null;
+ if (dir != "" || assembly_name != "" || glue_filename != "" || glue_includes != "" || gluelib_name != "")
+ gen_info = new GenerationInfo (dir, custom_dir, assembly_name, glue_filename, glue_includes, gluelib_name);
+
+ foreach (IGeneratable gen in gens) {
+ if (gen_info == null)
+ gen.Generate ();
+ else
+ gen.Generate (gen_info);
+ }
+
+ ObjectGen.GenerateMappers ();
+
+ if (gen_info != null)
+ gen_info.CloseGlueWriter ();
+
+ Statistics.Report();
+ return 0;
+ }
+ }
+}
diff --git a/gio-sharp/generator/ConstFilenameGen.cs b/gio-sharp/generator/ConstFilenameGen.cs
new file mode 100644
index 0000000..562ab9c
--- /dev/null
+++ b/gio-sharp/generator/ConstFilenameGen.cs
@@ -0,0 +1,52 @@
+// ConstFilenameGen.cs - The Const Filename type Generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+
+ public class ConstFilenameGen : SimpleBase, IManualMarshaler {
+
+ public ConstFilenameGen (string ctype) : base (ctype, "string", "null") {}
+
+ public override string MarshalType {
+ get {
+ return "IntPtr";
+ }
+ }
+
+ public override string FromNative (string var)
+ {
+ return "GLib.Marshaller.FilenamePtrToString (" + var + ")";
+ }
+
+ public string AllocNative (string managed_var)
+ {
+ return "GLib.Marshaller.StringToFilenamePtr (" + managed_var + ")";
+ }
+
+ public string ReleaseNative (string native_var)
+ {
+ return "GLib.Marshaller.Free (" + native_var + ")";
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/ConstStringGen.cs b/gio-sharp/generator/ConstStringGen.cs
new file mode 100644
index 0000000..70f882e
--- /dev/null
+++ b/gio-sharp/generator/ConstStringGen.cs
@@ -0,0 +1,59 @@
+// GtkSharp.Generation.ConstStringGen.cs - The Const String type Generatable.
+//
+// Author: Rachel Hestilow <rachel nullenvoid com>
+// Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2003 Rachel Hestilow
+// Copyright (c) 2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+
+ public class ConstStringGen : SimpleBase, IManualMarshaler {
+
+ public ConstStringGen (string ctype) : base (ctype, "string", "null") {}
+
+ public override string MarshalType {
+ get {
+ return "IntPtr";
+ }
+ }
+
+ public override string FromNative (string var)
+ {
+ return "GLib.Marshaller.Utf8PtrToString (" + var + ")";
+ }
+
+ public override string ToNativeReturn (string var)
+ {
+ return "GLib.Marshaller.StringToPtrGStrdup (" + var + ")";
+ }
+
+ public string AllocNative (string managed_var)
+ {
+ return "GLib.Marshaller.StringToPtrGStrdup (" + managed_var + ")";
+ }
+
+ public string ReleaseNative (string native_var)
+ {
+ return "GLib.Marshaller.Free (" + native_var + ")";
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/Ctor.cs b/gio-sharp/generator/Ctor.cs
new file mode 100644
index 0000000..9d57043
--- /dev/null
+++ b/gio-sharp/generator/Ctor.cs
@@ -0,0 +1,165 @@
+// GtkSharp.Generation.Ctor.cs - The Constructor Generation Class.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004-2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+
+ public class Ctor : MethodBase {
+
+ private bool preferred;
+ private string name;
+ private bool needs_chaining = false;
+
+ public Ctor (XmlElement elem, ClassBase implementor) : base (elem, implementor)
+ {
+ if (elem.HasAttribute ("preferred"))
+ preferred = true;
+ if (implementor is ObjectGen)
+ needs_chaining = true;
+ name = implementor.Name;
+ }
+
+ public bool Preferred {
+ get { return preferred; }
+ set { preferred = value; }
+ }
+
+ public string StaticName {
+ get {
+ if (!IsStatic)
+ return String.Empty;
+
+ string[] toks = CName.Substring(CName.IndexOf("new")).Split ('_');
+ string result = String.Empty;
+
+ foreach (string tok in toks)
+ result += tok.Substring(0,1).ToUpper() + tok.Substring(1);
+ return result;
+ }
+ }
+
+ void GenerateImport (StreamWriter sw)
+ {
+ sw.WriteLine("\t\t[DllImport(\"" + LibraryName + "\")]");
+ sw.WriteLine("\t\tstatic extern " + Safety + "IntPtr " + CName + "(" + Parameters.ImportSignature + ");");
+ sw.WriteLine();
+ }
+
+ void GenerateStatic (GenerationInfo gen_info)
+ {
+ StreamWriter sw = gen_info.Writer;
+ sw.WriteLine("\t\t" + Protection + " static " + Safety + Modifiers + name + " " + StaticName + "(" + Signature + ")");
+ sw.WriteLine("\t\t{");
+
+ Body.Initialize(gen_info, false, false, "");
+
+ sw.Write("\t\t\t" + name + " result = ");
+ if (container_type is StructBase)
+ sw.Write ("{0}.New (", name);
+ else
+ sw.Write ("new {0} (", name);
+ sw.WriteLine (CName + "(" + Body.GetCallString (false) + "));");
+ Body.Finish (sw, "");
+ Body.HandleException (sw, "");
+ sw.WriteLine ("\t\t\treturn result;");
+ }
+
+ public void Generate (GenerationInfo gen_info)
+ {
+ if (!Validate ())
+ return;
+
+ StreamWriter sw = gen_info.Writer;
+ gen_info.CurrentMember = CName;
+
+ GenerateImport (sw);
+
+ if (IsStatic)
+ GenerateStatic (gen_info);
+ else {
+ sw.WriteLine("\t\t{0} {1}{2} ({3}) {4}", Protection, Safety, name, Signature.ToString(), needs_chaining ? ": base (IntPtr.Zero)" : "");
+ sw.WriteLine("\t\t{");
+
+ if (needs_chaining) {
+ sw.WriteLine ("\t\t\tif (GetType () != typeof (" + name + ")) {");
+
+ if (Parameters.Count == 0) {
+ sw.WriteLine ("\t\t\t\tCreateNativeObject (new string [0], new GLib.Value[0]);");
+ sw.WriteLine ("\t\t\t\treturn;");
+ } else {
+ ArrayList names = new ArrayList ();
+ ArrayList values = new ArrayList ();
+ for (int i = 0; i < Parameters.Count; i++) {
+ Parameter p = Parameters[i];
+ if (container_type.GetPropertyRecursively (p.StudlyName) != null) {
+ names.Add (p.Name);
+ values.Add (p.Name);
+ } else if (p.PropertyName != String.Empty) {
+ names.Add (p.PropertyName);
+ values.Add (p.Name);
+ }
+ }
+
+ if (names.Count == Parameters.Count) {
+ sw.WriteLine ("\t\t\t\tArrayList vals = new ArrayList();");
+ sw.WriteLine ("\t\t\t\tArrayList names = new ArrayList();");
+ for (int i = 0; i < names.Count; i++) {
+ Parameter p = Parameters [i];
+ string indent = "\t\t\t\t";
+ if (p.Generatable is ClassBase && !(p.Generatable is StructBase)) {
+ sw.WriteLine (indent + "if (" + p.Name + " != null) {");
+ indent += "\t";
+ }
+ sw.WriteLine (indent + "names.Add (\"" + names [i] + "\");");
+ sw.WriteLine (indent + "vals.Add (new GLib.Value (" + values[i] + "));");
+
+ if (p.Generatable is ClassBase && !(p.Generatable is StructBase))
+ sw.WriteLine ("\t\t\t\t}");
+ }
+
+ sw.WriteLine ("\t\t\t\tCreateNativeObject ((string[])names.ToArray (typeof (string)), (GLib.Value[])vals.ToArray (typeof (GLib.Value)));");
+ sw.WriteLine ("\t\t\t\treturn;");
+ } else
+ sw.WriteLine ("\t\t\t\tthrow new InvalidOperationException (\"Can't override this constructor.\");");
+ }
+
+ sw.WriteLine ("\t\t\t}");
+ }
+
+ Body.Initialize(gen_info, false, false, "");
+ sw.WriteLine("\t\t\t{0} = {1}({2});", container_type.AssignToName, CName, Body.GetCallString (false));
+ Body.Finish (sw, "");
+ Body.HandleException (sw, "");
+ }
+
+ sw.WriteLine("\t\t}");
+ sw.WriteLine();
+
+ Statistics.CtorCount++;
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/EnumGen.cs b/gio-sharp/generator/EnumGen.cs
new file mode 100644
index 0000000..fa66af5
--- /dev/null
+++ b/gio-sharp/generator/EnumGen.cs
@@ -0,0 +1,127 @@
+// GtkSharp.Generation.EnumGen.cs - The Enumeration Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+
+ public class EnumGen : GenBase {
+
+ string enum_type = String.Empty;
+ ArrayList members = new ArrayList ();
+
+ public EnumGen (XmlElement ns, XmlElement elem) : base (ns, elem)
+ {
+ foreach (XmlElement member in elem.ChildNodes) {
+ if (member.Name != "member")
+ continue;
+
+ string result = "\t\t" + member.GetAttribute("name");
+ if (member.HasAttribute("value")) {
+ string value = member.GetAttribute("value");
+ if (value.EndsWith("U")) {
+ enum_type = " : uint";
+ value = value.TrimEnd('U');
+ }
+ result += " = " + value;
+ }
+ members.Add (result + ",");
+ }
+ }
+
+ public override bool Validate ()
+ {
+ return true;
+ }
+
+ public override string DefaultValue {
+ get {
+ return "(" + QualifiedName + ") 0";
+ }
+ }
+
+ public override string MarshalType {
+ get {
+ return "int";
+ }
+ }
+
+ public override string CallByName (string var_name)
+ {
+ return "(int) " + var_name;
+ }
+
+ public override string FromNative(string var)
+ {
+ return "(" + QualifiedName + ") " + var;
+ }
+
+ public override void Generate (GenerationInfo gen_info)
+ {
+ StreamWriter sw = gen_info.OpenStream (Name);
+
+ sw.WriteLine ("namespace " + NS + " {");
+ sw.WriteLine ();
+ sw.WriteLine ("\tusing System;");
+ sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+ sw.WriteLine ();
+
+ sw.WriteLine ("#region Autogenerated code");
+
+ if (Elem.GetAttribute("type") == "flags")
+ sw.WriteLine ("\t[Flags]");
+ if (Elem.HasAttribute("gtype"))
+ sw.WriteLine ("\t[GLib.GType (typeof (" + NS + "." + Name + "GType))]");
+
+ string access = IsInternal ? "internal" : "public";
+ sw.WriteLine ("\t" + access + " enum " + Name + enum_type + " {");
+ sw.WriteLine ();
+
+ foreach (string member in members)
+ sw.WriteLine (member);
+
+ sw.WriteLine ("\t}");
+
+ if (Elem.HasAttribute ("gtype")) {
+ sw.WriteLine ();
+ sw.WriteLine ("\tinternal class " + Name + "GType {");
+ sw.WriteLine ("\t\t[DllImport (\"" + LibraryName + "\")]");
+ sw.WriteLine ("\t\tstatic extern IntPtr " + Elem.GetAttribute ("gtype") + " ();");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tpublic static GLib.GType GType {");
+ sw.WriteLine ("\t\t\tget {");
+ sw.WriteLine ("\t\t\t\treturn new GLib.GType (" + Elem.GetAttribute ("gtype") + " ());");
+ sw.WriteLine ("\t\t\t}");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ("\t}");
+ }
+
+ sw.WriteLine ("#endregion");
+ sw.WriteLine ("}");
+ sw.Close ();
+ Statistics.EnumCount++;
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/FieldBase.cs b/gio-sharp/generator/FieldBase.cs
new file mode 100644
index 0000000..9fac0cd
--- /dev/null
+++ b/gio-sharp/generator/FieldBase.cs
@@ -0,0 +1,270 @@
+// GtkSharp.Generation.FieldBase.cs - base class for struct and object
+// fields
+//
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+
+ public abstract class FieldBase : PropertyBase {
+ public FieldBase (XmlElement elem, ClassBase container_type) : base (elem, container_type) {}
+
+ public bool Validate ()
+ {
+ if (!Ignored && !Hidden && CSType == "") {
+ Console.Write("Field {0} has unknown Type {1} ", Name, CType);
+ Statistics.ThrottledCount++;
+ return false;
+ }
+
+ return true;
+ }
+
+ protected virtual bool Readable {
+ get {
+ return elem.GetAttribute ("readable") != "false";
+ }
+ }
+
+ protected virtual bool Writable {
+ get {
+ return elem.GetAttribute ("writeable") != "false";
+ }
+ }
+
+ protected abstract string DefaultAccess { get; }
+
+ protected string Access {
+ get {
+ return elem.HasAttribute ("access") ? elem.GetAttribute ("access") : DefaultAccess;
+ }
+ }
+
+ public bool IsArray {
+ get {
+ return elem.HasAttribute("array_len") || elem.HasAttribute("array");
+ }
+ }
+
+ public bool IsBitfield {
+ get {
+ return elem.HasAttribute("bits");
+ }
+ }
+
+ public bool Ignored {
+ get {
+ if (container_type.GetProperty (Name) != null)
+ return true;
+ if (IsArray)
+ return true;
+ if (Access == "private" && (Getter == null) && (Setter == null))
+ return true;
+ return false;
+ }
+ }
+
+ string getterName, setterName;
+ string getOffsetName, offsetName;
+
+ void CheckGlue ()
+ {
+ getterName = setterName = getOffsetName = null;
+ if (Access != "public")
+ return;
+
+ string prefix = (container_type.NS + "Sharp_" + container_type.NS + "_" + container_type.Name).ToLower ();
+
+ if (IsBitfield) {
+ if (Readable && Getter == null)
+ getterName = prefix + "_get_" + CName;
+ if (Writable && Setter == null)
+ setterName = prefix + "_set_" + CName;
+ } else {
+ if ((Readable && Getter == null) || (Writable && Setter == null)) {
+ offsetName = CName + "_offset";
+ getOffsetName = prefix + "_get_" + offsetName;
+ }
+ }
+ }
+
+ protected override void GenerateImports (GenerationInfo gen_info, string indent)
+ {
+ StreamWriter sw = gen_info.Writer;
+ SymbolTable table = SymbolTable.Table;
+
+ if (getterName != null) {
+ sw.WriteLine (indent + "[DllImport (\"{0}\")]", gen_info.GluelibName);
+ sw.WriteLine (indent + "extern static {0} {1} ({2} raw);",
+ table.GetMarshalReturnType (CType), getterName,
+ container_type.MarshalType);
+ }
+
+ if (setterName != null) {
+ sw.WriteLine (indent + "[DllImport (\"{0}\")]", gen_info.GluelibName);
+ sw.WriteLine (indent + "extern static void {0} ({1} raw, {2} value);",
+ setterName, container_type.MarshalType, table.GetMarshalType (CType));
+ }
+
+ if (getOffsetName != null) {
+ sw.WriteLine (indent + "[DllImport (\"{0}\")]", gen_info.GluelibName);
+ sw.WriteLine (indent + "extern static uint {0} ();", getOffsetName);
+ sw.WriteLine ();
+ sw.WriteLine (indent + "static uint " + offsetName + " = " + getOffsetName + " ();");
+ }
+
+ base.GenerateImports (gen_info, indent);
+ }
+
+ public virtual void Generate (GenerationInfo gen_info, string indent)
+ {
+ if (Ignored || Hidden)
+ return;
+
+ CheckGlue ();
+ if ((getterName != null || setterName != null || getOffsetName != null) &&
+ gen_info.GlueWriter == null) {
+ Console.WriteLine ("No glue-filename specified, can't create glue for {0}.{1}",
+ container_type.Name, Name);
+ return;
+ }
+
+ GenerateImports (gen_info, indent);
+
+ SymbolTable table = SymbolTable.Table;
+ StreamWriter sw = gen_info.Writer;
+ string modifiers = elem.HasAttribute ("new_flag") ? "new " : "";
+ bool is_struct = table.IsStruct (CType) || table.IsBoxed (CType);
+
+ sw.WriteLine (indent + "public " + modifiers + CSType + " " + Name + " {");
+
+ if (Getter != null) {
+ sw.Write (indent + "\tget ");
+ Getter.GenerateBody (gen_info, container_type, "\t");
+ sw.WriteLine ("");
+ } else if (getterName != null) {
+ sw.WriteLine (indent + "\tget {");
+ container_type.Prepare (sw, indent + "\t\t");
+ sw.WriteLine (indent + "\t\t" + CSType + " result = " + table.FromNativeReturn (ctype, getterName + " (" + container_type.CallByName () + ")") + ";");
+ container_type.Finish (sw, indent + "\t\t");
+ sw.WriteLine (indent + "\t\treturn result;");
+ sw.WriteLine (indent + "\t}");
+ } else if (Readable && offsetName != null) {
+ sw.WriteLine (indent + "\tget {");
+ sw.WriteLine (indent + "\t\tunsafe {");
+ if (is_struct) {
+ sw.WriteLine (indent + "\t\t\t" + CSType + "* raw_ptr = (" + CSType + "*)(((byte*)" + container_type.CallByName () + ") + " + offsetName + ");");
+ sw.WriteLine (indent + "\t\t\treturn *raw_ptr;");
+ } else {
+ sw.WriteLine (indent + "\t\t\t" + table.GetMarshalReturnType (CType) + "* raw_ptr = (" + table.GetMarshalReturnType (CType) + "*)(((byte*)" + container_type.CallByName () + ") + " + offsetName + ");");
+ sw.WriteLine (indent + "\t\t\treturn " + table.FromNativeReturn (ctype, "(*raw_ptr)") + ";");
+ }
+ sw.WriteLine (indent + "\t\t}");
+ sw.WriteLine (indent + "\t}");
+ }
+
+ if (Setter != null) {
+ sw.Write (indent + "\tset ");
+ Setter.GenerateBody (gen_info, container_type, "\t");
+ sw.WriteLine ("");
+ } else if (setterName != null) {
+ sw.WriteLine (indent + "\tset {");
+ container_type.Prepare (sw, indent + "\t\t");
+ sw.WriteLine (indent + "\t\t" + setterName + " (" + container_type.CallByName () + ", " + table.CallByName (ctype, "value") + ");");
+ container_type.Finish (sw, indent + "\t\t");
+ sw.WriteLine (indent + "\t}");
+ } else if (Writable && offsetName != null) {
+ sw.WriteLine (indent + "\tset {");
+ sw.WriteLine (indent + "\t\tunsafe {");
+ if (is_struct) {
+ sw.WriteLine (indent + "\t\t\t" + CSType + "* raw_ptr = (" + CSType + "*)(((byte*)" + container_type.CallByName () + ") + " + offsetName + ");");
+ sw.WriteLine (indent + "\t\t\t*raw_ptr = value;");
+ } else {
+ sw.WriteLine (indent + "\t\t\t" + table.GetMarshalReturnType (CType) + "* raw_ptr = (" + table.GetMarshalReturnType (CType) + "*)(((byte*)" + container_type.CallByName () + ") + " + offsetName + ");");
+ sw.WriteLine (indent + "\t\t\t*raw_ptr = " + table.ToNativeReturn (ctype, "value") + ";");
+ }
+ sw.WriteLine (indent + "\t\t}");
+ sw.WriteLine (indent + "\t}");
+ }
+
+ sw.WriteLine (indent + "}");
+ sw.WriteLine ("");
+
+ if (getterName != null || setterName != null || getOffsetName != null)
+ GenerateGlue (gen_info);
+ }
+
+ protected void GenerateGlue (GenerationInfo gen_info)
+ {
+ StreamWriter sw = gen_info.GlueWriter;
+ SymbolTable table = SymbolTable.Table;
+
+ string FieldCType = CType.Replace ("-", " ");
+ bool byref = table[CType] is ByRefGen || table[CType] is StructGen;
+ string GlueCType = byref ? FieldCType + " *" : FieldCType;
+ string ContainerCType = container_type.CName;
+ string ContainerCName = container_type.Name.ToLower ();
+
+ if (getterName != null) {
+ sw.WriteLine ("{0} {1} ({2} *{3});",
+ GlueCType, getterName, ContainerCType, ContainerCName);
+ }
+ if (setterName != null) {
+ sw.WriteLine ("void {0} ({1} *{2}, {3} value);",
+ setterName, ContainerCType, ContainerCName, GlueCType);
+ }
+ if (getOffsetName != null)
+ sw.WriteLine ("guint {0} (void);", getOffsetName);
+ sw.WriteLine ("");
+
+ if (getterName != null) {
+ sw.WriteLine (GlueCType);
+ sw.WriteLine ("{0} ({1} *{2})", getterName, ContainerCType, ContainerCName);
+ sw.WriteLine ("{");
+ sw.WriteLine ("\treturn ({0}){1}{2}->{3};", GlueCType,
+ byref ? "&" : "", ContainerCName, CName);
+ sw.WriteLine ("}");
+ sw.WriteLine ("");
+ }
+ if (setterName != null) {
+ sw.WriteLine ("void");
+ sw.WriteLine ("{0} ({1} *{2}, {3} value)",
+ setterName, ContainerCType, ContainerCName, GlueCType);
+ sw.WriteLine ("{");
+ sw.WriteLine ("\t{0}->{1} = ({2}){3}value;", ContainerCName, CName,
+ FieldCType, byref ? "*" : "");
+ sw.WriteLine ("}");
+ sw.WriteLine ("");
+ }
+ if (getOffsetName != null) {
+ sw.WriteLine ("guint");
+ sw.WriteLine ("{0} (void)", getOffsetName);
+ sw.WriteLine ("{");
+ sw.WriteLine ("\treturn (guint)G_STRUCT_OFFSET ({0}, {1});",
+ ContainerCType, CName);
+ sw.WriteLine ("}");
+ sw.WriteLine ("");
+ }
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/GenBase.cs b/gio-sharp/generator/GenBase.cs
new file mode 100644
index 0000000..db0a004
--- /dev/null
+++ b/gio-sharp/generator/GenBase.cs
@@ -0,0 +1,142 @@
+// GtkSharp.Generation.GenBase.cs - The Generatable base class.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2001-2002 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.IO;
+ using System.Xml;
+
+ public abstract class GenBase : IGeneratable {
+
+ private XmlElement ns;
+ private XmlElement elem;
+
+ protected GenBase (XmlElement ns, XmlElement elem)
+ {
+ this.ns = ns;
+ this.elem = elem;
+ }
+
+ public string CName {
+ get {
+ return elem.GetAttribute ("cname");
+ }
+ }
+
+ public XmlElement Elem {
+ get {
+ return elem;
+ }
+ }
+
+ public bool IsInternal {
+ get {
+ if (elem.HasAttribute ("internal")) {
+ string attr = elem.GetAttribute ("internal");
+ return attr == "1" || attr == "true";
+ }
+ return false;
+ }
+ }
+
+ public string LibraryName {
+ get {
+ return ns.GetAttribute ("library");
+ }
+ }
+
+ public virtual string MarshalReturnType {
+ get {
+ return MarshalType;
+ }
+ }
+
+ public abstract string MarshalType { get; }
+
+ public string Name {
+ get {
+ return elem.GetAttribute ("name");
+ }
+ }
+
+ public string NS {
+ get {
+ return ns.GetAttribute ("name");
+ }
+ }
+
+ public abstract string DefaultValue { get; }
+
+ public string QualifiedName {
+ get {
+ return NS + "." + Name;
+ }
+ }
+
+ public virtual string ToNativeReturnType {
+ get {
+ return MarshalType;
+ }
+ }
+
+ protected void AppendCustom (StreamWriter sw, string custom_dir)
+ {
+ char sep = Path.DirectorySeparatorChar;
+ string custom = custom_dir + sep + Name + ".custom";
+ if (File.Exists(custom)) {
+ sw.WriteLine ("#region Customized extensions");
+ sw.WriteLine ("#line 1 \"" + Name + ".custom\"");
+ FileStream custstream = new FileStream(custom, FileMode.Open, FileAccess.Read);
+ StreamReader sr = new StreamReader(custstream);
+ sw.WriteLine (sr.ReadToEnd ());
+ sw.WriteLine ("#endregion");
+ sr.Close ();
+ }
+ }
+
+ public abstract string CallByName (string var);
+
+ public abstract string FromNative (string var);
+
+ public virtual string FromNativeReturn (string var)
+ {
+ return FromNative (var);
+ }
+
+ public virtual string ToNativeReturn (string var)
+ {
+ return CallByName (var);
+ }
+
+ public abstract bool Validate ();
+
+ public void Generate ()
+ {
+ GenerationInfo geninfo = new GenerationInfo (ns);
+ Generate (geninfo);
+ }
+
+ public abstract void Generate (GenerationInfo geninfo);
+ }
+}
+
diff --git a/gio-sharp/generator/GenerationInfo.cs b/gio-sharp/generator/GenerationInfo.cs
new file mode 100644
index 0000000..7b7619a
--- /dev/null
+++ b/gio-sharp/generator/GenerationInfo.cs
@@ -0,0 +1,188 @@
+// GtkSharp.Generation.GenerationInfo.cs - Generation information class.
+//
+// Author: Mike Kestner <mkestner ximian com>
+//
+// Copyright (c) 2003-2008 Novell Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+
+ public class GenerationInfo {
+
+ string dir;
+ string custom_dir;
+ string assembly_name;
+ string gluelib_name;
+ bool glue_enabled;
+ StreamWriter sw;
+ StreamWriter glue_sw;
+
+ public GenerationInfo (XmlElement ns)
+ {
+ string ns_name = ns.GetAttribute ("name");
+ char sep = Path.DirectorySeparatorChar;
+ dir = ".." + sep + ns_name.ToLower () + sep + "generated";
+ custom_dir = ".." + sep + ns_name.ToLower ();
+ assembly_name = ns_name.ToLower () + "-sharp";
+ }
+
+ public GenerationInfo (string dir, string assembly_name) : this (dir, dir, assembly_name, "", "", "") {}
+
+ public GenerationInfo (string dir, string custom_dir, string assembly_name, string glue_filename, string glue_includes, string gluelib_name)
+ {
+ this.dir = dir;
+ this.custom_dir = custom_dir;
+ this.assembly_name = assembly_name;
+ this.gluelib_name = gluelib_name;
+ InitializeGlue (glue_filename, glue_includes, gluelib_name);
+ }
+
+ void InitializeGlue (string glue_filename, string glue_includes, string gluelib_name)
+ {
+ if (gluelib_name != String.Empty && glue_filename != String.Empty) {
+ FileStream stream;
+ try {
+ stream = new FileStream (glue_filename, FileMode.Create, FileAccess.Write);
+ } catch (Exception) {
+ Console.Error.WriteLine ("Unable to create specified glue file. Glue will not be generated.");
+ return;
+ }
+
+ glue_sw = new StreamWriter (stream);
+
+ glue_sw.WriteLine ("// This file was generated by the Gtk# code generator.");
+ glue_sw.WriteLine ("// Any changes made will be lost if regenerated.");
+ glue_sw.WriteLine ();
+
+ if (glue_includes != "") {
+ foreach (string header in glue_includes.Split (new char[] {',', ' '})) {
+ if (header != "")
+ glue_sw.WriteLine ("#include <{0}>", header);
+ }
+ glue_sw.WriteLine ("");
+ }
+ glue_sw.WriteLine ("const gchar *__prefix = \"__gtksharp_\";\n");
+ glue_sw.WriteLine ("#define HAS_PREFIX(a) (*((guint64 *)(a)) == *((guint64 *) __prefix))\n");
+ glue_sw.WriteLine ("static GObjectClass *");
+ glue_sw.WriteLine ("get_threshold_class (GObject *obj)");
+ glue_sw.WriteLine ("{");
+ glue_sw.WriteLine ("\tGType gtype = G_TYPE_FROM_INSTANCE (obj);");
+ glue_sw.WriteLine ("\twhile (HAS_PREFIX (g_type_name (gtype)))");
+ glue_sw.WriteLine ("\t\tgtype = g_type_parent (gtype);");
+ glue_sw.WriteLine ("\tGObjectClass *klass = g_type_class_peek (gtype);");
+ glue_sw.WriteLine ("\tif (klass == NULL) klass = g_type_class_ref (gtype);");
+ glue_sw.WriteLine ("\treturn klass;");
+ glue_sw.WriteLine ("}\n");
+ glue_enabled = true;
+ }
+ }
+
+ public string AssemblyName {
+ get {
+ return assembly_name;
+ }
+ }
+
+ public string CustomDir {
+ get {
+ return custom_dir;
+ }
+ }
+
+ public string Dir {
+ get {
+ return dir;
+ }
+ }
+
+ public string GluelibName {
+ get {
+ return gluelib_name;
+ }
+ }
+
+ public bool GlueEnabled {
+ get {
+ return glue_enabled;
+ }
+ }
+
+ public StreamWriter GlueWriter {
+ get {
+ return glue_sw;
+ }
+ }
+
+ public StreamWriter Writer {
+ get {
+ return sw;
+ }
+ set {
+ sw = value;
+ }
+ }
+
+ public void CloseGlueWriter ()
+ {
+ if (glue_sw != null)
+ glue_sw.Close ();
+ }
+
+ string member;
+ public string CurrentMember {
+ get {
+ return typename + "." + member;
+ }
+ set {
+ member = value;
+ }
+ }
+
+ string typename;
+ public string CurrentType {
+ get {
+ return typename;
+ }
+ set {
+ typename = value;
+ }
+ }
+
+ public StreamWriter OpenStream (string name)
+ {
+ char sep = Path.DirectorySeparatorChar;
+ if (!Directory.Exists(dir))
+ Directory.CreateDirectory(dir);
+ string filename = dir + sep + name + ".cs";
+
+ FileStream stream = new FileStream (filename, FileMode.Create, FileAccess.Write);
+ StreamWriter sw = new StreamWriter (stream);
+
+ sw.WriteLine ("// This file was generated by the Gtk# code generator.");
+ sw.WriteLine ("// Any changes made will be lost if regenerated.");
+ sw.WriteLine ();
+
+ return sw;
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/HandleBase.cs b/gio-sharp/generator/HandleBase.cs
new file mode 100644
index 0000000..08f7805
--- /dev/null
+++ b/gio-sharp/generator/HandleBase.cs
@@ -0,0 +1,81 @@
+// HandleBase.cs - Base class for Handle types
+//
+// Authors: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.IO;
+ using System.Xml;
+
+ public abstract class HandleBase : ClassBase, IAccessor {
+
+ protected HandleBase (XmlElement ns, XmlElement elem) : base (ns, elem) {}
+
+ public override string AssignToName {
+ get {
+ return "Raw";
+ }
+ }
+
+ public override string MarshalType {
+ get {
+ return "IntPtr";
+ }
+ }
+
+ public override string CallByName (string name)
+ {
+ return name + " == null ? IntPtr.Zero : " + name + ".Handle";
+ }
+
+ public override string CallByName ()
+ {
+ return "Handle";
+ }
+
+ public abstract string FromNative (string var, bool owned);
+
+ public override string FromNative (string var)
+ {
+ return FromNative (var, false);
+ }
+
+ public string FromNativeReturn (string var, bool owned)
+ {
+ return FromNative (var, owned);
+ }
+
+ public override string FromNativeReturn (string var)
+ {
+ return FromNativeReturn (var, false);
+ }
+
+ public void WriteAccessors (StreamWriter sw, string indent, string var)
+ {
+ sw.WriteLine (indent + "get {");
+ sw.WriteLine (indent + "\treturn " + FromNative (var, false) + ";");
+ sw.WriteLine (indent + "}");
+ sw.WriteLine (indent + "set {");
+ sw.WriteLine (indent + "\t" + var + " = " + CallByName ("value") + ";");
+ sw.WriteLine (indent + "}");
+ }
+ }
+}
diff --git a/gio-sharp/generator/IAccessor.cs b/gio-sharp/generator/IAccessor.cs
new file mode 100644
index 0000000..3cfcfc0
--- /dev/null
+++ b/gio-sharp/generator/IAccessor.cs
@@ -0,0 +1,29 @@
+// IAccessor.cs - Interface to generate property accessors.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ public interface IAccessor {
+
+ void WriteAccessors (System.IO.StreamWriter sw, string indentation, string field_name);
+
+ }
+}
diff --git a/gio-sharp/generator/IGeneratable.cs b/gio-sharp/generator/IGeneratable.cs
new file mode 100644
index 0000000..1608fd7
--- /dev/null
+++ b/gio-sharp/generator/IGeneratable.cs
@@ -0,0 +1,71 @@
+// GtkSharp.Generation.IGeneratable.cs - Interface to generate code for a type.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2001 Mike Kestner
+// Copyright (c) 2007 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ public interface IGeneratable {
+
+ // The C name of the generatable
+ string CName {get;}
+
+ // The (short) C# name of the generatable
+ string Name {get;}
+
+ // The fully-qualified C# name of the generatable
+ string QualifiedName {get;}
+
+ // The type (possibly including "ref" or "out") to use in the import
+ // signature when passing this generatable to unmanaged code
+ string MarshalType {get;}
+
+ // The type to use as the return type in an import signature when
+ // receiving this generatable back from unmanaged code
+ string MarshalReturnType {get;}
+
+ // The type to use in a managed callback signature when returning this
+ // generatable to unmanaged code
+ string ToNativeReturnType {get;}
+
+ // The value returned by callbacks that are interrupted prematurely
+ // by managed exceptions or other conditions where an appropriate
+ // value can't be otherwise obtained.
+ string DefaultValue {get;}
+
+ // Generates an expression to convert var_name to MarshalType
+ string CallByName (string var_name);
+
+ // Generates an expression to convert var from MarshalType
+ string FromNative (string var);
+
+ // Generates an expression to convert var from MarshalReturnType
+ string FromNativeReturn (string var);
+
+ // Generates an expression to convert var to ToNativeReturnType
+ string ToNativeReturn (string var);
+
+ bool Validate ();
+
+ void Generate ();
+
+ void Generate (GenerationInfo gen_info);
+ }
+}
diff --git a/gio-sharp/generator/IManualMarshaler.cs b/gio-sharp/generator/IManualMarshaler.cs
new file mode 100644
index 0000000..e9e7eaf
--- /dev/null
+++ b/gio-sharp/generator/IManualMarshaler.cs
@@ -0,0 +1,32 @@
+// GtkSharp.Generation.IManualMarshaler.cs - Interface for manual marshaling.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ public interface IManualMarshaler {
+
+ string AllocNative (string managed_var);
+
+ string ReleaseNative (string native_var);
+
+ }
+}
+
diff --git a/gio-sharp/generator/InterfaceGen.cs b/gio-sharp/generator/InterfaceGen.cs
new file mode 100644
index 0000000..00cd892
--- /dev/null
+++ b/gio-sharp/generator/InterfaceGen.cs
@@ -0,0 +1,384 @@
+// GtkSharp.Generation.InterfaceGen.cs - The Interface Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004, 2007 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+
+ public class InterfaceGen : ObjectBase {
+
+ bool consume_only;
+ ArrayList vms = new ArrayList ();
+ ArrayList members = new ArrayList ();
+
+ public InterfaceGen (XmlElement ns, XmlElement elem) : base (ns, elem)
+ {
+ consume_only = elem.HasAttribute ("consume_only");
+ foreach (XmlNode node in elem.ChildNodes) {
+ switch (node.Name) {
+ case "virtual_method":
+ VirtualMethod vm = new VirtualMethod (node as XmlElement, this);
+ vms.Add (vm);
+ members.Add (vm);
+ break;
+ case "signal":
+ object sig = sigs [(node as XmlElement).GetAttribute ("name")];
+ if (sig == null)
+ sig = new Signal (node as XmlElement, this);
+ members.Add (sig);
+ break;
+ default:
+ if (!IsNodeNameHandled (node.Name))
+ Console.WriteLine ("Unexpected node " + node.Name + " in " + CName);
+ break;
+ }
+ }
+ }
+
+ public bool IsConsumeOnly {
+ get {
+ return consume_only;
+ }
+ }
+
+ public override string FromNative (string var, bool owned)
+ {
+ return QualifiedName + "Adapter.GetObject (" + var + ", " + (owned ? "true" : "false") + ")";
+ }
+
+ public override bool ValidateForSubclass ()
+ {
+ ArrayList invalids = new ArrayList ();
+
+ foreach (Method method in methods.Values) {
+ if (!method.Validate ()) {
+ Console.WriteLine ("in type " + QualifiedName);
+ invalids.Add (method);
+ }
+ }
+ foreach (Method method in invalids)
+ methods.Remove (method.Name);
+ invalids.Clear ();
+
+ return base.ValidateForSubclass ();
+ }
+
+ string IfaceName {
+ get {
+ return Name + "Iface";
+ }
+ }
+
+ void GenerateIfaceStruct (StreamWriter sw)
+ {
+ sw.WriteLine ("\t\tstatic " + IfaceName + " iface;");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tstruct " + IfaceName + " {");
+ sw.WriteLine ("\t\t\tpublic IntPtr gtype;");
+ sw.WriteLine ("\t\t\tpublic IntPtr itype;");
+ sw.WriteLine ();
+
+ foreach (object member in members) {
+ if (member is Signal) {
+ Signal sig = member as Signal;
+ sw.WriteLine ("\t\t\tpublic IntPtr {0};", sig.CName.Replace ("\"", "").Replace ("-", "_"));
+ } else if (member is VirtualMethod) {
+ VirtualMethod vm = member as VirtualMethod;
+ bool has_target = methods [vm.Name] != null;
+ if (!has_target)
+ Console.WriteLine ("Interface " + QualifiedName + " virtual method " + vm.Name + " has no matching method to invoke.");
+ string type = has_target && vm.IsValid ? vm.Name + "Delegate" : "IntPtr";
+ sw.WriteLine ("\t\t\tpublic " + type + " " + vm.CName + ";");
+ }
+ }
+
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ }
+
+ void GenerateStaticCtor (StreamWriter sw)
+ {
+ sw.WriteLine ("\t\tstatic " + Name + "Adapter ()");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tGLib.GType.Register (_gtype, typeof({0}Adapter));", Name);
+ foreach (VirtualMethod vm in vms) {
+ bool has_target = methods [vm.Name] != null;
+ if (has_target && vm.IsValid)
+ sw.WriteLine ("\t\t\tiface.{0} = new {1}Delegate ({1}Callback);", vm.CName, vm.Name);
+ }
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ }
+
+ void GenerateInitialize (StreamWriter sw)
+ {
+ sw.WriteLine ("\t\tstatic void Initialize (IntPtr ifaceptr, IntPtr data)");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\t" + IfaceName + " native_iface = (" + IfaceName + ") Marshal.PtrToStructure (ifaceptr, typeof (" + IfaceName + "));");
+ foreach (VirtualMethod vm in vms)
+ sw.WriteLine ("\t\t\tnative_iface." + vm.CName + " = iface." + vm.CName + ";");
+ sw.WriteLine ("\t\t\tMarshal.StructureToPtr (native_iface, ifaceptr, false);");
+ sw.WriteLine ("\t\t\tGCHandle gch = (GCHandle) data;");
+ sw.WriteLine ("\t\t\tgch.Free ();");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ }
+
+ void GenerateCallbacks (StreamWriter sw)
+ {
+ foreach (VirtualMethod vm in vms) {
+ if (methods [vm.Name] != null) {
+ sw.WriteLine ();
+ vm.GenerateCallback (sw);
+ }
+ }
+ }
+
+ void GenerateCtors (StreamWriter sw)
+ {
+ if (!IsConsumeOnly) {
+ sw.WriteLine ("\t\tpublic " + Name + "Adapter ()");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tInitHandler = new GLib.GInterfaceInitHandler (Initialize);");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\t{0}Implementor implementor;", Name);
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tpublic {0}Adapter ({0}Implementor implementor)", Name);
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tif (implementor == null)");
+ sw.WriteLine ("\t\t\t\tthrow new ArgumentNullException (\"implementor\");");
+ sw.WriteLine ("\t\t\tthis.implementor = implementor;");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ }
+ sw.WriteLine ("\t\tpublic " + Name + "Adapter (IntPtr handle)");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tthis.handle = handle;");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ }
+
+ void GenerateGType (StreamWriter sw)
+ {
+ Method m = GetMethod ("GetType");
+ m.GenerateImport (sw);
+ sw.WriteLine ("\t\tprivate static GLib.GType _gtype = new GLib.GType ({0} ());", m.CName);
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tpublic override GLib.GType GType {");
+ sw.WriteLine ("\t\t\tget {");
+ sw.WriteLine ("\t\t\t\treturn _gtype;");
+ sw.WriteLine ("\t\t\t}");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ }
+
+ void GenerateHandleProp (StreamWriter sw)
+ {
+ sw.WriteLine ("\t\tIntPtr handle;");
+ sw.WriteLine ("\t\tpublic override IntPtr Handle {");
+ sw.WriteLine ("\t\t\tget {");
+ if (IsConsumeOnly) {
+ sw.WriteLine ("\t\t\t\treturn handle;");
+ } else {
+ sw.WriteLine ("\t\t\t\tif (handle != IntPtr.Zero)");
+ sw.WriteLine ("\t\t\t\t\treturn handle;");
+ sw.WriteLine ("\t\t\t\treturn implementor == null ? IntPtr.Zero : implementor.Handle;");
+ }
+ sw.WriteLine ("\t\t\t}");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ }
+
+ void GenerateGetObject (StreamWriter sw)
+ {
+ sw.WriteLine ("\t\tpublic static " + Name + " GetObject (IntPtr handle, bool owned)");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tGLib.Object obj = GLib.Object.GetObject (handle, owned);");
+ sw.WriteLine ("\t\t\treturn GetObject (obj);");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tpublic static " + Name + " GetObject (GLib.Object obj)");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tif (obj == null)");
+ sw.WriteLine ("\t\t\t\treturn null;");
+ if (!IsConsumeOnly) {
+ sw.WriteLine ("\t\t\telse if (obj is " + Name + "Implementor)");
+ sw.WriteLine ("\t\t\t\treturn new {0}Adapter (obj as {0}Implementor);", Name);
+ }
+ sw.WriteLine ("\t\t\telse if (obj as " + Name + " == null)");
+ sw.WriteLine ("\t\t\t\treturn new {0}Adapter (obj.Handle);", Name);
+ sw.WriteLine ("\t\t\telse");
+ sw.WriteLine ("\t\t\t\treturn obj as {0};", Name);
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ }
+
+ void GenerateImplementorProp (StreamWriter sw)
+ {
+ sw.WriteLine ("\t\tpublic " + Name + "Implementor Implementor {");
+ sw.WriteLine ("\t\t\tget {");
+ sw.WriteLine ("\t\t\t\treturn implementor;");
+ sw.WriteLine ("\t\t\t}");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ }
+
+ void GenerateAdapter (GenerationInfo gen_info)
+ {
+ StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name + "Adapter");
+
+ sw.WriteLine ("namespace " + NS + " {");
+ sw.WriteLine ();
+ sw.WriteLine ("\tusing System;");
+ sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+ sw.WriteLine ();
+ sw.WriteLine ("#region Autogenerated code");
+ sw.WriteLine ("\tpublic class " + Name + "Adapter : GLib.GInterfaceAdapter, " + QualifiedName + " {");
+ sw.WriteLine ();
+
+ if (!IsConsumeOnly) {
+ GenerateIfaceStruct (sw);
+ GenerateStaticCtor (sw);
+ GenerateCallbacks (sw);
+ GenerateInitialize (sw);
+ }
+ GenerateCtors (sw);
+ GenerateGType (sw);
+ GenerateHandleProp (sw);
+ GenerateGetObject (sw);
+ if (!IsConsumeOnly)
+ GenerateImplementorProp (sw);
+
+ GenProperties (gen_info, null);
+
+ foreach (Signal sig in sigs.Values)
+ sig.GenEvent (sw, null, "GLib.Object.GetObject (Handle)");
+
+ Method temp = methods ["GetType"] as Method;
+ if (temp != null)
+ methods.Remove ("GetType");
+ GenMethods (gen_info, new Hashtable (), this);
+ if (temp != null)
+ methods ["GetType"] = temp;
+
+ sw.WriteLine ("#endregion");
+
+ string custom = Path.Combine (gen_info.CustomDir, Name + "Adapter.custom");
+ if (File.Exists (custom)) {
+ sw.WriteLine ("#region Customized extensions");
+ sw.WriteLine ("#line 1 \"" + Name + "Adapter.custom\"");
+ using (StreamReader sr = new StreamReader(new FileStream (custom, FileMode.Open, FileAccess.Read)))
+ sw.WriteLine (sr.ReadToEnd ());
+
+ sw.WriteLine ("#endregion");
+ }
+
+ sw.WriteLine ("\t}");
+ sw.WriteLine ("}");
+ sw.Close ();
+ gen_info.Writer = null;
+ }
+
+ void GenerateImplementorIface (StreamWriter sw)
+ {
+ if (IsConsumeOnly)
+ return;
+
+ sw.WriteLine ();
+ sw.WriteLine ("\t[GLib.GInterface (typeof (" + Name + "Adapter))]");
+ string access = IsInternal ? "internal" : "public";
+ sw.WriteLine ("\t" + access + " interface " + Name + "Implementor : GLib.IWrapper {");
+ sw.WriteLine ();
+ Hashtable vm_table = new Hashtable ();
+ foreach (VirtualMethod vm in vms)
+ vm_table [vm.Name] = vm;
+ foreach (VirtualMethod vm in vms) {
+ if (vm_table [vm.Name] == null)
+ continue;
+ else if (!vm.IsValid) {
+ vm_table.Remove (vm.Name);
+ continue;
+ } else if (vm.IsGetter || vm.IsSetter) {
+ string cmp_name = (vm.IsGetter ? "Set" : "Get") + vm.Name.Substring (3);
+ VirtualMethod cmp = vm_table [cmp_name] as VirtualMethod;
+ if (cmp != null && (cmp.IsGetter || cmp.IsSetter)) {
+ if (vm.IsSetter)
+ cmp.GenerateDeclaration (sw, vm);
+ else
+ vm.GenerateDeclaration (sw, cmp);
+ vm_table.Remove (cmp.Name);
+ } else
+ vm.GenerateDeclaration (sw, null);
+ vm_table.Remove (vm.Name);
+ } else {
+ vm.GenerateDeclaration (sw, null);
+ vm_table.Remove (vm.Name);
+ }
+ }
+ sw.WriteLine ("\t}");
+ }
+
+ public override void Generate (GenerationInfo gen_info)
+ {
+ GenerateAdapter (gen_info);
+ StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
+
+ sw.WriteLine ("namespace " + NS + " {");
+ sw.WriteLine ();
+ sw.WriteLine ("\tusing System;");
+ sw.WriteLine ();
+ sw.WriteLine ("#region Autogenerated code");
+ string access = IsInternal ? "internal" : "public";
+ sw.WriteLine ("\t" + access + " interface " + Name + " : GLib.IWrapper {");
+ sw.WriteLine ();
+
+ foreach (Signal sig in sigs.Values) {
+ sig.GenerateDecl (sw);
+ sig.GenEventHandler (gen_info);
+ }
+
+ foreach (Method method in methods.Values) {
+ if (IgnoreMethod (method, this))
+ continue;
+ method.GenerateDecl (sw);
+ }
+
+ foreach (Property prop in props.Values)
+ prop.GenerateDecl (sw, "\t\t");
+
+ AppendCustom (sw, gen_info.CustomDir);
+
+ sw.WriteLine ("\t}");
+ GenerateImplementorIface (sw);
+ sw.WriteLine ("#endregion");
+ sw.WriteLine ("}");
+ sw.Close ();
+ gen_info.Writer = null;
+ Statistics.IFaceCount++;
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/LPGen.cs b/gio-sharp/generator/LPGen.cs
new file mode 100644
index 0000000..3fb774e
--- /dev/null
+++ b/gio-sharp/generator/LPGen.cs
@@ -0,0 +1,58 @@
+// GtkSharp.Generation.LPGen.cs - long/pointer Generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.IO;
+
+ public class LPGen : SimpleGen, IAccessor {
+
+ public LPGen (string ctype) : base (ctype, "long", "0L") {}
+
+ public override string MarshalType {
+ get {
+ return "IntPtr";
+ }
+ }
+
+ public override string CallByName (string var_name)
+ {
+ return "new IntPtr (" + var_name + ")";
+ }
+
+ public override string FromNative(string var)
+ {
+ return "(long) " + var;
+ }
+
+ public void WriteAccessors (StreamWriter sw, string indent, string var)
+ {
+ sw.WriteLine (indent + "get {");
+ sw.WriteLine (indent + "\treturn " + FromNative (var) + ";");
+ sw.WriteLine (indent + "}");
+ sw.WriteLine (indent + "set {");
+ sw.WriteLine (indent + "\t" + var + " = " + CallByName ("value") + ";");
+ sw.WriteLine (indent + "}");
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/LPUGen.cs b/gio-sharp/generator/LPUGen.cs
new file mode 100644
index 0000000..331b25f
--- /dev/null
+++ b/gio-sharp/generator/LPUGen.cs
@@ -0,0 +1,58 @@
+// GtkSharp.Generation.LPUGen.cs - unsugned long/pointer generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.IO;
+
+ public class LPUGen : SimpleGen, IAccessor {
+
+ public LPUGen (string ctype) : base (ctype, "ulong", "0") {}
+
+ public override string MarshalType {
+ get {
+ return "UIntPtr";
+ }
+ }
+
+ public override string CallByName (string var_name)
+ {
+ return "new UIntPtr (" + var_name + ")";
+ }
+
+ public override string FromNative(string var)
+ {
+ return "(ulong) " + var;
+ }
+
+ public void WriteAccessors (StreamWriter sw, string indent, string var)
+ {
+ sw.WriteLine (indent + "get {");
+ sw.WriteLine (indent + "\treturn " + FromNative (var) + ";");
+ sw.WriteLine (indent + "}");
+ sw.WriteLine (indent + "set {");
+ sw.WriteLine (indent + "\t" + var + " = " + CallByName ("value") + ";");
+ sw.WriteLine (indent + "}");
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/Makefile.am b/gio-sharp/generator/Makefile.am
new file mode 100644
index 0000000..80291f0
--- /dev/null
+++ b/gio-sharp/generator/Makefile.am
@@ -0,0 +1,66 @@
+include ../../Makefile.include
+
+CLEANFILES = gapi_codegen.exe
+
+sources = \
+ AliasGen.cs \
+ BoxedGen.cs \
+ ByRefGen.cs \
+ CallbackGen.cs \
+ ChildProperty.cs \
+ ClassBase.cs \
+ ClassGen.cs \
+ CodeGenerator.cs \
+ ConstFilenameGen.cs \
+ ConstStringGen.cs \
+ Ctor.cs \
+ EnumGen.cs \
+ FieldBase.cs \
+ GenBase.cs \
+ GenerationInfo.cs \
+ HandleBase.cs \
+ IAccessor.cs \
+ IGeneratable.cs \
+ IManualMarshaler.cs \
+ InterfaceGen.cs \
+ LPGen.cs \
+ LPUGen.cs \
+ ManagedCallString.cs \
+ ManualGen.cs \
+ MarshalGen.cs \
+ MethodBase.cs \
+ MethodBody.cs \
+ Method.cs \
+ ObjectField.cs \
+ ObjectBase.cs \
+ ObjectGen.cs \
+ OpaqueGen.cs \
+ Parameters.cs \
+ Parser.cs \
+ Property.cs \
+ PropertyBase.cs \
+ ReturnValue.cs \
+ Signal.cs \
+ Signature.cs \
+ SimpleBase.cs \
+ SimpleGen.cs \
+ Statistics.cs \
+ StructBase.cs \
+ StructField.cs \
+ StructGen.cs \
+ SymbolTable.cs \
+ VirtualMethod.cs \
+ VMSignature.cs
+
+build_sources = $(addprefix $(srcdir)/, $(sources))
+dist_sources = $(sources)
+
+EXTRA_DIST = \
+ $(dist_sources)
+
+all: gapi_codegen.exe
+
+gapi_codegen.exe: $(build_sources)
+ @echo -e "\n*** Building the generator"
+ $(CSC) /out:gapi_codegen.exe $(OFF_T_FLAGS) $(references) $(build_sources)
+
diff --git a/gio-sharp/generator/ManagedCallString.cs b/gio-sharp/generator/ManagedCallString.cs
new file mode 100644
index 0000000..409eb36
--- /dev/null
+++ b/gio-sharp/generator/ManagedCallString.cs
@@ -0,0 +1,152 @@
+// GtkSharp.Generation.ManagedCallString.cs - The ManagedCallString Class.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2003 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+
+ public class ManagedCallString {
+
+ ArrayList parms = new ArrayList ();
+ ArrayList special = new ArrayList ();
+ string error_param = null;
+ string user_data_param = null;
+ string destroy_param = null;
+
+ public ManagedCallString (Parameters parms, bool drop_first)
+ {
+ for (int i = drop_first ? 1 : 0; i < parms.Count; i ++) {
+ Parameter p = parms [i];
+ if (p.IsLength && i > 0 && parms [i-1].IsString)
+ continue;
+ else if (p.Scope == "notified") {
+ user_data_param = parms[i+1].Name;
+ destroy_param = parms[i+2].Name;
+ i += 2;
+ } else if (p.IsUserData && parms.IsHidden (p)) {
+ user_data_param = p.Name;
+ continue;
+ } else if (p is ErrorParameter) {
+ error_param = p.Name;
+ continue;
+ }
+ this.parms.Add (p);
+
+ if (p.PassAs != String.Empty && (p.Name != p.FromNative (p.Name)))
+ this.special.Add (true);
+ else if (p.Generatable is CallbackGen)
+ this.special.Add (true);
+ else
+ this.special.Add (false);
+ }
+ }
+
+ public bool HasOutParam {
+ get {
+ foreach (Parameter p in parms) {
+ if (p.PassAs == "out")
+ return true;
+ }
+ return false;
+ }
+ }
+
+ public string Unconditional (string indent) {
+ string ret = "";
+ if (error_param != null)
+ ret = indent + error_param + " = IntPtr.Zero;\n";
+ return ret;
+ }
+
+ public string Setup (string indent)
+ {
+ string ret = "";
+
+ for (int i = 0; i < parms.Count; i ++) {
+ if ((bool)special[i] == false)
+ continue;
+
+ Parameter p = parms [i] as Parameter;
+ IGeneratable igen = p.Generatable;
+
+ if (igen is CallbackGen) {
+ if (user_data_param == null)
+ ret += indent + String.Format ("{0} {1}_invoker = new {0} ({1});\n", (igen as CallbackGen).InvokerName, p.Name);
+ else if (destroy_param == null)
+ ret += indent + String.Format ("{0} {1}_invoker = new {0} ({1}, {2});\n", (igen as CallbackGen).InvokerName, p.Name, user_data_param);
+ else
+ ret += indent + String.Format ("{0} {1}_invoker = new {0} ({1}, {2}, {3});\n", (igen as CallbackGen).InvokerName, p.Name, user_data_param, destroy_param);
+ } else {
+ ret += indent + igen.QualifiedName + " my" + p.Name;
+ if (p.PassAs == "ref")
+ ret += " = " + p.FromNative (p.Name);
+ ret += ";\n";
+ }
+ }
+
+ return ret;
+ }
+
+ public override string ToString ()
+ {
+ if (parms.Count < 1)
+ return "";
+
+ string[] result = new string [parms.Count];
+
+ for (int i = 0; i < parms.Count; i ++) {
+ Parameter p = parms [i] as Parameter;
+ result [i] = p.PassAs == "" ? "" : p.PassAs + " ";
+ if (p.Generatable is CallbackGen)
+ result [i] += p.Name + "_invoker.Handler";
+ else
+ result [i] += ((bool)special[i]) ? "my" + p.Name : p.FromNative (p.Name);
+ }
+
+ return String.Join (", ", result);
+ }
+
+ public string Finish (string indent)
+ {
+ string ret = "";
+
+ for (int i = 0; i < parms.Count; i ++) {
+ if ((bool)special[i] == false)
+ continue;
+
+ Parameter p = parms [i] as Parameter;
+ IGeneratable igen = p.Generatable;
+
+ if (igen is CallbackGen)
+ continue;
+ else if (igen is StructBase || igen is ByRefGen)
+ ret += indent + String.Format ("if ({0} != IntPtr.Zero) System.Runtime.InteropServices.Marshal.StructureToPtr (my{0}, {0}, false);\n", p.Name);
+ else
+ ret += indent + p.Name + " = " + igen.ToNativeReturn ("my" + p.Name) + ";\n";
+ }
+
+ return ret;
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/ManualGen.cs b/gio-sharp/generator/ManualGen.cs
new file mode 100644
index 0000000..1d94916
--- /dev/null
+++ b/gio-sharp/generator/ManualGen.cs
@@ -0,0 +1,58 @@
+// GtkSharp.Generation.ManualGen.cs - Ungenerated handle type Generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2003 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+
+ public class ManualGen : SimpleBase {
+
+ string from_fmt;
+
+ public ManualGen (string ctype, string type) : base (ctype, type, "null")
+ {
+ from_fmt = "new " + QualifiedName + "({0})";
+ }
+
+ public ManualGen (string ctype, string type, string from_fmt) : base (ctype, type, "null")
+ {
+ this.from_fmt = from_fmt;
+ }
+
+ public override string MarshalType {
+ get {
+ return "IntPtr";
+ }
+ }
+
+ public override string CallByName (string var_name)
+ {
+ return var_name + " == null ? IntPtr.Zero : " + var_name + ".Handle";
+ }
+
+ public override string FromNative(string var)
+ {
+ return String.Format (from_fmt, var);
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/MarshalGen.cs b/gio-sharp/generator/MarshalGen.cs
new file mode 100644
index 0000000..820961c
--- /dev/null
+++ b/gio-sharp/generator/MarshalGen.cs
@@ -0,0 +1,56 @@
+// GtkSharp.Generation.MarshalGen.cs - Simple marshaling Generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+
+ public class MarshalGen : SimpleBase {
+
+ string mtype;
+ string call_fmt;
+ string from_fmt;
+
+ public MarshalGen (string ctype, string type, string mtype, string call_fmt, string from_fmt) : base (ctype, type, "null")
+ {
+ this.mtype = mtype;
+ this.call_fmt = call_fmt;
+ this.from_fmt = from_fmt;
+ }
+
+ public override string MarshalType {
+ get {
+ return mtype;
+ }
+ }
+
+ public override string CallByName (string var)
+ {
+ return String.Format (call_fmt, var);
+ }
+
+ public override string FromNative (string var)
+ {
+ return String.Format (from_fmt, var);
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/Method.cs b/gio-sharp/generator/Method.cs
new file mode 100644
index 0000000..76cd721
--- /dev/null
+++ b/gio-sharp/generator/Method.cs
@@ -0,0 +1,304 @@
+// GtkSharp.Generation.Method.cs - The Method Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+
+ public class Method : MethodBase {
+
+ private ReturnValue retval;
+
+ private string call;
+ private bool is_get, is_set;
+ private bool deprecated = false;
+
+ public Method (XmlElement elem, ClassBase container_type) : base (elem, container_type)
+ {
+ this.retval = new ReturnValue (elem["return-type"]);
+
+ if (!container_type.IsDeprecated && elem.HasAttribute ("deprecated")) {
+ string attr = elem.GetAttribute ("deprecated");
+ deprecated = attr == "1" || attr == "true";
+ }
+
+ if (Name == "GetType")
+ Name = "GetGType";
+ }
+
+ public bool IsDeprecated {
+ get {
+ return deprecated;
+ }
+ }
+
+ public bool IsGetter {
+ get {
+ return is_get;
+ }
+ }
+
+ public bool IsSetter {
+ get {
+ return is_set;
+ }
+ }
+
+ public string ReturnType {
+ get {
+ return retval.CSType;
+ }
+ }
+
+ public override bool Validate ()
+ {
+ if (!retval.Validate () || !base.Validate ()) {
+ Console.Write(" in method " + Name + " ");
+ return false;
+ }
+
+ Parameters parms = Parameters;
+ is_get = ((((parms.IsAccessor && retval.IsVoid) || (parms.Count == 0 && !retval.IsVoid)) || (parms.Count == 0 && !retval.IsVoid)) && HasGetterName);
+ is_set = ((parms.IsAccessor || (parms.VisibleCount == 1 && retval.IsVoid)) && HasSetterName);
+
+ call = "(" + (IsStatic ? "" : container_type.CallByName () + (parms.Count > 0 ? ", " : "")) + Body.GetCallString (is_set) + ")";
+
+ return true;
+ }
+
+ private Method GetComplement ()
+ {
+ char complement;
+ if (is_get)
+ complement = 'S';
+ else
+ complement = 'G';
+
+ return container_type.GetMethod (complement + BaseName.Substring (1));
+ }
+
+ public string Declaration {
+ get {
+ return retval.CSType + " " + Name + " (" + (Signature != null ? Signature.ToString() : "") + ");";
+ }
+ }
+
+ private void GenerateDeclCommon (StreamWriter sw, ClassBase implementor)
+ {
+ if (IsStatic)
+ sw.Write("static ");
+ sw.Write (Safety);
+ Method dup = null;
+ if (container_type != null)
+ dup = container_type.GetMethodRecursively (Name);
+ if (implementor != null)
+ dup = implementor.GetMethodRecursively (Name);
+
+ if (Name == "ToString" && Parameters.Count == 0)
+ sw.Write("override ");
+ else if (Name == "GetGType" && container_type is ObjectGen)
+ sw.Write("new ");
+ else if (Modifiers == "new " || (dup != null && ((dup.Signature != null && Signature != null && dup.Signature.ToString() == Signature.ToString()) || (dup.Signature == null && Signature == null))))
+ sw.Write("new ");
+
+ if (is_get || is_set) {
+ if (retval.IsVoid)
+ sw.Write (Parameters.AccessorReturnType);
+ else
+ sw.Write(retval.CSType);
+ sw.Write(" ");
+ if (Name.StartsWith ("Get") || Name.StartsWith ("Set"))
+ sw.Write (Name.Substring (3));
+ else {
+ int dot = Name.LastIndexOf ('.');
+ if (dot != -1 && (Name.Substring (dot + 1, 3) == "Get" || Name.Substring (dot + 1, 3) == "Set"))
+ sw.Write (Name.Substring (0, dot + 1) + Name.Substring (dot + 4));
+ else
+ sw.Write (Name);
+ }
+ sw.WriteLine(" { ");
+ } else if (IsAccessor) {
+ sw.Write (Signature.AccessorType + " " + Name + "(" + Signature.AsAccessor + ")");
+ } else {
+ sw.Write(retval.CSType + " " + Name + "(" + (Signature != null ? Signature.ToString() : "") + ")");
+ }
+ }
+
+ public void GenerateDecl (StreamWriter sw)
+ {
+ if (IsStatic)
+ return;
+
+ if (is_get || is_set)
+ {
+ Method comp = GetComplement ();
+ if (comp != null && is_set)
+ return;
+
+ sw.Write("\t\t");
+ GenerateDeclCommon (sw, null);
+
+ sw.Write("\t\t\t");
+ sw.Write ((is_get) ? "get;" : "set;");
+
+ if (comp != null && comp.is_set)
+ sw.WriteLine (" set;");
+ else
+ sw.WriteLine ();
+
+ sw.WriteLine ("\t\t}");
+ }
+ else
+ {
+ sw.Write("\t\t");
+ GenerateDeclCommon (sw, null);
+ sw.WriteLine (";");
+ }
+
+ Statistics.MethodCount++;
+ }
+
+ public void GenerateImport (StreamWriter sw)
+ {
+ string import_sig = IsStatic ? "" : container_type.MarshalType + " raw";
+ import_sig += !IsStatic && Parameters.Count > 0 ? ", " : "";
+ import_sig += Parameters.ImportSignature.ToString();
+ sw.WriteLine("\t\t[DllImport(\"" + LibraryName + "\")]");
+ if (retval.MarshalType.StartsWith ("[return:"))
+ sw.WriteLine("\t\t" + retval.MarshalType + " static extern " + Safety + retval.CSType + " " + CName + "(" + import_sig + ");");
+ else
+ sw.WriteLine("\t\tstatic extern " + Safety + retval.MarshalType + " " + CName + "(" + import_sig + ");");
+ sw.WriteLine();
+ }
+
+ public void Generate (GenerationInfo gen_info, ClassBase implementor)
+ {
+ if (!Validate ())
+ return;
+
+ Method comp = null;
+
+ gen_info.CurrentMember = Name;
+
+ /* we are generated by the get Method, if there is one */
+ if (is_set || is_get)
+ {
+ if (Modifiers != "new " && container_type.GetPropertyRecursively (Name.Substring (3)) != null)
+ return;
+ comp = GetComplement ();
+ if (comp != null && is_set) {
+ if (Parameters.AccessorReturnType == comp.ReturnType)
+ return;
+ else {
+ is_set = false;
+ call = "(Handle, " + Body.GetCallString (false) + ")";
+ comp = null;
+ }
+ }
+ /* some setters take more than one arg */
+ if (comp != null && !comp.is_set)
+ comp = null;
+ }
+
+ GenerateImport (gen_info.Writer);
+ if (comp != null && retval.CSType == comp.Parameters.AccessorReturnType)
+ comp.GenerateImport (gen_info.Writer);
+
+ if (IsDeprecated)
+ gen_info.Writer.WriteLine("\t\t[Obsolete]");
+ gen_info.Writer.Write("\t\t");
+ if (Protection != "")
+ gen_info.Writer.Write("{0} ", Protection);
+ GenerateDeclCommon (gen_info.Writer, implementor);
+
+ if (is_get || is_set)
+ {
+ gen_info.Writer.Write ("\t\t\t");
+ gen_info.Writer.Write ((is_get) ? "get" : "set");
+ GenerateBody (gen_info, implementor, "\t");
+ }
+ else
+ GenerateBody (gen_info, implementor, "");
+
+ if (is_get || is_set)
+ {
+ if (comp != null && retval.CSType == comp.Parameters.AccessorReturnType)
+ {
+ gen_info.Writer.WriteLine ();
+ gen_info.Writer.Write ("\t\t\tset");
+ comp.GenerateBody (gen_info, implementor, "\t");
+ }
+ gen_info.Writer.WriteLine ();
+ gen_info.Writer.WriteLine ("\t\t}");
+ }
+ else
+ gen_info.Writer.WriteLine();
+
+ gen_info.Writer.WriteLine();
+
+ Statistics.MethodCount++;
+ }
+
+ public void GenerateBody (GenerationInfo gen_info, ClassBase implementor, string indent)
+ {
+ StreamWriter sw = gen_info.Writer;
+ sw.WriteLine(" {");
+ if (!IsStatic && implementor != null)
+ implementor.Prepare (sw, indent + "\t\t\t");
+ if (IsAccessor)
+ Body.InitAccessor (sw, Signature, indent);
+ Body.Initialize(gen_info, is_get, is_set, indent);
+
+ sw.Write(indent + "\t\t\t");
+ if (retval.IsVoid)
+ sw.WriteLine(CName + call + ";");
+ else {
+ sw.WriteLine(retval.MarshalType + " raw_ret = " + CName + call + ";");
+ sw.WriteLine(indent + "\t\t\t" + retval.CSType + " ret = " + retval.FromNative ("raw_ret") + ";");
+ }
+
+ if (!IsStatic && implementor != null)
+ implementor.Finish (sw, indent + "\t\t\t");
+ Body.Finish (sw, indent);
+ Body.HandleException (sw, indent);
+
+ if (is_get && Parameters.Count > 0)
+ sw.WriteLine (indent + "\t\t\treturn " + Parameters.AccessorName + ";");
+ else if (!retval.IsVoid)
+ sw.WriteLine (indent + "\t\t\treturn ret;");
+ else if (IsAccessor)
+ Body.FinishAccessor (sw, Signature, indent);
+
+ sw.Write(indent + "\t\t}");
+ }
+
+ bool IsAccessor {
+ get {
+ return retval.IsVoid && Signature.IsAccessor;
+ }
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/MethodBase.cs b/gio-sharp/generator/MethodBase.cs
new file mode 100644
index 0000000..9a25fa0
--- /dev/null
+++ b/gio-sharp/generator/MethodBase.cs
@@ -0,0 +1,184 @@
+// GtkSharp.Generation.MethodBase.cs - function element base class.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004-2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Xml;
+
+ public abstract class MethodBase {
+
+ XmlElement elem;
+ protected ClassBase container_type;
+ Parameters parms;
+ bool is_static = false;
+ string mods = String.Empty;
+ string name;
+ private string protection = "public";
+
+ protected MethodBase (XmlElement elem, ClassBase container_type)
+ {
+ this.elem = elem;
+ this.container_type = container_type;
+ this.name = elem.GetAttribute ("name");
+ parms = new Parameters (elem ["parameters"]);
+ IsStatic = elem.GetAttribute ("shared") == "true";
+ if (elem.HasAttribute ("new_flag"))
+ mods = "new ";
+ if (elem.HasAttribute ("accessibility")) {
+ string attr = elem.GetAttribute ("accessibility");
+ switch (attr) {
+ case "public":
+ case "protected":
+ case "internal":
+ case "private":
+ case "protected internal":
+ protection = attr;
+ break;
+ }
+ }
+ }
+
+ protected string BaseName {
+ get {
+ string name = Name;
+ int idx = Name.LastIndexOf (".");
+ if (idx > 0)
+ name = Name.Substring (idx + 1);
+ return name;
+ }
+ }
+
+ MethodBody body;
+ public MethodBody Body {
+ get {
+ if (body == null)
+ body = new MethodBody (parms);
+ return body;
+ }
+ }
+
+ public string CName {
+ get {
+ return SymbolTable.Table.MangleName (elem.GetAttribute ("cname"));
+ }
+ }
+
+ protected bool HasGetterName {
+ get {
+ string name = BaseName;
+ if (name.Length <= 3)
+ return false;
+ if (name.StartsWith ("Get") || name.StartsWith ("Has"))
+ return Char.IsUpper (name [3]);
+ else if (name.StartsWith ("Is"))
+ return Char.IsUpper (name [2]);
+ else
+ return false;
+ }
+ }
+
+ protected bool HasSetterName {
+ get {
+ string name = BaseName;
+ if (name.Length <= 3)
+ return false;
+
+ return name.StartsWith ("Set") && Char.IsUpper (name [3]);
+ }
+ }
+
+ public bool IsStatic {
+ get {
+ return is_static;
+ }
+ set {
+ is_static = value;
+ parms.Static = value;
+ }
+ }
+
+ public string LibraryName {
+ get {
+ if (elem.HasAttribute ("library"))
+ return elem.GetAttribute ("library");
+ return container_type.LibraryName;
+ }
+ }
+
+ public string Modifiers {
+ get {
+ return mods;
+ }
+ set {
+ mods = value;
+ }
+ }
+
+ public string Name {
+ get {
+ return name;
+ }
+ set {
+ name = value;
+ }
+ }
+
+ public Parameters Parameters {
+ get {
+ return parms;
+ }
+ }
+
+ public string Protection {
+ get { return protection; }
+ set { protection = value; }
+ }
+
+ protected string Safety {
+ get {
+ return Body.ThrowsException && !(container_type is InterfaceGen) ? "unsafe " : "";
+ }
+ }
+
+ Signature sig;
+ public Signature Signature {
+ get {
+ if (sig == null)
+ sig = new Signature (parms);
+ return sig;
+ }
+ }
+
+ public virtual bool Validate ()
+ {
+ if (!parms.Validate ()) {
+ Console.Write("in " + CName + " ");
+ Statistics.ThrottledCount++;
+ return false;
+ }
+
+ return true;
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/MethodBody.cs b/gio-sharp/generator/MethodBody.cs
new file mode 100644
index 0000000..cee7079
--- /dev/null
+++ b/gio-sharp/generator/MethodBody.cs
@@ -0,0 +1,177 @@
+// GtkSharp.Generation.MethodBody.cs - The MethodBody Generation Class.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+
+ public class MethodBody {
+
+ Parameters parameters;
+
+ public MethodBody (Parameters parms)
+ {
+ parameters = parms;
+ }
+
+ private string CastFromInt (string type)
+ {
+ return type != "int" ? "(" + type + ") " : "";
+ }
+
+ public string GetCallString (bool is_set)
+ {
+ if (parameters.Count == 0)
+ return String.Empty;
+
+ string[] result = new string [parameters.Count];
+ for (int i = 0; i < parameters.Count; i++) {
+ Parameter p = parameters [i];
+ IGeneratable igen = p.Generatable;
+
+ bool is_prop = is_set && i == 0;
+
+ if (i > 0 && parameters [i - 1].IsString && p.IsLength && p.PassAs == String.Empty) {
+ string string_name = (i == 1 && is_set) ? "value" : parameters [i - 1].Name;
+ result[i] = igen.CallByName (CastFromInt (p.CSType) + "System.Text.Encoding.UTF8.GetByteCount (" + string_name + ")");
+ continue;
+ }
+
+ if (is_prop)
+ p.CallName = "value";
+ else
+ p.CallName = p.Name;
+ string call_parm = p.CallString;
+
+ if (p.IsUserData && parameters.IsHidden (p) && !parameters.HideData &&
+ (i == 0 || parameters [i - 1].Scope != "notified")) {
+ call_parm = "IntPtr.Zero";
+ }
+
+ result [i] += call_parm;
+ }
+
+ return String.Join (", ", result);
+ }
+
+ public void Initialize (GenerationInfo gen_info)
+ {
+ Initialize (gen_info, false, false, String.Empty);
+ }
+
+ public void Initialize (GenerationInfo gen_info, bool is_get, bool is_set, string indent)
+ {
+ if (parameters.Count == 0)
+ return;
+
+ StreamWriter sw = gen_info.Writer;
+ for (int i = 0; i < parameters.Count; i++) {
+ Parameter p = parameters [i];
+
+ IGeneratable gen = p.Generatable;
+ string name = p.Name;
+ if (is_set)
+ name = "value";
+
+ p.CallName = name;
+ foreach (string prep in p.Prepare)
+ sw.WriteLine (indent + "\t\t\t" + prep);
+
+ if (gen is CallbackGen) {
+ CallbackGen cbgen = gen as CallbackGen;
+ string wrapper = cbgen.GenWrapper(gen_info);
+ switch (p.Scope) {
+ case "notified":
+ sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
+ sw.WriteLine (indent + "\t\t\tIntPtr {0};", parameters [i + 1].Name);
+ sw.WriteLine (indent + "\t\t\t{0} {1};", parameters [i + 2].CSType, parameters [i + 2].Name);
+ sw.WriteLine (indent + "\t\t\tif ({0} == null) {{", name);
+ sw.WriteLine (indent + "\t\t\t\t{0} = IntPtr.Zero;", parameters [i + 1].Name);
+ sw.WriteLine (indent + "\t\t\t\t{0} = null;", parameters [i + 2].Name);
+ sw.WriteLine (indent + "\t\t\t} else {");
+ sw.WriteLine (indent + "\t\t\t\t{0} = (IntPtr) GCHandle.Alloc ({1}_wrapper);", parameters [i + 1].Name, name);
+ sw.WriteLine (indent + "\t\t\t\t{0} = GLib.DestroyHelper.NotifyHandler;", parameters [i + 2].Name, parameters [i + 2].CSType);
+ sw.WriteLine (indent + "\t\t\t}");
+ break;
+
+ case "async":
+ sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
+ sw.WriteLine (indent + "\t\t\t{0}_wrapper.PersistUntilCalled ();", name);
+ break;
+ case "call":
+ default:
+ if (p.Scope == String.Empty)
+ Console.WriteLine ("Defaulting " + gen.Name + " param to 'call' scope in method " + gen_info.CurrentMember);
+ sw.WriteLine (indent + "\t\t\t{0} {1}_wrapper = new {0} ({1});", wrapper, name);
+ break;
+ }
+ }
+ }
+
+ if (ThrowsException)
+ sw.WriteLine (indent + "\t\t\tIntPtr error = IntPtr.Zero;");
+ }
+
+ public void InitAccessor (StreamWriter sw, Signature sig, string indent)
+ {
+ sw.WriteLine (indent + "\t\t\t" + sig.AccessorType + " " + sig.AccessorName + ";");
+ }
+
+ public void Finish (StreamWriter sw, string indent)
+ {
+ foreach (Parameter p in parameters)
+ foreach (string s in p.Finish)
+ sw.WriteLine(indent + "\t\t\t" + s);
+ }
+
+ public void FinishAccessor (StreamWriter sw, Signature sig, string indent)
+ {
+ sw.WriteLine (indent + "\t\t\treturn " + sig.AccessorName + ";");
+ }
+
+ public void HandleException (StreamWriter sw, string indent)
+ {
+ if (!ThrowsException)
+ return;
+ sw.WriteLine (indent + "\t\t\tif (error != IntPtr.Zero) throw new GLib.GException (error);");
+ }
+
+ public bool ThrowsException {
+ get {
+ int idx = parameters.Count - 1;
+
+ while (idx >= 0) {
+ if (parameters [idx].IsUserData)
+ idx--;
+ else if (parameters [idx].CType == "GError**")
+ return true;
+ else
+ break;
+ }
+ return false;
+ }
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/ObjectBase.cs b/gio-sharp/generator/ObjectBase.cs
new file mode 100644
index 0000000..2f00e9b
--- /dev/null
+++ b/gio-sharp/generator/ObjectBase.cs
@@ -0,0 +1,36 @@
+// ObjectBase.cs - Base class for Object types
+//
+// Authors: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Xml;
+
+ public abstract class ObjectBase : HandleBase {
+
+ protected ObjectBase (XmlElement ns, XmlElement elem) : base (ns, elem) {}
+
+ public override string FromNative (string var, bool owned)
+ {
+ return "GLib.Object.GetObject(" + var + (owned ? ", true" : "") + ") as " + QualifiedName;
+ }
+ }
+}
diff --git a/gio-sharp/generator/ObjectField.cs b/gio-sharp/generator/ObjectField.cs
new file mode 100644
index 0000000..47e0156
--- /dev/null
+++ b/gio-sharp/generator/ObjectField.cs
@@ -0,0 +1,48 @@
+// GtkSharp.Generation.ObjectField.cs - autogenerated field glue
+//
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+
+ public class ObjectField : FieldBase {
+
+ public ObjectField (XmlElement elem, ClassBase container_type) : base (elem, container_type)
+ {
+ if (CType == "char*" || CType == "gchar*")
+ ctype = "const-" + CType;
+ }
+
+ protected override bool Writable {
+ get {
+ return elem.GetAttribute ("writeable") == "true";
+ }
+ }
+
+ protected override string DefaultAccess {
+ get {
+ return "private";
+ }
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/ObjectGen.cs b/gio-sharp/generator/ObjectGen.cs
new file mode 100644
index 0000000..58d2c17
--- /dev/null
+++ b/gio-sharp/generator/ObjectGen.cs
@@ -0,0 +1,425 @@
+// GtkSharp.Generation.ObjectGen.cs - The Object Generatable.
+//
+// Author: Mike Kestner <mkestner ximian com>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Text;
+ using System.Xml;
+
+ public class ObjectGen : ObjectBase {
+
+ private ArrayList custom_attrs = new ArrayList();
+ private ArrayList strings = new ArrayList();
+ private ArrayList vm_nodes = new ArrayList();
+ private Hashtable childprops = new Hashtable();
+ private static Hashtable dirs = new Hashtable ();
+
+ public ObjectGen (XmlElement ns, XmlElement elem) : base (ns, elem)
+ {
+ foreach (XmlNode node in elem.ChildNodes) {
+ string name;
+
+ if (!(node is XmlElement)) continue;
+ XmlElement member = (XmlElement) node;
+
+ switch (node.Name) {
+ case "callback":
+ Statistics.IgnoreCount++;
+ break;
+
+ case "custom-attribute":
+ custom_attrs.Add (member.InnerXml);
+ break;
+
+ case "virtual_method":
+ Statistics.IgnoreCount++;
+ break;
+
+ case "static-string":
+ strings.Add (node);
+ break;
+
+ case "childprop":
+ name = member.GetAttribute ("name");
+ while (childprops.ContainsKey (name))
+ name += "mangled";
+ childprops.Add (name, new ChildProperty (member, this));
+ break;
+
+ default:
+ if (!IsNodeNameHandled (node.Name))
+ Console.WriteLine ("Unexpected node " + node.Name + " in " + CName);
+ break;
+ }
+ }
+ }
+
+ public override bool Validate ()
+ {
+ ArrayList invalids = new ArrayList ();
+
+ foreach (ChildProperty prop in childprops.Values) {
+ if (!prop.Validate ()) {
+ Console.WriteLine ("in Object " + QualifiedName);
+ invalids.Add (prop);
+ }
+ }
+ foreach (ChildProperty prop in invalids)
+ childprops.Remove (prop);
+
+ return base.Validate ();
+ }
+
+ private bool DisableVoidCtor {
+ get {
+ return Elem.HasAttribute ("disable_void_ctor");
+ }
+ }
+
+ private bool DisableGTypeCtor {
+ get {
+ return Elem.HasAttribute ("disable_gtype_ctor");
+ }
+ }
+
+ private class DirectoryInfo {
+ public string assembly_name;
+ public Hashtable objects;
+
+ public DirectoryInfo (string assembly_name) {
+ this.assembly_name = assembly_name;
+ objects = new Hashtable ();
+ }
+ }
+
+ private static DirectoryInfo GetDirectoryInfo (string dir, string assembly_name)
+ {
+ DirectoryInfo result;
+
+ if (dirs.ContainsKey (dir)) {
+ result = dirs [dir] as DirectoryInfo;
+ if (result.assembly_name != assembly_name) {
+ Console.WriteLine ("Can't put multiple assemblies in one directory.");
+ return null;
+ }
+
+ return result;
+ }
+
+ result = new DirectoryInfo (assembly_name);
+ dirs.Add (dir, result);
+
+ return result;
+ }
+
+ public override void Generate (GenerationInfo gen_info)
+ {
+ gen_info.CurrentType = Name;
+
+ string asm_name = gen_info.AssemblyName.Length == 0 ? NS.ToLower () + "-sharp" : gen_info.AssemblyName;
+ DirectoryInfo di = GetDirectoryInfo (gen_info.Dir, asm_name);
+
+ StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
+
+ sw.WriteLine ("namespace " + NS + " {");
+ sw.WriteLine ();
+ sw.WriteLine ("\tusing System;");
+ sw.WriteLine ("\tusing System.Collections;");
+ sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+ sw.WriteLine ();
+
+ SymbolTable table = SymbolTable.Table;
+
+ sw.WriteLine ("#region Autogenerated code");
+ if (IsDeprecated)
+ sw.WriteLine ("\t[Obsolete]");
+ foreach (string attr in custom_attrs)
+ sw.WriteLine ("\t" + attr);
+ sw.Write ("\t{0} {1}class " + Name, IsInternal ? "internal" : "public", IsAbstract ? "abstract " : "");
+ string cs_parent = table.GetCSType(Elem.GetAttribute("parent"));
+ if (cs_parent != "") {
+ di.objects.Add (CName, QualifiedName);
+ sw.Write (" : " + cs_parent);
+ }
+ foreach (string iface in interfaces) {
+ if (Parent != null && Parent.Implements (iface))
+ continue;
+ sw.Write (", " + table.GetCSType (iface));
+ }
+ foreach (string iface in managed_interfaces) {
+ if (Parent != null && Parent.Implements (iface))
+ continue;
+ sw.Write (", " + iface);
+ }
+ sw.WriteLine (" {");
+ sw.WriteLine ();
+
+ GenCtors (gen_info);
+ GenProperties (gen_info, null);
+ GenFields (gen_info);
+ GenChildProperties (gen_info);
+
+ bool has_sigs = (sigs != null && sigs.Count > 0);
+ if (!has_sigs) {
+ foreach (string iface in interfaces) {
+ ClassBase igen = table.GetClassGen (iface);
+ if (igen != null && igen.Signals != null) {
+ has_sigs = true;
+ break;
+ }
+ }
+ }
+
+ if (has_sigs && Elem.HasAttribute("parent")) {
+ GenSignals (gen_info, null);
+ }
+
+ if (vm_nodes.Count > 0) {
+ if (gen_info.GlueEnabled) {
+ GenVirtualMethods (gen_info);
+ } else {
+ Statistics.VMIgnored = true;
+ Statistics.ThrottledCount += vm_nodes.Count;
+ }
+ }
+
+ GenMethods (gen_info, null, null);
+
+ if (interfaces.Count != 0) {
+ Hashtable all_methods = new Hashtable ();
+ foreach (Method m in Methods.Values)
+ all_methods[m.Name] = m;
+ Hashtable collisions = new Hashtable ();
+ foreach (string iface in interfaces) {
+ ClassBase igen = table.GetClassGen (iface);
+ foreach (Method m in igen.Methods.Values) {
+ Method collision = all_methods[m.Name] as Method;
+ if (collision != null && collision.Signature.Types == m.Signature.Types)
+ collisions[m.Name] = true;
+ else
+ all_methods[m.Name] = m;
+ }
+ }
+
+ foreach (string iface in interfaces) {
+ if (Parent != null && Parent.Implements (iface))
+ continue;
+ ClassBase igen = table.GetClassGen (iface);
+ igen.GenMethods (gen_info, collisions, this);
+ igen.GenProperties (gen_info, this);
+ igen.GenSignals (gen_info, this);
+ }
+ }
+
+ foreach (XmlElement str in strings) {
+ sw.Write ("\t\tpublic static string " + str.GetAttribute ("name"));
+ sw.WriteLine (" {\n\t\t\t get { return \"" + str.GetAttribute ("value") + "\"; }\n\t\t}");
+ }
+
+ if (cs_parent != String.Empty && GetExpected (CName) != QualifiedName) {
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tstatic " + Name + " ()");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tGtkSharp." + Studlify (asm_name) + ".ObjectManager.Initialize ();");
+ sw.WriteLine ("\t\t}");
+ }
+
+ sw.WriteLine ("#endregion");
+ AppendCustom (sw, gen_info.CustomDir);
+
+ sw.WriteLine ("\t}");
+ sw.WriteLine ("}");
+
+ sw.Close ();
+ gen_info.Writer = null;
+ Statistics.ObjectCount++;
+ }
+
+ protected override void GenCtors (GenerationInfo gen_info)
+ {
+ if (!Elem.HasAttribute("parent"))
+ return;
+
+ if (!DisableGTypeCtor) {
+ gen_info.Writer.WriteLine("\t\t[Obsolete]");
+ gen_info.Writer.WriteLine("\t\tprotected " + Name + "(GLib.GType gtype) : base(gtype) {}");
+ }
+ gen_info.Writer.WriteLine("\t\tpublic " + Name + "(IntPtr raw) : base(raw) {}");
+ if (ctors.Count == 0 && !DisableVoidCtor) {
+ gen_info.Writer.WriteLine();
+ gen_info.Writer.WriteLine("\t\tprotected " + Name + "() : base(IntPtr.Zero)");
+ gen_info.Writer.WriteLine("\t\t{");
+ gen_info.Writer.WriteLine("\t\t\tCreateNativeObject (new string [0], new GLib.Value [0]);");
+ gen_info.Writer.WriteLine("\t\t}");
+ }
+ gen_info.Writer.WriteLine();
+
+ base.GenCtors (gen_info);
+ }
+
+ protected void GenChildProperties (GenerationInfo gen_info)
+ {
+ if (childprops.Count == 0)
+ return;
+
+ StreamWriter sw = gen_info.Writer;
+
+ ObjectGen child_ancestor = Parent as ObjectGen;
+ while (child_ancestor.CName != "GtkContainer" &&
+ child_ancestor.childprops.Count == 0)
+ child_ancestor = child_ancestor.Parent as ObjectGen;
+
+ sw.WriteLine ("\t\tpublic class " + Name + "Child : " + child_ancestor.NS + "." + child_ancestor.Name + "." + child_ancestor.Name + "Child {");
+ sw.WriteLine ("\t\t\tprotected internal " + Name + "Child (Gtk.Container parent, Gtk.Widget child) : base (parent, child) {}");
+ sw.WriteLine ("");
+
+ foreach (ChildProperty prop in childprops.Values)
+ prop.Generate (gen_info, "\t\t\t", null);
+
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ("");
+
+ sw.WriteLine ("\t\tpublic override Gtk.Container.ContainerChild this [Gtk.Widget child] {");
+ sw.WriteLine ("\t\t\tget {");
+ sw.WriteLine ("\t\t\t\treturn new " + Name + "Child (this, child);");
+ sw.WriteLine ("\t\t\t}");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ("");
+
+ }
+
+ private void GenVMGlue (GenerationInfo gen_info, XmlElement elem)
+ {
+ StreamWriter sw = gen_info.GlueWriter;
+
+ string vm_name = elem.GetAttribute ("cname");
+ string method = gen_info.GluelibName + "_" + NS + Name + "_override_" + vm_name;
+ sw.WriteLine ();
+ sw.WriteLine ("void " + method + " (GType type, gpointer cb);");
+ sw.WriteLine ();
+ sw.WriteLine ("void");
+ sw.WriteLine (method + " (GType type, gpointer cb)");
+ sw.WriteLine ("{");
+ sw.WriteLine ("\t{0} *klass = ({0} *) g_type_class_peek (type);", NS + Name + "Class");
+ sw.WriteLine ("\tklass->" + vm_name + " = cb;");
+ sw.WriteLine ("}");
+ }
+
+ static bool vmhdrs_needed = true;
+
+ private void GenVirtualMethods (GenerationInfo gen_info)
+ {
+ if (vmhdrs_needed) {
+ gen_info.GlueWriter.WriteLine ("#include <glib-object.h>");
+ gen_info.GlueWriter.WriteLine ("#include \"vmglueheaders.h\"");
+ gen_info.GlueWriter.WriteLine ();
+ vmhdrs_needed = false;
+ }
+
+ foreach (XmlElement elem in vm_nodes) {
+ GenVMGlue (gen_info, elem);
+ }
+ }
+
+ /* Keep this in sync with the one in glib/GType.cs */
+ private static string GetExpected (string cname)
+ {
+ for (int i = 1; i < cname.Length; i++) {
+ if (Char.IsUpper (cname[i])) {
+ if (i == 1 && cname[0] == 'G')
+ return "GLib." + cname.Substring (1);
+ else
+ return cname.Substring (0, i) + "." + cname.Substring (i);
+ }
+ }
+
+ throw new ArgumentException ("cname doesn't follow the NamespaceType capitalization style: " + cname);
+ }
+
+ private static bool NeedsMap (Hashtable objs, string assembly_name)
+ {
+ foreach (string key in objs.Keys)
+ if (GetExpected (key) != ((string) objs[key]))
+ return true;
+
+ return false;
+ }
+
+ private static string Studlify (string name)
+ {
+ string result = "";
+
+ string[] subs = name.Split ('-');
+ foreach (string sub in subs)
+ result += Char.ToUpper (sub[0]) + sub.Substring (1);
+
+ return result;
+ }
+
+ public static void GenerateMappers ()
+ {
+ foreach (string dir in dirs.Keys) {
+
+ DirectoryInfo di = dirs[dir] as DirectoryInfo;
+
+ if (!NeedsMap (di.objects, di.assembly_name))
+ continue;
+
+ GenerationInfo gen_info = new GenerationInfo (dir, di.assembly_name);
+
+ GenerateMapper (di, gen_info);
+ }
+ }
+
+ private static void GenerateMapper (DirectoryInfo dir_info, GenerationInfo gen_info)
+ {
+ StreamWriter sw = gen_info.OpenStream ("ObjectManager");
+
+ sw.WriteLine ("namespace GtkSharp." + Studlify (dir_info.assembly_name) + " {");
+ sw.WriteLine ();
+ sw.WriteLine ("\tpublic class ObjectManager {");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tstatic bool initialized = false;");
+ sw.WriteLine ("\t\t// Call this method from the appropriate module init function.");
+ sw.WriteLine ("\t\tpublic static void Initialize ()");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tif (initialized)");
+ sw.WriteLine ("\t\t\t\treturn;");
+ sw.WriteLine ("");
+ sw.WriteLine ("\t\t\tinitialized = true;");
+
+ foreach (string key in dir_info.objects.Keys) {
+ if (GetExpected(key) != ((string) dir_info.objects[key]))
+ sw.WriteLine ("\t\t\tGLib.GType.Register ({0}.GType, typeof ({0}));", dir_info.objects [key]);
+ }
+
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ("\t}");
+ sw.WriteLine ("}");
+ sw.Close ();
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/OpaqueGen.cs b/gio-sharp/generator/OpaqueGen.cs
new file mode 100644
index 0000000..ca5bf86
--- /dev/null
+++ b/gio-sharp/generator/OpaqueGen.cs
@@ -0,0 +1,230 @@
+// GtkSharp.Generation.OpaqueGen.cs - The Opaque Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+
+ public class OpaqueGen : HandleBase {
+
+ public OpaqueGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
+
+ public override string FromNative(string var, bool owned)
+ {
+ return var + " == IntPtr.Zero ? null : (" + QualifiedName + ") GLib.Opaque.GetOpaque (" + var + ", typeof (" + QualifiedName + "), " + (owned ? "true" : "false") + ")";
+ }
+
+ private bool DisableRawCtor {
+ get {
+ return Elem.HasAttribute ("disable_raw_ctor");
+ }
+ }
+
+ public override void Generate (GenerationInfo gen_info)
+ {
+ gen_info.CurrentType = Name;
+
+ StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
+
+ sw.WriteLine ("namespace " + NS + " {");
+ sw.WriteLine ();
+ sw.WriteLine ("\tusing System;");
+ sw.WriteLine ("\tusing System.Collections;");
+ sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+ sw.WriteLine ();
+
+ sw.WriteLine ("#region Autogenerated code");
+
+ SymbolTable table = SymbolTable.Table;
+
+ Method ref_, unref, dispose;
+ GetSpecialMethods (out ref_, out unref, out dispose);
+
+ if (IsDeprecated)
+ sw.WriteLine ("\t[Obsolete]");
+ sw.Write ("\t{0} class " + Name, IsInternal ? "internal" : "public");
+ string cs_parent = table.GetCSType(Elem.GetAttribute("parent"));
+ if (cs_parent != "")
+ sw.Write (" : " + cs_parent);
+ else
+ sw.Write (" : GLib.Opaque");
+ sw.WriteLine (" {");
+ sw.WriteLine ();
+
+ GenFields (gen_info);
+ GenMethods (gen_info, null, null);
+ GenCtors (gen_info);
+
+ if (ref_ != null) {
+ ref_.GenerateImport (sw);
+ sw.WriteLine ("\t\tprotected override void Ref (IntPtr raw)");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tif (!Owned) {");
+ sw.WriteLine ("\t\t\t\t" + ref_.CName + " (raw);");
+ sw.WriteLine ("\t\t\t\tOwned = true;");
+ sw.WriteLine ("\t\t\t}");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+
+ if (ref_.IsDeprecated) {
+ sw.WriteLine ("\t\t[Obsolete(\"" + QualifiedName + " is now refcounted automatically\")]");
+ if (ref_.ReturnType == "void")
+ sw.WriteLine ("\t\tpublic void Ref () {}");
+ else
+ sw.WriteLine ("\t\tpublic " + Name + " Ref () { return this; }");
+ sw.WriteLine ();
+ }
+ }
+
+ bool finalizer_needed = false;
+
+ if (unref != null) {
+ unref.GenerateImport (sw);
+ sw.WriteLine ("\t\tprotected override void Unref (IntPtr raw)");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tif (Owned) {");
+ sw.WriteLine ("\t\t\t\t" + unref.CName + " (raw);");
+ sw.WriteLine ("\t\t\t\tOwned = false;");
+ sw.WriteLine ("\t\t\t}");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+
+ if (unref.IsDeprecated) {
+ sw.WriteLine ("\t\t[Obsolete(\"" + QualifiedName + " is now refcounted automatically\")]");
+ sw.WriteLine ("\t\tpublic void Unref () {}");
+ sw.WriteLine ();
+ }
+ finalizer_needed = true;
+ }
+
+ if (dispose != null) {
+ dispose.GenerateImport (sw);
+ sw.WriteLine ("\t\tprotected override void Free (IntPtr raw)");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\t" + dispose.CName + " (raw);");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+
+ if (dispose.IsDeprecated) {
+ sw.WriteLine ("\t\t[Obsolete(\"" + QualifiedName + " is now freed automatically\")]");
+ sw.WriteLine ("\t\tpublic void " + dispose.Name + " () {}");
+ sw.WriteLine ();
+ }
+ finalizer_needed = true;
+ }
+
+ if (finalizer_needed) {
+ sw.WriteLine ("\t\tclass FinalizerInfo {");
+ sw.WriteLine ("\t\t\tIntPtr handle;");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\t\tpublic FinalizerInfo (IntPtr handle)");
+ sw.WriteLine ("\t\t\t{");
+ sw.WriteLine ("\t\t\t\tthis.handle = handle;");
+ sw.WriteLine ("\t\t\t}");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\t\tpublic bool Handler ()");
+ sw.WriteLine ("\t\t\t{");
+ if (dispose != null)
+ sw.WriteLine ("\t\t\t\t{0} (handle);", dispose.CName);
+ else if (unref != null)
+ sw.WriteLine ("\t\t\t\t{0} (handle);", unref.CName);
+ sw.WriteLine ("\t\t\t\treturn false;");
+ sw.WriteLine ("\t\t\t}");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\t~{0} ()", Name);
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tif (!Owned)");
+ sw.WriteLine ("\t\t\t\treturn;");
+ sw.WriteLine ("\t\t\tFinalizerInfo info = new FinalizerInfo (Handle);");
+ sw.WriteLine ("\t\t\tGLib.Timeout.Add (50, new GLib.TimeoutHandler (info.Handler));");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ }
+
+#if false
+ Method copy = Methods ["Copy"] as Method;
+ if (copy != null && copy.Parameters.Count == 0) {
+ sw.WriteLine ("\t\tprotected override GLib.Opaque Copy (IntPtr raw)");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tGLib.Opaque result = new " + QualifiedName + " (" + copy.CName + " (raw));");
+ sw.WriteLine ("\t\t\tresult.Owned = true;");
+ sw.WriteLine ("\t\t\treturn result;");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ }
+#endif
+ sw.WriteLine ("#endregion");
+
+ AppendCustom(sw, gen_info.CustomDir);
+
+ sw.WriteLine ("\t}");
+ sw.WriteLine ("}");
+
+ sw.Close ();
+ gen_info.Writer = null;
+ Statistics.OpaqueCount++;
+ }
+
+ void GetSpecialMethods (out Method ref_, out Method unref, out Method dispose)
+ {
+ ref_ = CheckSpecialMethod (GetMethod ("Ref"));
+ unref = CheckSpecialMethod (GetMethod ("Unref"));
+
+ dispose = GetMethod ("Free");
+ if (dispose == null) {
+ dispose = GetMethod ("Destroy");
+ if (dispose == null)
+ dispose = GetMethod ("Dispose");
+ }
+ dispose = CheckSpecialMethod (dispose);
+ }
+
+ Method CheckSpecialMethod (Method method)
+ {
+ if (method == null)
+ return null;
+ if (method.ReturnType != "void" &&
+ method.ReturnType != QualifiedName)
+ return null;
+ if (method.Signature.ToString () != "")
+ return null;
+
+ methods.Remove (method.Name);
+ return method;
+ }
+
+ protected override void GenCtors (GenerationInfo gen_info)
+ {
+ if (!DisableRawCtor) {
+ gen_info.Writer.WriteLine("\t\tpublic " + Name + "(IntPtr raw) : base(raw) {}");
+ gen_info.Writer.WriteLine();
+ }
+
+ base.GenCtors (gen_info);
+ }
+
+ }
+}
+
diff --git a/gio-sharp/generator/Parameters.cs b/gio-sharp/generator/Parameters.cs
new file mode 100644
index 0000000..75dd68f
--- /dev/null
+++ b/gio-sharp/generator/Parameters.cs
@@ -0,0 +1,728 @@
+// GtkSharp.Generation.Parameters.cs - The Parameters Generation Class.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+
+ public class Parameter {
+
+ private XmlElement elem;
+
+ public Parameter (XmlElement e)
+ {
+ elem = e;
+ }
+
+ string call_name;
+ public string CallName {
+ get {
+ if (call_name == null)
+ return Name;
+ else
+ return call_name;
+ }
+ set {
+ call_name = value;
+ }
+ }
+
+ public string CType {
+ get {
+ string type = elem.GetAttribute("type");
+ if (type == "void*")
+ type = "gpointer";
+ return type;
+ }
+ }
+
+ public string CSType {
+ get {
+ string cstype = SymbolTable.Table.GetCSType( elem.GetAttribute("type"));
+ if (cstype == "void")
+ cstype = "System.IntPtr";
+ if (IsArray) {
+ if (IsParams)
+ cstype = "params " + cstype;
+ cstype += "[]";
+ cstype = cstype.Replace ("ref ", "");
+ }
+ return cstype;
+ }
+ }
+
+ public IGeneratable Generatable {
+ get {
+ return SymbolTable.Table[CType];
+ }
+ }
+
+ public bool IsArray {
+ get {
+ return elem.HasAttribute("array") || elem.HasAttribute("null_term_array");
+ }
+ }
+
+ public bool IsEllipsis {
+ get {
+ return elem.HasAttribute("ellipsis");
+ }
+ }
+
+ public bool IsCount {
+ get {
+
+ if (Name.StartsWith("n_"))
+ switch (CSType) {
+ case "int":
+ case "uint":
+ case "long":
+ case "ulong":
+ case "short":
+ case "ushort":
+ return true;
+ default:
+ return false;
+ }
+ else
+ return false;
+ }
+ }
+
+ public bool IsDestroyNotify {
+ get {
+ return CType == "GDestroyNotify";
+ }
+ }
+
+ public bool IsLength {
+ get {
+
+ if (Name.EndsWith("len") || Name.EndsWith("length"))
+ switch (CSType) {
+ case "int":
+ case "uint":
+ case "long":
+ case "ulong":
+ case "short":
+ case "ushort":
+ return true;
+ default:
+ return false;
+ }
+ else
+ return false;
+ }
+ }
+
+ public bool IsParams {
+ get {
+ return elem.HasAttribute("params");
+ }
+ }
+
+ public bool IsString {
+ get {
+ return (CSType == "string");
+ }
+ }
+
+ public bool IsUserData {
+ get {
+ return CSType == "IntPtr" && (Name.EndsWith ("data") || Name.EndsWith ("data_or_owner"));
+ }
+ }
+
+ public virtual string MarshalType {
+ get {
+ string type = SymbolTable.Table.GetMarshalType( elem.GetAttribute("type"));
+ if (type == "void" || Generatable is IManualMarshaler)
+ type = "IntPtr";
+ if (IsArray) {
+ type += "[]";
+ type = type.Replace ("ref ", "");
+ }
+ return type;
+ }
+ }
+
+ public string Name {
+ get {
+ return SymbolTable.Table.MangleName (elem.GetAttribute("name"));
+ }
+ }
+
+ public bool Owned {
+ get {
+ return elem.GetAttribute ("owned") == "true";
+ }
+ }
+
+ public virtual string NativeSignature {
+ get {
+ string sig = MarshalType + " " + Name;
+ if (PassAs != String.Empty)
+ sig = PassAs + " " + sig;
+ return sig;
+ }
+ }
+
+ public string PropertyName {
+ get {
+ return elem.GetAttribute("property_name");
+ }
+ }
+
+ string pass_as;
+
+ public string PassAs {
+ get {
+ if (pass_as != null)
+ return pass_as;
+
+ if (elem.HasAttribute ("pass_as"))
+ return elem.GetAttribute ("pass_as");
+
+ if (IsArray || CSType.EndsWith ("IntPtr"))
+ return "";
+
+ if (CType.EndsWith ("*") && (Generatable is SimpleGen || Generatable is EnumGen))
+ return "out";
+
+ return "";
+ }
+ set {
+ pass_as = value;
+ }
+ }
+
+ string scope;
+ public string Scope {
+ get {
+ if (scope == null)
+ scope = elem.GetAttribute ("scope");
+ return scope;
+ }
+ set {
+ scope = value;
+ }
+ }
+
+ public virtual string[] Prepare {
+ get {
+ IGeneratable gen = Generatable;
+ if (gen is IManualMarshaler) {
+ string result = "IntPtr native_" + CallName;
+ if (PassAs != "out")
+ result += " = " + (gen as IManualMarshaler).AllocNative (CallName);
+ return new string [] { result + ";" };
+ } else if (PassAs == "out" && CSType != MarshalType)
+ return new string [] { gen.MarshalType + " native_" + CallName + ";" };
+
+ return new string [0];
+ }
+ }
+
+ public virtual string CallString {
+ get {
+ string call_parm;
+
+ IGeneratable gen = Generatable;
+ if (gen is CallbackGen)
+ return SymbolTable.Table.CallByName (CType, CallName + "_wrapper");
+ else if (PassAs != String.Empty) {
+ call_parm = PassAs + " ";
+ if (CSType != MarshalType)
+ call_parm += "native_";
+ call_parm += CallName;
+ } else if (gen is IManualMarshaler)
+ call_parm = "native_" + CallName;
+ else
+ call_parm = SymbolTable.Table.CallByName(CType, CallName);
+
+ return call_parm;
+ }
+ }
+
+ public virtual string[] Finish {
+ get {
+ IGeneratable gen = Generatable;
+ if (gen is IManualMarshaler) {
+ string[] result = new string [PassAs == "ref" ? 2 : 1];
+ int i = 0;
+ if (PassAs != String.Empty)
+ result [i++] = CallName + " = " + Generatable.FromNative ("native_" + CallName) + ";";
+ if (PassAs != "out")
+ result [i] = (gen as IManualMarshaler).ReleaseNative ("native_" + CallName) + ";";
+ return result;
+ } else if (PassAs != String.Empty && MarshalType != CSType)
+ return new string [] { CallName + " = " + gen.FromNative ("native_" + CallName) + ";" };
+ return new string [0];
+ }
+ }
+
+ public string FromNative (string var)
+ {
+ if (Generatable == null)
+ return String.Empty;
+ else if (Generatable is HandleBase)
+ return ((HandleBase)Generatable).FromNative (var, Owned);
+ else
+ return Generatable.FromNative (var);
+ }
+
+ public string StudlyName {
+ get {
+ string name = elem.GetAttribute("name");
+ string[] segs = name.Split('_');
+ string studly = "";
+ foreach (string s in segs) {
+ if (s.Trim () == "")
+ continue;
+ studly += (s.Substring(0,1).ToUpper() + s.Substring(1));
+ }
+ return studly;
+
+ }
+ }
+ }
+
+ public class ArrayParameter : Parameter {
+
+ bool null_terminated;
+
+ public ArrayParameter (XmlElement elem) : base (elem)
+ {
+ null_terminated = elem.HasAttribute ("null_term_array");
+ }
+
+ public override string MarshalType {
+ get {
+ if (Generatable is StructBase)
+ return CSType;
+ else
+ return base.MarshalType;
+ }
+ }
+
+ bool NullTerminated {
+ get {
+ return null_terminated;
+ }
+ }
+
+ public override string[] Prepare {
+ get {
+ if (CSType == MarshalType)
+ return new string [0];
+
+ ArrayList result = new ArrayList ();
+ result.Add (String.Format ("int cnt_{0} = {0} == null ? 0 : {0}.Length;", CallName));
+ result.Add (String.Format ("{0}[] native_{1} = new {0} [cnt_{1}" + (NullTerminated ? " + 1" : "") + "];", MarshalType.TrimEnd('[', ']'), CallName));
+ result.Add (String.Format ("for (int i = 0; i < cnt_{0}; i++)", CallName));
+ IGeneratable gen = Generatable;
+ if (gen is IManualMarshaler)
+ result.Add (String.Format ("\tnative_{0} [i] = {1};", CallName, (gen as IManualMarshaler).AllocNative (CallName + "[i]")));
+ else
+ result.Add (String.Format ("\tnative_{0} [i] = {1};", CallName, gen.CallByName (CallName + "[i]")));
+
+ if (NullTerminated)
+ result.Add (String.Format ("native_{0} [cnt_{0}] = IntPtr.Zero;", CallName));
+ return (string[]) result.ToArray (typeof (string));
+ }
+ }
+
+ public override string CallString {
+ get {
+ if (CSType != MarshalType)
+ return "native_" + CallName;
+ else
+ return CallName;
+ }
+ }
+
+ public override string[] Finish {
+ get {
+ if (CSType == MarshalType)
+ return new string [0];
+
+ IGeneratable gen = Generatable;
+ if (gen is IManualMarshaler) {
+ string [] result = new string [4];
+ result [0] = "for (int i = 0; i < native_" + CallName + ".Length" + (NullTerminated ? " - 1" : "") + "; i++) {";
+ result [1] = "\t" + CallName + " [i] = " + Generatable.FromNative ("native_" + CallName + "[i]") + ";";
+ result [2] = "\t" + (gen as IManualMarshaler).ReleaseNative ("native_" + CallName + "[i]") + ";";
+ result [3] = "}";
+ return result;
+ }
+
+ return new string [0];
+ }
+ }
+ }
+
+ public class ArrayCountPair : ArrayParameter {
+
+ XmlElement count_elem;
+ bool invert;
+
+ public ArrayCountPair (XmlElement array_elem, XmlElement count_elem, bool invert) : base (array_elem)
+ {
+ this.count_elem = count_elem;
+ this.invert = invert;
+ }
+
+ string CountNativeType {
+ get {
+ return SymbolTable.Table.GetMarshalType(count_elem.GetAttribute("type"));
+ }
+ }
+
+ string CountType {
+ get {
+ return SymbolTable.Table.GetCSType(count_elem.GetAttribute("type"));
+ }
+ }
+
+ string CountCast {
+ get {
+ if (CountType == "int")
+ return String.Empty;
+ else
+ return "(" + CountType + ") ";
+ }
+ }
+
+ string CountName {
+ get {
+ return SymbolTable.Table.MangleName (count_elem.GetAttribute("name"));
+ }
+ }
+
+ string CallCount (string name)
+ {
+ string result = CountCast + "(" + name + " == null ? 0 : " + name + ".Length)";
+ IGeneratable gen = SymbolTable.Table[count_elem.GetAttribute("type")];
+ return gen.CallByName (result);
+ }
+
+ public override string CallString {
+ get {
+ if (invert)
+ return CallCount (CallName) + ", " + base.CallString;
+ else
+ return base.CallString + ", " + CallCount (CallName);
+ }
+ }
+
+ public override string NativeSignature {
+ get {
+ if (invert)
+ return CountNativeType + " " + CountName + ", " + MarshalType + " " + Name;
+ else
+ return MarshalType + " " + Name + ", " + CountNativeType + " " + CountName;
+ }
+ }
+ }
+
+ public class ErrorParameter : Parameter {
+
+ public ErrorParameter (XmlElement elem) : base (elem)
+ {
+ PassAs = "out";
+ }
+
+ public override string CallString {
+ get {
+ return "out error";
+ }
+ }
+ }
+
+ public class StructParameter : Parameter {
+
+ public StructParameter (XmlElement elem) : base (elem) {}
+
+ public override string MarshalType {
+ get {
+ return "IntPtr";
+ }
+ }
+
+ public override string[] Prepare {
+ get {
+ if (PassAs == "out")
+ return new string [] { "IntPtr native_" + CallName + " = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (" + Generatable.QualifiedName + ")));"};
+ else
+ return new string [] { "IntPtr native_" + CallName + " = " + (Generatable as IManualMarshaler).AllocNative (CallName) + ";"};
+ }
+ }
+
+ public override string CallString {
+ get {
+ return "native_" + CallName;
+ }
+ }
+
+ public override string[] Finish {
+ get {
+ string[] result = new string [2];
+ result [0] = CallName + " = " + FromNative ("native_" + CallName) + ";";
+ result [1] = (Generatable as IManualMarshaler).ReleaseNative ("native_" + CallName) + ";";
+ return result;
+ }
+ }
+
+ public override string NativeSignature {
+ get {
+ return "IntPtr " + CallName;
+ }
+ }
+ }
+
+ public class Parameters : IEnumerable {
+
+ ArrayList param_list = new ArrayList ();
+ XmlElement elem;
+
+ public Parameters (XmlElement elem)
+ {
+ if (elem == null)
+ valid = true;
+ this.elem = elem;
+ }
+
+ public int Count {
+ get {
+ return param_list.Count;
+ }
+ }
+
+ public int VisibleCount {
+ get {
+ int visible = 0;
+ foreach (Parameter p in this) {
+ if (!IsHidden (p))
+ visible++;
+ }
+ return visible;
+ }
+ }
+
+ public Parameter this [int idx] {
+ get {
+ return param_list [idx] as Parameter;
+ }
+ }
+
+ public bool IsHidden (Parameter p)
+ {
+ int idx = param_list.IndexOf (p);
+
+ if (idx > 0 && p.IsLength && p.PassAs == String.Empty && this [idx - 1].IsString)
+ return true;
+
+ if (p.IsCount && ((idx > 0 && this [idx - 1].IsArray) ||
+ (idx < Count - 1 && this [idx + 1].IsArray)))
+ return true;
+
+ if (p.CType == "GError**")
+ return true;
+
+ if (HasCB || HideData) {
+ if (p.IsUserData && (idx == Count - 1))
+ return true;
+ if (p.IsUserData && (idx == Count - 2) && this [Count - 1] is ErrorParameter)
+ return true;
+ if (p.IsUserData && idx > 0 &&
+ this [idx - 1].Generatable is CallbackGen)
+ return true;
+ if (p.IsDestroyNotify && (idx == Count - 1) &&
+ this [idx - 1].IsUserData)
+ return true;
+ }
+
+ return false;
+ }
+
+ bool has_cb;
+ public bool HasCB {
+ get { return has_cb; }
+ set { has_cb = value; }
+ }
+
+ public bool HasOutParam {
+ get {
+ foreach (Parameter p in this)
+ if (p.PassAs == "out")
+ return true;
+ return false;
+ }
+ }
+
+ bool hide_data;
+ public bool HideData {
+ get { return hide_data; }
+ set { hide_data = value; }
+ }
+
+ bool is_static;
+ public bool Static {
+ get { return is_static; }
+ set { is_static = value; }
+ }
+
+ void Clear ()
+ {
+ elem = null;
+ param_list.Clear ();
+ param_list = null;
+ }
+
+ public IEnumerator GetEnumerator ()
+ {
+ return param_list.GetEnumerator ();
+ }
+
+ bool valid = false;
+
+ public bool Validate ()
+ {
+ if (valid)
+ return true;
+
+ if (elem == null)
+ return false;
+
+ for (int i = 0; i < elem.ChildNodes.Count; i++) {
+ XmlElement parm = elem.ChildNodes [i] as XmlElement;
+ if (parm == null || parm.Name != "parameter")
+ continue;
+ Parameter p = new Parameter (parm);
+
+ if (p.IsEllipsis) {
+ Console.Write("Ellipsis parameter ");
+ Clear ();
+ return false;
+ }
+
+ if ((p.CSType == "") || (p.Name == "") ||
+ (p.MarshalType == "") || (SymbolTable.Table.CallByName(p.CType, p.Name) == "")) {
+ Console.Write("Name: " + p.Name + " Type: " + p.CType + " ");
+ Clear ();
+ return false;
+ }
+
+ IGeneratable gen = p.Generatable;
+
+ if (p.IsArray) {
+ p = new ArrayParameter (parm);
+ if (i < elem.ChildNodes.Count - 1) {
+ XmlElement next = elem.ChildNodes [i + 1] as XmlElement;
+ if (next != null || next.Name == "parameter") {
+ Parameter c = new Parameter (next);
+ if (c.IsCount) {
+ p = new ArrayCountPair (parm, next, false);
+ i++;
+ }
+ }
+ }
+ } else if (p.IsCount && i < elem.ChildNodes.Count - 1) {
+ XmlElement next = elem.ChildNodes [i + 1] as XmlElement;
+ if (next != null || next.Name == "parameter") {
+ Parameter a = new Parameter (next);
+ if (a.IsArray) {
+ p = new ArrayCountPair (next, parm, true);
+ i++;
+ }
+ }
+ } else if (p.CType == "GError**")
+ p = new ErrorParameter (parm);
+ else if (gen is StructBase || gen is ByRefGen) {
+ p = new StructParameter (parm);
+ } else if (gen is CallbackGen) {
+ has_cb = true;
+ }
+ param_list.Add (p);
+ }
+
+ if (has_cb && Count > 2 && this [Count - 3].Generatable is CallbackGen && this [Count - 2].IsUserData && this [Count - 1].IsDestroyNotify)
+ this [Count - 3].Scope = "notified";
+
+ valid = true;
+ return true;
+ }
+
+ public bool IsAccessor {
+ get {
+ return VisibleCount == 1 && AccessorParam.PassAs == "out";
+ }
+ }
+
+ public Parameter AccessorParam {
+ get {
+ foreach (Parameter p in this) {
+ if (!IsHidden (p))
+ return p;
+ }
+ return null;
+ }
+ }
+
+ public string AccessorReturnType {
+ get {
+ Parameter p = AccessorParam;
+ if (p != null)
+ return p.CSType;
+ else
+ return null;
+ }
+ }
+
+ public string AccessorName {
+ get {
+ Parameter p = AccessorParam;
+ if (p != null)
+ return p.Name;
+ else
+ return null;
+ }
+ }
+
+ public string ImportSignature {
+ get {
+ if (Count == 0)
+ return String.Empty;
+
+ string[] result = new string [Count];
+ for (int i = 0; i < Count; i++)
+ result [i] = this [i].NativeSignature;
+
+ return String.Join (", ", result);
+ }
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/Parser.cs b/gio-sharp/generator/Parser.cs
new file mode 100644
index 0000000..61e3714
--- /dev/null
+++ b/gio-sharp/generator/Parser.cs
@@ -0,0 +1,170 @@
+// GtkSharp.Generation.Parser.cs - The XML Parsing engine.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003 Ximian Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+
+ public class Parser {
+
+ private XmlDocument Load (string filename)
+ {
+ XmlDocument doc = new XmlDocument ();
+
+ try {
+ Stream stream = File.OpenRead (filename);
+ doc.Load (stream);
+ stream.Close ();
+ } catch (XmlException e) {
+ Console.WriteLine ("Invalid XML file.");
+ Console.WriteLine (e);
+ doc = null;
+ }
+
+ return doc;
+ }
+
+ public IGeneratable[] Parse (string filename)
+ {
+ XmlDocument doc = Load (filename);
+ if (doc == null)
+ return null;
+
+ XmlElement root = doc.DocumentElement;
+
+ if ((root == null) || !root.HasChildNodes) {
+ Console.WriteLine ("No Namespaces found.");
+ return null;
+ }
+
+ ArrayList gens = new ArrayList ();
+
+ foreach (XmlNode child in root.ChildNodes) {
+ XmlElement elem = child as XmlElement;
+ if (elem == null)
+ continue;
+
+ switch (child.Name) {
+ case "namespace":
+ gens.AddRange (ParseNamespace (elem));
+ break;
+ case "symbol":
+ gens.Add (ParseSymbol (elem));
+ break;
+ default:
+ Console.WriteLine ("Parser::Parse - Unexpected child node: " + child.Name);
+ break;
+ }
+ }
+
+ return (IGeneratable[]) gens.ToArray (typeof (IGeneratable));
+ }
+
+ private ArrayList ParseNamespace (XmlElement ns)
+ {
+ ArrayList result = new ArrayList ();
+
+ foreach (XmlNode def in ns.ChildNodes) {
+
+ XmlElement elem = def as XmlElement;
+ if (elem == null)
+ continue;
+
+ if (elem.HasAttribute("hidden"))
+ continue;
+
+ bool is_opaque = false;
+ if (elem.GetAttribute ("opaque") == "true" ||
+ elem.GetAttribute ("opaque") == "1")
+ is_opaque = true;
+
+ switch (def.Name) {
+ case "alias":
+ string aname = elem.GetAttribute("cname");
+ string atype = elem.GetAttribute("type");
+ if ((aname == "") || (atype == ""))
+ continue;
+ result.Add (new AliasGen (aname, atype));
+ break;
+ case "boxed":
+ result.Add (is_opaque ? new OpaqueGen (ns, elem) as object : new BoxedGen (ns, elem) as object);
+ break;
+ case "callback":
+ result.Add (new CallbackGen (ns, elem));
+ break;
+ case "enum":
+ result.Add (new EnumGen (ns, elem));
+ break;
+ case "interface":
+ result.Add (new InterfaceGen (ns, elem));
+ break;
+ case "object":
+ result.Add (new ObjectGen (ns, elem));
+ break;
+ case "class":
+ result.Add (new ClassGen (ns, elem));
+ break;
+ case "struct":
+ result.Add (is_opaque ? new OpaqueGen (ns, elem) as object : new StructGen (ns, elem) as object);
+ break;
+ default:
+ Console.WriteLine ("Parser::ParseNamespace - Unexpected node: " + def.Name);
+ break;
+ }
+ }
+
+ return result;
+ }
+
+ private IGeneratable ParseSymbol (XmlElement symbol)
+ {
+ string type = symbol.GetAttribute ("type");
+ string cname = symbol.GetAttribute ("cname");
+ string name = symbol.GetAttribute ("name");
+ IGeneratable result = null;
+
+ if (type == "simple") {
+ if (symbol.HasAttribute ("default_value"))
+ result = new SimpleGen (cname, name, symbol.GetAttribute ("default_value"));
+ else {
+ Console.WriteLine ("Simple type element " + cname + " has no specified default value");
+ result = new SimpleGen (cname, name, String.Empty);
+ }
+ } else if (type == "manual")
+ result = new ManualGen (cname, name);
+ else if (type == "alias")
+ result = new AliasGen (cname, name);
+ else if (type == "marshal") {
+ string mtype = symbol.GetAttribute ("marshal_type");
+ string call = symbol.GetAttribute ("call_fmt");
+ string from = symbol.GetAttribute ("from_fmt");
+ result = new MarshalGen (cname, name, mtype, call, from);
+ } else
+ Console.WriteLine ("Parser::ParseSymbol - Unexpected symbol type " + type);
+
+ return result;
+ }
+ }
+}
diff --git a/gio-sharp/generator/Property.cs b/gio-sharp/generator/Property.cs
new file mode 100644
index 0000000..fbf940b
--- /dev/null
+++ b/gio-sharp/generator/Property.cs
@@ -0,0 +1,193 @@
+// GtkSharp.Generation.Property.cs - The Property Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+
+ public class Property : PropertyBase {
+
+ public Property (XmlElement elem, ClassBase container_type) : base (elem, container_type) {}
+
+ public bool Validate ()
+ {
+ if (CSType == "" && !Hidden) {
+ Console.Write("Property has unknown Type {0} ", CType);
+ Statistics.ThrottledCount++;
+ return false;
+ }
+
+ return true;
+ }
+
+ bool Readable {
+ get {
+ return elem.GetAttribute ("readable") == "true";
+ }
+ }
+
+ bool Writable {
+ get {
+ return elem.GetAttribute ("writeable") == "true" &&
+ !elem.HasAttribute ("construct-only");
+ }
+ }
+
+ bool IsDeprecated {
+ get {
+ return !container_type.IsDeprecated &&
+ (elem.GetAttribute ("deprecated") == "1" ||
+ elem.GetAttribute ("deprecated") == "true");
+ }
+ }
+
+ protected virtual string PropertyAttribute (string qpname) {
+ return "[GLib.Property (" + qpname + ")]";
+ }
+
+ protected virtual string RawGetter (string qpname) {
+ return "GetProperty (" + qpname + ")";
+ }
+
+ protected virtual string RawSetter (string qpname) {
+ return "SetProperty(" + qpname + ", val)";
+ }
+
+ public void GenerateDecl (StreamWriter sw, string indent)
+ {
+ if (Hidden || (!Readable && !Writable))
+ return;
+
+ string name = Name;
+ if (name == container_type.Name)
+ name += "Prop";
+
+ sw.WriteLine (indent + CSType + " " + name + " {");
+ sw.Write (indent + "\t");
+ if (Readable || Getter != null)
+ sw.Write ("get; ");
+ if (Writable || Setter != null)
+ sw.Write ("set;");
+ sw.WriteLine ();
+ sw.WriteLine (indent + "}");
+ }
+
+ public void Generate (GenerationInfo gen_info, string indent, ClassBase implementor)
+ {
+ SymbolTable table = SymbolTable.Table;
+ StreamWriter sw = gen_info.Writer;
+
+ if (Hidden || (!Readable && !Writable))
+ return;
+
+ string modifiers = "";
+
+ if (IsNew || (container_type.Parent != null && container_type.Parent.GetPropertyRecursively (Name) != null))
+ modifiers = "new ";
+ else if (implementor != null && implementor.Parent != null && implementor.Parent.GetPropertyRecursively (Name) != null)
+ modifiers = "new ";
+
+ string name = Name;
+ if (name == container_type.Name) {
+ name += "Prop";
+ }
+ string qpname = "\"" + CName + "\"";
+
+ string v_type = "";
+ if (table.IsInterface (CType)) {
+ v_type = "(GLib.Object)";
+ } else if (table.IsOpaque (CType)) {
+ v_type = "(GLib.Opaque)";
+ } else if (table.IsEnum (CType)) {
+ v_type = "(Enum)";
+ }
+
+ GenerateImports (gen_info, indent);
+
+ if (IsDeprecated ||
+ (Getter != null && Getter.IsDeprecated) ||
+ (Setter != null && Setter.IsDeprecated))
+ sw.WriteLine (indent + "[Obsolete]");
+ sw.WriteLine (indent + PropertyAttribute (qpname));
+ sw.WriteLine (indent + "public " + modifiers + CSType + " " + name + " {");
+ indent += "\t";
+
+ if (Getter != null) {
+ sw.Write(indent + "get ");
+ Getter.GenerateBody(gen_info, implementor, "\t");
+ sw.WriteLine();
+ } else if (Readable) {
+ sw.WriteLine(indent + "get {");
+ sw.WriteLine(indent + "\tGLib.Value val = " + RawGetter (qpname) + ";");
+ if (table.IsOpaque (CType) || table.IsBoxed (CType)) {
+ sw.WriteLine(indent + "\t" + CSType + " ret = (" + CSType + ") val;");
+ } else if (table.IsInterface (CType)) {
+ // Do we have to dispose the GLib.Object from the GLib.Value?
+ sw.WriteLine (indent + "\t{0} ret = {0}Adapter.GetObject ((GLib.Object) val);", CSType);
+ } else {
+ sw.Write(indent + "\t" + CSType + " ret = ");
+ sw.Write ("(" + CSType + ") ");
+ if (v_type != "") {
+ sw.Write(v_type + " ");
+ }
+ sw.WriteLine("val;");
+ }
+
+ sw.WriteLine(indent + "\tval.Dispose ();");
+ sw.WriteLine(indent + "\treturn ret;");
+ sw.WriteLine(indent + "}");
+ }
+
+ if (Setter != null) {
+ sw.Write(indent + "set ");
+ Setter.GenerateBody(gen_info, implementor, "\t");
+ sw.WriteLine();
+ } else if (Writable) {
+ sw.WriteLine(indent + "set {");
+ sw.Write(indent + "\tGLib.Value val = ");
+ if (table.IsBoxed (CType)) {
+ sw.WriteLine("(GLib.Value) value;");
+ } else if (table.IsOpaque (CType)) {
+ sw.WriteLine("new GLib.Value(value, \"{0}\");", CType);
+ } else {
+ sw.Write("new GLib.Value(");
+ if (v_type != "" && !(table.IsObject (CType) || table.IsInterface (CType) || table.IsOpaque (CType))) {
+ sw.Write(v_type + " ");
+ }
+ sw.WriteLine("value);");
+ }
+ sw.WriteLine(indent + "\t" + RawSetter (qpname) + ";");
+ sw.WriteLine(indent + "\tval.Dispose ();");
+ sw.WriteLine(indent + "}");
+ }
+
+ sw.WriteLine(indent.Substring (1) + "}");
+ sw.WriteLine();
+
+ Statistics.PropCount++;
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/PropertyBase.cs b/gio-sharp/generator/PropertyBase.cs
new file mode 100644
index 0000000..d031bd8
--- /dev/null
+++ b/gio-sharp/generator/PropertyBase.cs
@@ -0,0 +1,122 @@
+// GtkSharp.Generation.PropertyBase.cs - base class for properties and
+// fields
+//
+// Copyright (c) 2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Xml;
+
+ public abstract class PropertyBase {
+
+ protected XmlElement elem;
+ protected ClassBase container_type;
+
+ public PropertyBase (XmlElement elem, ClassBase container_type)
+ {
+ this.elem = elem;
+ this.container_type = container_type;
+ }
+
+ public string Name {
+ get {
+ return elem.GetAttribute ("name");
+ }
+ }
+
+ public string CName {
+ get {
+ return elem.GetAttribute ("cname");
+ }
+ }
+
+ protected string ctype;
+ public string CType {
+ get {
+ if (ctype == null) {
+ if (elem.GetAttribute("bits") == "1")
+ ctype = "gboolean";
+ else
+ ctype = elem.GetAttribute("type");
+ }
+ return ctype;
+ }
+ }
+
+ protected string cstype;
+ public string CSType {
+ get {
+ if (cstype == null)
+ cstype = SymbolTable.Table.GetCSType (CType);
+ return cstype;
+ }
+ }
+
+ public bool Hidden {
+ get {
+ return elem.HasAttribute("hidden");
+ }
+ }
+
+ protected bool IsNew {
+ get {
+ return elem.HasAttribute("new_flag");
+ }
+ }
+
+ Method getter;
+ protected Method Getter {
+ get {
+ if (getter == null) {
+ getter = container_type.GetMethod ("Get" + Name);
+ if (getter != null && getter.Name == "Get" + Name &&
+ getter.IsGetter)
+ cstype = getter.ReturnType;
+ else
+ getter = null;
+ }
+ return getter;
+ }
+ }
+
+ Method setter;
+ protected Method Setter {
+ get {
+ if (setter == null) {
+ setter = container_type.GetMethod ("Set" + Name);
+ if (setter != null && setter.Name == "Set" + Name &&
+ setter.IsSetter)
+ cstype = setter.Signature.Types;
+ else
+ setter = null;
+ }
+ return setter;
+ }
+ }
+
+ protected virtual void GenerateImports (GenerationInfo gen_info, string indent)
+ {
+ if (Getter != null)
+ Getter.GenerateImport (gen_info.Writer);
+ if (Setter != null)
+ Setter.GenerateImport (gen_info.Writer);
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/ReturnValue.cs b/gio-sharp/generator/ReturnValue.cs
new file mode 100644
index 0000000..4ace994
--- /dev/null
+++ b/gio-sharp/generator/ReturnValue.cs
@@ -0,0 +1,170 @@
+// GtkSharp.Generation.ReturnValue.cs - The ReturnValue Generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2004-2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Xml;
+
+ public class ReturnValue {
+
+
+ bool is_null_term;
+ bool is_array;
+ bool elements_owned;
+ bool owned;
+ string ctype = String.Empty;
+ string element_ctype = String.Empty;
+
+ public ReturnValue (XmlElement elem)
+ {
+ if (elem != null) {
+ is_null_term = elem.HasAttribute ("null_term_array");
+ is_array = elem.HasAttribute ("array");
+ elements_owned = elem.GetAttribute ("elements_owned") == "true";
+ owned = elem.GetAttribute ("owned") == "true";
+ ctype = elem.GetAttribute("type");
+ element_ctype = elem.GetAttribute ("element_type");
+ }
+ }
+
+ public string CType {
+ get {
+ return ctype;
+ }
+ }
+
+ public string CSType {
+ get {
+ if (IGen == null)
+ return String.Empty;
+
+ if (ElementType != String.Empty)
+ return ElementType + "[]";
+
+ return IGen.QualifiedName + (is_array || is_null_term ? "[]" : String.Empty);
+ }
+ }
+
+ public string DefaultValue {
+ get {
+ if (IGen == null)
+ return String.Empty;
+ return IGen.DefaultValue;
+ }
+ }
+
+ string ElementType {
+ get {
+ if (element_ctype.Length > 0)
+ return SymbolTable.Table.GetCSType (element_ctype);
+
+ return String.Empty;
+ }
+ }
+
+ IGeneratable igen;
+ IGeneratable IGen {
+ get {
+ if (igen == null)
+ igen = SymbolTable.Table [CType];
+ return igen;
+ }
+ }
+
+ public bool IsVoid {
+ get {
+ return CSType == "void";
+ }
+ }
+
+ public string MarshalType {
+ get {
+ if (IGen == null)
+ return String.Empty;
+ else if (is_null_term)
+ return "IntPtr";
+ return IGen.MarshalReturnType + (is_array ? "[]" : String.Empty);
+ }
+ }
+
+ public string ToNativeType {
+ get {
+ if (IGen == null)
+ return String.Empty;
+ else if (is_null_term)
+ return "IntPtr"; //FIXME
+ return IGen.ToNativeReturnType + (is_array ? "[]" : String.Empty);
+ }
+ }
+
+ public string FromNative (string var)
+ {
+ if (IGen == null)
+ return String.Empty;
+
+ if (ElementType != String.Empty) {
+ string args = (owned ? "true" : "false") + ", " + (elements_owned ? "true" : "false");
+ if (IGen.QualifiedName == "GLib.PtrArray")
+ return String.Format ("({0}[]) GLib.Marshaller.PtrArrayToArray ({1}, {2}, typeof({0}))", ElementType, var, args);
+ else
+ return String.Format ("({0}[]) GLib.Marshaller.ListPtrToArray ({1}, typeof({2}), {3}, typeof({0}))", ElementType, var, IGen.QualifiedName, args);
+ } else if (IGen is HandleBase)
+ return ((HandleBase)IGen).FromNative (var, owned);
+ else if (is_null_term)
+ return String.Format ("GLib.Marshaller.NullTermPtrToStringArray ({0}, {1})", var, owned ? "true" : "false");
+ else
+ return IGen.FromNativeReturn (var);
+ }
+
+ public string ToNative (string var)
+ {
+ if (IGen == null)
+ return String.Empty;
+
+ if (ElementType.Length > 0) {
+ string args = ", typeof (" + ElementType + "), " + (owned ? "true" : "false") + ", " + (elements_owned ? "true" : "false");
+ var = "new " + IGen.QualifiedName + "(" + var + args + ")";
+ } else if (is_null_term)
+ return String.Format ("GLib.Marshaller.StringArrayToNullTermPtr ({0})", var);
+
+ if (IGen is IManualMarshaler)
+ return (IGen as IManualMarshaler).AllocNative (var);
+ else if (IGen is ObjectGen && owned)
+ return var + " == null ? IntPtr.Zero : " + var + ".OwnedHandle";
+ else if (IGen is OpaqueGen && owned)
+ return var + " == null ? IntPtr.Zero : " + var + ".OwnedCopy";
+ else
+ return IGen.ToNativeReturn (var);
+ }
+
+ public bool Validate ()
+ {
+ if (MarshalType == "" || CSType == "") {
+ Console.Write("rettype: " + CType);
+ return false;
+ }
+
+ return true;
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/Signal.cs b/gio-sharp/generator/Signal.cs
new file mode 100644
index 0000000..c51c109
--- /dev/null
+++ b/gio-sharp/generator/Signal.cs
@@ -0,0 +1,587 @@
+// GtkSharp.Generation.Signal.cs - The Signal Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2003-2005 Novell, Inc.
+// Copyright (c) 2007 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+
+ public class Signal {
+
+ bool marshaled;
+ string name;
+ XmlElement elem;
+ ReturnValue retval;
+ Parameters parms;
+ ClassBase container_type;
+
+ public Signal (XmlElement elem, ClassBase container_type)
+ {
+ this.elem = elem;
+ name = elem.GetAttribute ("name");
+ marshaled = elem.GetAttribute ("manual") == "true";
+ retval = new ReturnValue (elem ["return-type"]);
+ parms = new Parameters (elem["parameters"]);
+ this.container_type = container_type;
+ }
+
+ bool Marshaled {
+ get { return marshaled; }
+ }
+
+ public string Name {
+ get {
+ return name;
+ }
+ set {
+ name = value;
+ }
+ }
+
+ public bool Validate ()
+ {
+ if (Name == "") {
+ Console.Write ("Nameless signal ");
+ Statistics.ThrottledCount++;
+ return false;
+ }
+
+ if (!parms.Validate () || !retval.Validate ()) {
+ Console.Write (" in signal " + Name + " ");
+ Statistics.ThrottledCount++;
+ return false;
+ }
+
+ return true;
+ }
+
+ public void GenerateDecl (StreamWriter sw)
+ {
+ if (elem.HasAttribute("new_flag") || (container_type != null && container_type.GetSignalRecursively (Name) != null))
+ sw.Write("new ");
+
+ sw.WriteLine ("\t\tevent " + EventHandlerQualifiedName + " " + Name + ";");
+ }
+
+ public string CName {
+ get {
+ return "\"" + elem.GetAttribute("cname") + "\"";
+ }
+ }
+
+ string CallbackSig {
+ get {
+ string result = "";
+ for (int i = 0; i < parms.Count; i++) {
+ if (i > 0)
+ result += ", ";
+
+ Parameter p = parms [i];
+ if (p.PassAs != "" && !(p.Generatable is StructBase))
+ result += p.PassAs + " ";
+ result += (p.MarshalType + " arg" + i);
+ }
+
+ return result;
+ }
+ }
+
+ string CallbackName {
+ get { return Name + "SignalCallback"; }
+ }
+
+ string DelegateName {
+ get { return Name + "SignalDelegate"; }
+ }
+
+ private string EventArgsName {
+ get {
+ if (IsEventHandler)
+ return "EventArgs";
+ else
+ return Name + "Args";
+ }
+ }
+
+ private string EventArgsQualifiedName {
+ get {
+ if (IsEventHandler)
+ return "System.EventArgs";
+ else
+ return container_type.NS + "." + Name + "Args";
+ }
+ }
+
+ private string EventHandlerName {
+ get {
+ if (IsEventHandler)
+ return "EventHandler";
+ else if (SymbolTable.Table [container_type.NS + Name + "Handler"] != null)
+ return Name + "EventHandler";
+ else
+ return Name + "Handler";
+ }
+ }
+
+ private string EventHandlerQualifiedName {
+ get {
+ if (IsEventHandler)
+ return "System.EventHandler";
+ else
+ return container_type.NS + "." + EventHandlerName;
+ }
+ }
+
+ string ClassFieldName {
+ get {
+ return elem.HasAttribute ("field_name") ? elem.GetAttribute("field_name") : String.Empty;
+ }
+ }
+
+ private bool HasOutParams {
+ get {
+ foreach (Parameter p in parms) {
+ if (p.PassAs == "out")
+ return true;
+ }
+ return false;
+ }
+ }
+
+ private bool IsEventHandler {
+ get {
+ return retval.CSType == "void" && parms.Count == 1 && (parms [0].Generatable is ObjectGen || parms [0].Generatable is InterfaceGen);
+ }
+ }
+
+ private bool IsVoid {
+ get {
+ return retval.CSType == "void";
+ }
+ }
+
+ private string ReturnGType {
+ get {
+ IGeneratable igen = SymbolTable.Table [retval.CType];
+
+ if (igen is ObjectGen)
+ return "GLib.GType.Object";
+ if (igen is BoxedGen)
+ return retval.CSType + ".GType";
+ if (igen is EnumGen)
+ return retval.CSType + "GType.GType";
+
+ switch (retval.CSType) {
+ case "bool":
+ return "GLib.GType.Boolean";
+ case "string":
+ return "GLib.GType.String";
+ case "int":
+ return "GLib.GType.Int";
+ default:
+ throw new Exception (retval.CSType);
+ }
+ }
+ }
+
+ public string GenArgsInitialization (StreamWriter sw)
+ {
+ if (parms.Count > 1)
+ sw.WriteLine("\t\t\t\targs.Args = new object[" + (parms.Count - 1) + "];");
+ string finish = "";
+ for (int idx = 1; idx < parms.Count; idx++) {
+ Parameter p = parms [idx];
+ IGeneratable igen = p.Generatable;
+ if (p.PassAs != "out") {
+ if (igen is ManualGen) {
+ sw.WriteLine("\t\t\t\tif (arg{0} == IntPtr.Zero)", idx);
+ sw.WriteLine("\t\t\t\t\targs.Args[{0}] = null;", idx - 1);
+ sw.WriteLine("\t\t\t\telse {");
+ sw.WriteLine("\t\t\t\t\targs.Args[" + (idx - 1) + "] = " + p.FromNative ("arg" + idx) + ";");
+ sw.WriteLine("\t\t\t\t}");
+ } else
+ sw.WriteLine("\t\t\t\targs.Args[" + (idx - 1) + "] = " + p.FromNative ("arg" + idx) + ";");
+ }
+ if (igen is StructBase && p.PassAs == "ref")
+ finish += "\t\t\t\tif (arg" + idx + " != IntPtr.Zero) System.Runtime.InteropServices.Marshal.StructureToPtr (args.Args[" + (idx-1) + "], arg" + idx + ", false);\n";
+ else if (p.PassAs != "")
+ finish += "\t\t\t\targ" + idx + " = " + igen.ToNativeReturn ("((" + p.CSType + ")args.Args[" + (idx - 1) + "])") + ";\n";
+ }
+ return finish;
+ }
+
+ public void GenArgsCleanup (StreamWriter sw, string finish)
+ {
+ if (IsVoid && finish.Length == 0)
+ return;
+
+ sw.WriteLine("\n\t\t\ttry {");
+ sw.Write (finish);
+ if (!IsVoid) {
+ if (retval.CSType == "bool") {
+ sw.WriteLine ("\t\t\t\tif (args.RetVal == null)");
+ sw.WriteLine ("\t\t\t\t\treturn false;");
+ }
+ sw.WriteLine("\t\t\t\treturn " + SymbolTable.Table.ToNativeReturn (retval.CType, "((" + retval.CSType + ")args.RetVal)") + ";");
+ }
+ sw.WriteLine("\t\t\t} catch (Exception) {");
+ sw.WriteLine ("\t\t\t\tException ex = new Exception (\"args.RetVal or 'out' property unset or set to incorrect type in " + EventHandlerQualifiedName + " callback\");");
+ sw.WriteLine("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (ex, true);");
+
+ sw.WriteLine ("\t\t\t\t// NOTREACHED: above call doesn't return.");
+ sw.WriteLine ("\t\t\t\tthrow ex;");
+ sw.WriteLine("\t\t\t}");
+ }
+
+ public void GenCallback (StreamWriter sw)
+ {
+ if (IsEventHandler)
+ return;
+
+ sw.WriteLine ("\t\t[GLib.CDeclCallback]");
+ sw.WriteLine ("\t\tdelegate " + retval.ToNativeType + " " + DelegateName + " (" + CallbackSig + ", IntPtr gch);");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tstatic " + retval.ToNativeType + " " + CallbackName + " (" + CallbackSig + ", IntPtr gch)");
+ sw.WriteLine("\t\t{");
+ sw.WriteLine("\t\t\t{0} args = new {0} ();", EventArgsQualifiedName);
+ sw.WriteLine("\t\t\ttry {");
+ sw.WriteLine("\t\t\t\tGLib.Signal sig = ((GCHandle) gch).Target as GLib.Signal;");
+ sw.WriteLine("\t\t\t\tif (sig == null)");
+ sw.WriteLine("\t\t\t\t\tthrow new Exception(\"Unknown signal GC handle received \" + gch);");
+ sw.WriteLine();
+ string finish = GenArgsInitialization (sw);
+ sw.WriteLine("\t\t\t\t{0} handler = ({0}) sig.Handler;", EventHandlerQualifiedName);
+ sw.WriteLine("\t\t\t\thandler (GLib.Object.GetObject (arg0), args);");
+ sw.WriteLine("\t\t\t} catch (Exception e) {");
+ sw.WriteLine("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (e, false);");
+ sw.WriteLine("\t\t\t}");
+ GenArgsCleanup (sw, finish);
+ sw.WriteLine("\t\t}");
+ sw.WriteLine();
+ }
+
+ private bool NeedNew (ClassBase implementor)
+ {
+ return elem.HasAttribute ("new_flag") ||
+ (container_type != null && container_type.GetSignalRecursively (Name) != null) ||
+ (implementor != null && implementor.GetSignalRecursively (Name) != null);
+ }
+
+ public void GenEventHandler (GenerationInfo gen_info)
+ {
+ if (IsEventHandler)
+ return;
+
+ string ns = container_type.NS;
+
+ StreamWriter sw = gen_info.OpenStream (EventHandlerName);
+
+ sw.WriteLine ("namespace " + ns + " {");
+ sw.WriteLine ();
+ sw.WriteLine ("\tusing System;");
+
+ sw.WriteLine ();
+ sw.WriteLine ("\tpublic delegate void " + EventHandlerName + "(object o, " + EventArgsName + " args);");
+ sw.WriteLine ();
+ sw.WriteLine ("\tpublic class " + EventArgsName + " : GLib.SignalArgs {");
+ for (int i = 1; i < parms.Count; i++) {
+ sw.WriteLine ("\t\tpublic " + parms[i].CSType + " " + parms[i].StudlyName + "{");
+ if (parms[i].PassAs != "out") {
+ sw.WriteLine ("\t\t\tget {");
+ sw.WriteLine ("\t\t\t\treturn (" + parms[i].CSType + ") Args[" + (i - 1) + "];");
+ sw.WriteLine ("\t\t\t}");
+ }
+ if (parms[i].PassAs != "") {
+ sw.WriteLine ("\t\t\tset {");
+ sw.WriteLine ("\t\t\t\tArgs[" + (i - 1) + "] = (" + parms[i].CSType + ")value;");
+ sw.WriteLine ("\t\t\t}");
+ }
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ }
+ sw.WriteLine ("\t}");
+ sw.WriteLine ("}");
+ sw.Close ();
+ }
+
+ private void GenVMDeclaration (StreamWriter sw, ClassBase implementor)
+ {
+ VMSignature vmsig = new VMSignature (parms);
+ sw.WriteLine ("\t\t[GLib.DefaultSignalHandler(Type=typeof(" + (implementor != null ? implementor.QualifiedName : container_type.QualifiedName) + "), ConnectionMethod=\"Override" + Name +"\")]");
+ sw.Write ("\t\tprotected ");
+ if (NeedNew (implementor))
+ sw.Write ("new ");
+ sw.WriteLine ("virtual {0} {1} ({2})", retval.CSType, "On" + Name, vmsig.ToString ());
+ }
+
+ private string CastFromInt (string type)
+ {
+ return type != "int" ? "(" + type + ") " : "";
+ }
+
+ private string GlueCallString {
+ get {
+ string result = "Handle";
+
+ for (int i = 1; i < parms.Count; i++) {
+ Parameter p = parms [i];
+ IGeneratable igen = p.Generatable;
+
+ if (i > 1 && parms [i - 1].IsString && p.IsLength && p.PassAs == String.Empty) {
+ string string_name = parms [i - 1].Name;
+ result += ", " + igen.CallByName (CastFromInt (p.CSType) + "System.Text.Encoding.UTF8.GetByteCount (" + string_name + ")");
+ continue;
+ }
+
+ p.CallName = p.Name;
+ string call_parm = p.CallString;
+
+ if (p.IsUserData && parms.IsHidden (p) && !parms.HideData && (i == 1 || parms [i - 1].Scope != "notified")) {
+ call_parm = "IntPtr.Zero";
+ }
+
+ result += ", " + call_parm;
+ }
+ return result;
+ }
+ }
+
+ private string GlueSignature {
+ get {
+ string result = String.Empty;
+ for (int i = 0; i < parms.Count; i++)
+ result += parms[i].CType.Replace ("const-", "const ") + " " + parms[i].Name + (i == parms.Count-1 ? "" : ", ");
+ return result;
+ }
+ }
+
+ private string DefaultGlueValue {
+ get {
+ string val = retval.DefaultValue;
+ switch (val) {
+ case "null":
+ return "NULL";
+ case "false":
+ return "FALSE";
+ case "true":
+ return "TRUE";
+ default:
+ return val;
+ }
+ }
+ }
+
+ private void GenGlueVirtualMethod (GenerationInfo gen_info)
+ {
+ StreamWriter glue = gen_info.GlueWriter;
+ string glue_name = String.Format ("{0}sharp_{1}_base_{2}", container_type.NS.ToLower ().Replace (".", "_"), container_type.Name.ToLower (), ClassFieldName);
+ glue.WriteLine ("{0} {1} ({2});\n", retval.CType, glue_name, GlueSignature);
+ glue.WriteLine ("{0}\n{1} ({2})", retval.CType, glue_name, GlueSignature);
+ glue.WriteLine ("{");
+ glue.WriteLine ("\t{0}Class *klass = ({0}Class *) get_threshold_class (G_OBJECT ({1}));", container_type.CName, parms[0].Name);
+ glue.Write ("\tif (klass->{0})\n\t\t", ClassFieldName);
+ if (!IsVoid)
+ glue.Write ("return ");
+ glue.Write ("(* klass->{0}) (", ClassFieldName);
+ for (int i = 0; i < parms.Count; i++)
+ glue.Write (parms[i].Name + (i == parms.Count - 1 ? "" : ", "));
+ glue.WriteLine (");");
+ if (!IsVoid)
+ glue.WriteLine ("\treturn " + DefaultGlueValue + ";");
+ glue.WriteLine ("}");
+
+ StreamWriter sw = gen_info.Writer;
+ sw.WriteLine ("\t\t[DllImport (\"{0}\")]", gen_info.GluelibName);
+ sw.WriteLine ("\t\tstatic extern {0} {1} ({2});\n", retval.MarshalType, glue_name, parms.ImportSignature);
+ GenVMDeclaration (sw, null);
+ sw.WriteLine ("\t\t{");
+ MethodBody body = new MethodBody (parms);
+ body.Initialize (gen_info, false, false, String.Empty);
+ sw.WriteLine ("\t\t\t{0}{1} ({2});", IsVoid ? "" : retval.MarshalType + " __ret = ", glue_name, GlueCallString);
+ body.Finish (sw, "");
+ if (!IsVoid)
+ sw.WriteLine ("\t\t\treturn {0};", retval.FromNative ("__ret"));
+ sw.WriteLine ("\t\t}\n");
+ }
+
+ private void GenChainVirtualMethod (StreamWriter sw, ClassBase implementor)
+ {
+ GenVMDeclaration (sw, implementor);
+ sw.WriteLine ("\t\t{");
+ if (IsVoid)
+ sw.WriteLine ("\t\t\tGLib.Value ret = GLib.Value.Empty;");
+ else
+ sw.WriteLine ("\t\t\tGLib.Value ret = new GLib.Value (" + ReturnGType + ");");
+
+ sw.WriteLine ("\t\t\tGLib.ValueArray inst_and_params = new GLib.ValueArray (" + parms.Count + ");");
+ sw.WriteLine ("\t\t\tGLib.Value[] vals = new GLib.Value [" + parms.Count + "];");
+ sw.WriteLine ("\t\t\tvals [0] = new GLib.Value (this);");
+ sw.WriteLine ("\t\t\tinst_and_params.Append (vals [0]);");
+ string cleanup = "";
+ for (int i = 1; i < parms.Count; i++) {
+ Parameter p = parms [i];
+ if (p.PassAs != "") {
+ if (SymbolTable.Table.IsBoxed (p.CType)) {
+ if (p.PassAs == "ref")
+ sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (" + p.Name + ");");
+ else
+ sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value ((GLib.GType)typeof (" + p.CSType + "));");
+ cleanup += "\t\t\t" + p.Name + " = (" + p.CSType + ") vals [" + i + "];\n";
+ } else {
+ if (p.PassAs == "ref")
+ sw.WriteLine ("\t\t\tIntPtr " + p.Name + "_ptr = GLib.Marshaller.StructureToPtrAlloc (" + p.Generatable.CallByName (p.Name) + ");");
+ else
+ sw.WriteLine ("\t\t\tIntPtr " + p.Name + "_ptr = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (" + p.MarshalType + ")));");
+
+ sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (" + p.Name + "_ptr);");
+ cleanup += "\t\t\t" + p.Name + " = " + p.FromNative ("(" + p.MarshalType + ") Marshal.PtrToStructure (" + p.Name + "_ptr, typeof (" + p.MarshalType + "))") + ";\n";
+ cleanup += "\t\t\tMarshal.FreeHGlobal (" + p.Name + "_ptr);\n";
+ }
+ } else if (p.IsLength && parms [i - 1].IsString)
+ sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (System.Text.Encoding.UTF8.GetByteCount (" + parms [i-1].Name + "));");
+ else
+ sw.WriteLine ("\t\t\tvals [" + i + "] = new GLib.Value (" + p.Name + ");");
+
+ sw.WriteLine ("\t\t\tinst_and_params.Append (vals [" + i + "]);");
+ }
+
+ sw.WriteLine ("\t\t\tg_signal_chain_from_overridden (inst_and_params.ArrayPtr, ref ret);");
+ if (cleanup != "")
+ sw.WriteLine (cleanup);
+ sw.WriteLine ("\t\t\tforeach (GLib.Value v in vals)");
+ sw.WriteLine ("\t\t\t\tv.Dispose ();");
+ if (!IsVoid) {
+ IGeneratable igen = SymbolTable.Table [retval.CType];
+ sw.WriteLine ("\t\t\t" + retval.CSType + " result = (" + (igen is EnumGen ? retval.CSType + ") (Enum" : retval.CSType) + ") ret;");
+ sw.WriteLine ("\t\t\tret.Dispose ();");
+ sw.WriteLine ("\t\t\treturn result;");
+ }
+ sw.WriteLine ("\t\t}\n");
+ }
+
+ private void GenDefaultHandlerDelegate (GenerationInfo gen_info, ClassBase implementor)
+ {
+ StreamWriter sw = gen_info.Writer;
+ StreamWriter glue;
+ bool use_glue = gen_info.GlueEnabled && implementor == null && ClassFieldName.Length > 0;
+ string glue_name = String.Empty;
+ ManagedCallString call = new ManagedCallString (parms, true);
+ sw.WriteLine ("\t\t[GLib.CDeclCallback]");
+ sw.WriteLine ("\t\tdelegate " + retval.ToNativeType + " " + Name + "VMDelegate (" + parms.ImportSignature + ");\n");
+
+ if (use_glue) {
+ glue = gen_info.GlueWriter;
+ glue_name = String.Format ("{0}sharp_{1}_override_{2}", container_type.NS.ToLower ().Replace (".", "_"), container_type.Name.ToLower (), ClassFieldName);
+ sw.WriteLine ("\t\t[DllImport (\"{0}\")]", gen_info.GluelibName);
+ sw.WriteLine ("\t\tstatic extern void {0} (IntPtr gtype, {1}VMDelegate cb);\n", glue_name, Name);
+ glue.WriteLine ("void {0} (GType gtype, gpointer cb);\n", glue_name);
+ glue.WriteLine ("void\n{0} (GType gtype, gpointer cb)", glue_name);
+ glue.WriteLine ("{");
+ glue.WriteLine ("\tGObjectClass *klass = g_type_class_peek (gtype);");
+ glue.WriteLine ("\tif (klass == NULL)");
+ glue.WriteLine ("\t\tklass = g_type_class_ref (gtype);");
+ glue.WriteLine ("\t(({0} *)klass)->{1} = cb;", container_type.CName + "Class", ClassFieldName);
+ glue.WriteLine ("}\n");
+ }
+
+ sw.WriteLine ("\t\tstatic {0} {1};\n", Name + "VMDelegate", Name + "VMCallback");
+ sw.WriteLine ("\t\tstatic " + retval.ToNativeType + " " + Name.ToLower() + "_cb (" + parms.ImportSignature + ")");
+ sw.WriteLine ("\t\t{");
+ string unconditional = call.Unconditional ("\t\t\t");
+ if (unconditional.Length > 0)
+ sw.WriteLine (unconditional);
+ sw.WriteLine ("\t\t\ttry {");
+ sw.WriteLine ("\t\t\t\t{0} {1}_managed = GLib.Object.GetObject ({1}, false) as {0};", implementor != null ? implementor.Name : container_type.Name, parms[0].Name);
+ sw.Write (call.Setup ("\t\t\t\t"));
+ sw.Write ("\t\t\t\t{0}", IsVoid ? "" : retval.CSType == retval.ToNativeType ? "return " : retval.CSType + " raw_ret = ");
+ sw.WriteLine ("{2}_managed.{0} ({1});", "On" + Name, call.ToString (), parms[0].Name);
+ sw.Write (call.Finish ("\t\t\t\t"));
+ if (!IsVoid && retval.CSType != retval.ToNativeType)
+ sw.WriteLine ("\t\t\t\treturn {0};", SymbolTable.Table.ToNativeReturn (retval.CType, "raw_ret"));
+ sw.WriteLine ("\t\t\t} catch (Exception e) {");
+ bool fatal = HasOutParams || !IsVoid;
+ sw.WriteLine ("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (e, " + (fatal ? "true" : "false") + ");");
+ if (fatal) {
+ sw.WriteLine ("\t\t\t\t// NOTREACHED: above call doesn't return");
+ sw.WriteLine ("\t\t\t\tthrow e;");
+ }
+ sw.WriteLine ("\t\t\t}");
+ sw.WriteLine ("\t\t}\n");
+ sw.WriteLine ("\t\tprivate static void Override" + Name + " (GLib.GType gtype)");
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\tif (" + Name + "VMCallback == null)");
+ sw.WriteLine ("\t\t\t\t" + Name + "VMCallback = new " + Name + "VMDelegate (" + Name.ToLower() + "_cb);");
+ if (use_glue)
+ sw.WriteLine ("\t\t\t{0} (gtype.Val, {1}VMCallback);", glue_name, Name);
+ else
+ sw.WriteLine ("\t\t\tOverrideVirtualMethod (gtype, " + CName + ", " + Name + "VMCallback);");
+ sw.WriteLine ("\t\t}\n");
+ }
+
+ public void GenEvent (StreamWriter sw, ClassBase implementor, string target)
+ {
+ string args_type = IsEventHandler ? "" : ", typeof (" + EventArgsQualifiedName + ")";
+
+ if (Marshaled) {
+ GenCallback (sw);
+ args_type = ", new " + DelegateName + "(" + CallbackName + ")";
+ }
+
+ sw.WriteLine("\t\t[GLib.Signal("+ CName + ")]");
+ sw.Write("\t\tpublic ");
+ if (NeedNew (implementor))
+ sw.Write("new ");
+ sw.WriteLine("event " + EventHandlerQualifiedName + " " + Name + " {");
+ sw.WriteLine("\t\t\tadd {");
+ sw.WriteLine("\t\t\t\tGLib.Signal sig = GLib.Signal.Lookup (" + target + ", " + CName + args_type + ");");
+ sw.WriteLine("\t\t\t\tsig.AddDelegate (value);");
+ sw.WriteLine("\t\t\t}");
+ sw.WriteLine("\t\t\tremove {");
+ sw.WriteLine("\t\t\t\tGLib.Signal sig = GLib.Signal.Lookup (" + target + ", " + CName + args_type + ");");
+ sw.WriteLine("\t\t\t\tsig.RemoveDelegate (value);");
+ sw.WriteLine("\t\t\t}");
+ sw.WriteLine("\t\t}");
+ sw.WriteLine();
+ }
+
+ public void Generate (GenerationInfo gen_info, ClassBase implementor)
+ {
+ StreamWriter sw = gen_info.Writer;
+
+ if (implementor == null)
+ GenEventHandler (gen_info);
+
+ GenDefaultHandlerDelegate (gen_info, implementor);
+ if (gen_info.GlueEnabled && implementor == null && ClassFieldName.Length > 0)
+ GenGlueVirtualMethod (gen_info);
+ else
+ GenChainVirtualMethod (sw, implementor);
+ GenEvent (sw, implementor, "this");
+
+ Statistics.SignalCount++;
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/Signature.cs b/gio-sharp/generator/Signature.cs
new file mode 100644
index 0000000..1b01234
--- /dev/null
+++ b/gio-sharp/generator/Signature.cs
@@ -0,0 +1,123 @@
+// GtkSharp.Generation.Signature.cs - The Signature Generation Class.
+//
+// Author: Mike Kestner <mkestner ximian com>
+//
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.Xml;
+
+ public class Signature {
+
+ private ArrayList parms = new ArrayList ();
+
+ public Signature (Parameters parms)
+ {
+ foreach (Parameter p in parms) {
+ if (!parms.IsHidden (p))
+ this.parms.Add (p);
+ }
+ }
+
+ public override string ToString ()
+ {
+ if (parms.Count == 0)
+ return "";
+
+ string[] result = new string [parms.Count];
+ int i = 0;
+
+ foreach (Parameter p in parms) {
+ result [i] = p.PassAs != "" ? p.PassAs + " " : "";
+ result [i++] += p.CSType + " " + p.Name;
+ }
+
+ return String.Join (", ", result);
+ }
+
+ public string Types {
+ get {
+ if (parms.Count == 0)
+ return "";
+
+ string[] result = new string [parms.Count];
+ int i = 0;
+
+ foreach (Parameter p in parms)
+ result [i++] = p.CSType;
+
+ return String.Join (":", result);
+ }
+ }
+
+ public bool IsAccessor {
+ get {
+ int count = 0;
+ foreach (Parameter p in parms) {
+ if (p.PassAs == "out")
+ count++;
+
+ if (count > 1)
+ return false;
+ }
+ return count == 1;
+ }
+ }
+
+ public string AccessorType {
+ get {
+ foreach (Parameter p in parms)
+ if (p.PassAs == "out")
+ return p.CSType;
+
+ return null;
+ }
+ }
+
+ public string AccessorName {
+ get {
+ foreach (Parameter p in parms)
+ if (p.PassAs == "out")
+ return p.Name;
+
+ return null;
+ }
+ }
+
+ public string AsAccessor {
+ get {
+ string[] result = new string [parms.Count - 1];
+ int i = 0;
+
+ foreach (Parameter p in parms) {
+ if (p.PassAs == "out")
+ continue;
+
+ result [i] = p.PassAs != "" ? p.PassAs + " " : "";
+ result [i++] += p.CSType + " " + p.Name;
+ }
+
+ return String.Join (", ", result);
+ }
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/SimpleBase.cs b/gio-sharp/generator/SimpleBase.cs
new file mode 100644
index 0000000..38bfbe3
--- /dev/null
+++ b/gio-sharp/generator/SimpleBase.cs
@@ -0,0 +1,121 @@
+// GtkSharp.Generation.SimpleBase.cs - base class for marshaling non-generated types.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+
+ public abstract class SimpleBase : IGeneratable {
+
+ string type;
+ string ctype;
+ string ns = String.Empty;
+ string default_value = String.Empty;
+
+ public SimpleBase (string ctype, string type, string default_value)
+ {
+ string[] toks = type.Split('.');
+ this.ctype = ctype;
+ this.type = toks[toks.Length - 1];
+ if (toks.Length > 2)
+ this.ns = String.Join (".", toks, 0, toks.Length - 1);
+ else if (toks.Length == 2)
+ this.ns = toks[0];
+ this.default_value = default_value;
+ }
+
+ public string CName {
+ get {
+ return ctype;
+ }
+ }
+
+ public string Name {
+ get {
+ return type;
+ }
+ }
+
+ public string QualifiedName {
+ get {
+ return ns == String.Empty ? type : ns + "." + type;
+ }
+ }
+
+ public virtual string MarshalType {
+ get {
+ return QualifiedName;
+ }
+ }
+
+ public virtual string MarshalReturnType {
+ get {
+ return MarshalType;
+ }
+ }
+
+ public virtual string DefaultValue {
+ get {
+ return default_value;
+ }
+ }
+
+ public virtual string ToNativeReturnType {
+ get {
+ return MarshalType;
+ }
+ }
+
+ public virtual string CallByName (string var)
+ {
+ return var;
+ }
+
+ public virtual string FromNative(string var)
+ {
+ return var;
+ }
+
+ public virtual string FromNativeReturn(string var)
+ {
+ return FromNative (var);
+ }
+
+ public virtual string ToNativeReturn(string var)
+ {
+ return CallByName (var);
+ }
+
+ public bool Validate ()
+ {
+ return true;
+ }
+
+ public void Generate ()
+ {
+ }
+
+ public void Generate (GenerationInfo gen_info)
+ {
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/SimpleGen.cs b/gio-sharp/generator/SimpleGen.cs
new file mode 100644
index 0000000..b382135
--- /dev/null
+++ b/gio-sharp/generator/SimpleGen.cs
@@ -0,0 +1,31 @@
+// GtkSharp.Generation.SimpleGen.cs - The Simple type Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2003 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+
+ public class SimpleGen : SimpleBase {
+ public SimpleGen (string ctype, string type, string default_value) : base (ctype, type, default_value) {}
+
+ }
+}
+
diff --git a/gio-sharp/generator/Statistics.cs b/gio-sharp/generator/Statistics.cs
new file mode 100644
index 0000000..4545765
--- /dev/null
+++ b/gio-sharp/generator/Statistics.cs
@@ -0,0 +1,197 @@
+// Statistics.cs : Generation statistics class implementation
+//
+// Author: Mike Kestner <mkestner ximian com>
+//
+// Copyright (c) 2002 Mike Kestner
+// Copyright (c) 2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+
+ public class Statistics {
+
+ static int cbs = 0;
+ static int enums = 0;
+ static int objects = 0;
+ static int structs = 0;
+ static int boxed = 0;
+ static int opaques = 0;
+ static int interfaces = 0;
+ static int methods = 0;
+ static int ctors = 0;
+ static int props = 0;
+ static int sigs = 0;
+ static int throttled = 0;
+ static int ignored = 0;
+ static bool vm_ignored = false;
+
+ public static int CBCount {
+ get {
+ return cbs;
+ }
+ set {
+ cbs = value;
+ }
+ }
+
+ public static int EnumCount {
+ get {
+ return enums;
+ }
+ set {
+ enums = value;
+ }
+ }
+
+ public static int ObjectCount {
+ get {
+ return objects;
+ }
+ set {
+ objects = value;
+ }
+ }
+
+ public static int StructCount {
+ get {
+ return structs;
+ }
+ set {
+ structs = value;
+ }
+ }
+
+ public static int BoxedCount {
+ get {
+ return boxed;
+ }
+ set {
+ boxed = value;
+ }
+ }
+
+ public static int OpaqueCount {
+ get {
+ return opaques;
+ }
+ set {
+ opaques = value;
+ }
+ }
+
+ public static int CtorCount {
+ get {
+ return ctors;
+ }
+ set {
+ ctors = value;
+ }
+ }
+
+ public static int MethodCount {
+ get {
+ return methods;
+ }
+ set {
+ methods = value;
+ }
+ }
+
+ public static int PropCount {
+ get {
+ return props;
+ }
+ set {
+ props = value;
+ }
+ }
+
+ public static int SignalCount {
+ get {
+ return sigs;
+ }
+ set {
+ sigs = value;
+ }
+ }
+
+ public static int IFaceCount {
+ get {
+ return interfaces;
+ }
+ set {
+ interfaces = value;
+ }
+ }
+
+ public static int ThrottledCount {
+ get {
+ return throttled;
+ }
+ set {
+ throttled = value;
+ }
+ }
+
+ public static int IgnoreCount {
+ get {
+ return ignored;
+ }
+ set {
+ ignored = value;
+ }
+ }
+
+ public static bool VMIgnored {
+ get {
+ return vm_ignored;
+ }
+ set {
+ if (value)
+ vm_ignored = value;
+ }
+ }
+
+ public static void Report()
+ {
+ if (VMIgnored) {
+ Console.WriteLine();
+ Console.WriteLine("Warning: Generation throttled for Virtual Methods.");
+ Console.WriteLine(" Consider regenerating with --gluelib-name and --glue-filename.");
+ }
+ Console.WriteLine();
+ Console.WriteLine("Generation Summary:");
+ Console.Write(" Enums: " + enums);
+ Console.Write(" Structs: " + structs);
+ Console.Write(" Boxed: " + boxed);
+ Console.Write(" Opaques: " + opaques);
+ Console.Write(" Interfaces: " + interfaces);
+ Console.Write(" Objects: " + objects);
+ Console.WriteLine(" Callbacks: " + cbs);
+ Console.Write(" Properties: " + props);
+ Console.Write(" Signals: " + sigs);
+ Console.Write(" Methods: " + methods);
+ Console.Write(" Constructors: " + ctors);
+ Console.WriteLine(" Throttled: " + throttled);
+ Console.WriteLine("Total Nodes: " + (enums+structs+boxed+opaques+interfaces+cbs+objects+props+sigs+methods+ctors+throttled));
+ Console.WriteLine();
+ }
+ }
+}
diff --git a/gio-sharp/generator/StructBase.cs b/gio-sharp/generator/StructBase.cs
new file mode 100644
index 0000000..7e1b87a
--- /dev/null
+++ b/gio-sharp/generator/StructBase.cs
@@ -0,0 +1,230 @@
+// GtkSharp.Generation.StructBase.cs - The Structure/Boxed Base Class.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Text.RegularExpressions;
+ using System.Xml;
+
+ public abstract class StructBase : ClassBase, IManualMarshaler {
+
+ new ArrayList fields = new ArrayList ();
+ bool need_read_native = false;
+
+ protected StructBase (XmlElement ns, XmlElement elem) : base (ns, elem)
+ {
+ foreach (XmlNode node in elem.ChildNodes) {
+
+ if (!(node is XmlElement)) continue;
+ XmlElement member = (XmlElement) node;
+
+ switch (node.Name) {
+ case "field":
+ fields.Add (new StructField (member, this));
+ break;
+
+ case "callback":
+ Statistics.IgnoreCount++;
+ break;
+
+ default:
+ if (!IsNodeNameHandled (node.Name))
+ Console.WriteLine ("Unexpected node " + node.Name + " in " + CName);
+ break;
+ }
+ }
+ }
+
+ public override string DefaultValue {
+ get {
+ return QualifiedName + ".Zero";
+ }
+ }
+
+ public override string MarshalType {
+ get {
+ return "IntPtr";
+ }
+ }
+
+ public override string AssignToName {
+ get { throw new NotImplementedException (); }
+ }
+
+ public override string CallByName ()
+ {
+ return "this_as_native";
+ }
+
+ public override string CallByName (string var)
+ {
+ return var + "_as_native";
+ }
+
+ public override string FromNative (string var)
+ {
+ if (DisableNew)
+ return var + " == IntPtr.Zero ? " + QualifiedName + ".Zero : (" + QualifiedName + ") System.Runtime.InteropServices.Marshal.PtrToStructure (" + var + ", typeof (" + QualifiedName + "))";
+ else
+ return QualifiedName + ".New (" + var + ")";
+ }
+
+ public string AllocNative (string var)
+ {
+ return "GLib.Marshaller.StructureToPtrAlloc (" + var + ")";
+ }
+
+ public string ReleaseNative (string var)
+ {
+ return "Marshal.FreeHGlobal (" +var + ")";
+ }
+
+ private bool DisableNew {
+ get {
+ return Elem.HasAttribute ("disable_new");
+ }
+ }
+
+ protected new void GenFields (GenerationInfo gen_info)
+ {
+ int bitfields = 0;
+ bool need_field = true;
+
+ foreach (StructField field in fields) {
+ if (field.IsBitfield) {
+ if (need_field) {
+ StreamWriter sw = gen_info.Writer;
+
+ sw.WriteLine ("\t\tprivate uint _bitfield{0};\n", bitfields++);
+ need_field = false;
+ }
+ } else
+ need_field = true;
+ field.Generate (gen_info, "\t\t");
+ }
+ }
+
+ public override bool Validate ()
+ {
+ foreach (StructField field in fields) {
+ if (!field.Validate ()) {
+ Console.WriteLine ("in Struct " + QualifiedName);
+ if (!field.IsPointer)
+ return false;
+ }
+ }
+
+ return base.Validate ();
+ }
+
+ public override void Generate (GenerationInfo gen_info)
+ {
+ bool need_close = false;
+ if (gen_info.Writer == null) {
+ gen_info.Writer = gen_info.OpenStream (Name);
+ need_close = true;
+ }
+
+ StreamWriter sw = gen_info.Writer;
+
+ sw.WriteLine ("namespace " + NS + " {");
+ sw.WriteLine ();
+ sw.WriteLine ("\tusing System;");
+ sw.WriteLine ("\tusing System.Collections;");
+ sw.WriteLine ("\tusing System.Runtime.InteropServices;");
+ sw.WriteLine ();
+
+ sw.WriteLine ("#region Autogenerated code");
+ if (IsDeprecated)
+ sw.WriteLine ("\t[Obsolete]");
+ sw.WriteLine ("\t[StructLayout(LayoutKind.Sequential)]");
+ string access = IsInternal ? "internal" : "public";
+ sw.WriteLine ("\t" + access + " struct " + Name + " {");
+ sw.WriteLine ();
+
+ need_read_native = false;
+ GenFields (gen_info);
+ sw.WriteLine ();
+ GenCtors (gen_info);
+ GenMethods (gen_info, null, this);
+ if (need_read_native)
+ GenReadNative (sw);
+
+ if (!need_close)
+ return;
+
+ sw.WriteLine ("#endregion");
+ AppendCustom(sw, gen_info.CustomDir);
+
+ sw.WriteLine ("\t}");
+ sw.WriteLine ("}");
+ sw.Close ();
+ gen_info.Writer = null;
+ }
+
+ protected override void GenCtors (GenerationInfo gen_info)
+ {
+ StreamWriter sw = gen_info.Writer;
+
+ sw.WriteLine ("\t\tpublic static {0} Zero = new {0} ();", QualifiedName);
+ sw.WriteLine();
+ if (!DisableNew) {
+ sw.WriteLine ("\t\tpublic static " + QualifiedName + " New(IntPtr raw) {");
+ sw.WriteLine ("\t\t\tif (raw == IntPtr.Zero)");
+ sw.WriteLine ("\t\t\t\treturn {0}.Zero;", QualifiedName);
+ sw.WriteLine ("\t\t\treturn ({0}) Marshal.PtrToStructure (raw, typeof ({0}));", QualifiedName);
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ }
+
+ foreach (Ctor ctor in Ctors)
+ ctor.IsStatic = true;
+
+ base.GenCtors (gen_info);
+ }
+
+ void GenReadNative (StreamWriter sw)
+ {
+ sw.WriteLine ("\t\tstatic void ReadNative (IntPtr native, ref {0} target)", QualifiedName);
+ sw.WriteLine ("\t\t{");
+ sw.WriteLine ("\t\t\ttarget = New (native);");
+ sw.WriteLine ("\t\t}");
+ sw.WriteLine ();
+ }
+
+ public override void Prepare (StreamWriter sw, string indent)
+ {
+ sw.WriteLine (indent + "IntPtr this_as_native = System.Runtime.InteropServices.Marshal.AllocHGlobal (System.Runtime.InteropServices.Marshal.SizeOf (this));");
+ sw.WriteLine (indent + "System.Runtime.InteropServices.Marshal.StructureToPtr (this, this_as_native, false);");
+ }
+
+ public override void Finish (StreamWriter sw, string indent)
+ {
+ need_read_native = true;
+ sw.WriteLine (indent + "ReadNative (this_as_native, ref this);");
+ sw.WriteLine (indent + "System.Runtime.InteropServices.Marshal.FreeHGlobal (this_as_native);");
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/StructField.cs b/gio-sharp/generator/StructField.cs
new file mode 100644
index 0000000..58f92d4
--- /dev/null
+++ b/gio-sharp/generator/StructField.cs
@@ -0,0 +1,149 @@
+// GtkSharp.Generation.StructField.cs - The Structure Field generation
+// Class.
+//
+// Author: Mike Kestner <mkestner ximian com>
+//
+// Copyright (c) 2004-2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.IO;
+ using System.Xml;
+
+ public class StructField : FieldBase {
+
+ public static int bitfields;
+
+ public StructField (XmlElement elem, ClassBase container_type) : base (elem, container_type) {}
+
+ protected override string DefaultAccess {
+ get {
+ if (IsPadding)
+ return "private";
+
+ return "public";
+ }
+ }
+
+ int ArrayLength {
+ get {
+ if (!IsArray)
+ return 0;
+
+ int result;
+ try {
+ result = Int32.Parse (elem.GetAttribute("array_len"));
+ } catch (Exception) {
+ Console.Write ("Non-numeric array_len: " + elem.GetAttribute("array_len"));
+ Console.WriteLine (" warning: array field {0} incorrectly generated", Name);
+ result = 0;
+ }
+ return result;
+ }
+ }
+
+ public new string CSType {
+ get {
+ string type = base.CSType;
+ if (IsArray)
+ type += "[]";
+ else if ((IsPointer || SymbolTable.Table.IsOpaque (CType)) && type != "string")
+ type = "IntPtr";
+
+ return type;
+ }
+ }
+
+ bool IsPadding {
+ get {
+ return (CName.StartsWith ("dummy") || CName.StartsWith ("padding"));
+ }
+ }
+
+ public bool IsPointer {
+ get {
+ return (CType.EndsWith ("*") || CType.EndsWith ("pointer"));
+ }
+ }
+
+ public new string Name {
+ get {
+ string result = "";
+ if ((IsPointer || SymbolTable.Table.IsOpaque (CType)) && CSType != "string")
+ result = "_";
+ result += SymbolTable.Table.MangleName (CName);
+
+ return result;
+ }
+ }
+
+ string StudlyName {
+ get {
+ string studly = base.Name;
+ if (studly == "")
+ throw new Exception ("API file must be regenerated with a current version of the GAPI parser. It is incompatible with this version of the GAPI code generator.");
+
+ return studly;
+ }
+ }
+
+ public override void Generate (GenerationInfo gen_info, string indent)
+ {
+ if (Hidden)
+ return;
+
+ StreamWriter sw = gen_info.Writer;
+ SymbolTable table = SymbolTable.Table;
+
+ string wrapped = table.GetCSType (CType);
+ string wrapped_name = SymbolTable.Table.MangleName (CName);
+ IGeneratable gen = table [CType];
+
+ if (IsArray) {
+ sw.WriteLine (indent + "[MarshalAs (UnmanagedType.ByValArray, SizeConst=" + ArrayLength + ")]");
+ sw.WriteLine (indent + "{0} {1} {2};", Access, CSType, StudlyName);
+ } else if (IsBitfield) {
+ base.Generate (gen_info, indent);
+ } else if (gen is IAccessor) {
+ sw.WriteLine (indent + "private {0} {1};", gen.MarshalType, Name);
+
+ if (Access != "private") {
+ IAccessor acc = table [CType] as IAccessor;
+ sw.WriteLine (indent + Access + " " + wrapped + " " + StudlyName + " {");
+ acc.WriteAccessors (sw, indent + "\t", Name);
+ sw.WriteLine (indent + "}");
+ }
+ } else if (IsPointer && (gen is StructGen || gen is BoxedGen)) {
+ sw.WriteLine (indent + "private {0} {1};", CSType, Name);
+ sw.WriteLine ();
+ if (Access != "private") {
+ sw.WriteLine (indent + Access + " " + wrapped + " " + wrapped_name + " {");
+ sw.WriteLine (indent + "\tget { return " + table.FromNativeReturn (CType, Name) + "; }");
+ sw.WriteLine (indent + "}");
+ }
+ } else if (IsPointer && CSType != "string") {
+ // FIXME: probably some fields here which should be visible.
+ sw.WriteLine (indent + "private {0} {1};", CSType, Name);
+ } else {
+ sw.WriteLine (indent + "{0} {1} {2};", Access, CSType, Access == "public" ? StudlyName : Name);
+ }
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/StructGen.cs b/gio-sharp/generator/StructGen.cs
new file mode 100644
index 0000000..4d615ad
--- /dev/null
+++ b/gio-sharp/generator/StructGen.cs
@@ -0,0 +1,53 @@
+// GtkSharp.Generation.StructGen.cs - The Structure Generatable.
+//
+// Author: Mike Kestner <mkestner speakeasy net>
+//
+// Copyright (c) 2001 Mike Kestner
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.IO;
+ using System.Xml;
+
+ public class StructGen : StructBase {
+
+ public StructGen (XmlElement ns, XmlElement elem) : base (ns, elem) {}
+
+ public override void Generate (GenerationInfo gen_info)
+ {
+ gen_info.CurrentType = Name;
+
+ StreamWriter sw = gen_info.Writer = gen_info.OpenStream (Name);
+ base.Generate (gen_info);
+ if (GetMethod ("GetType") == null && GetMethod ("GetGType") == null) {
+ sw.WriteLine ("\t\tprivate static GLib.GType GType {");
+ sw.WriteLine ("\t\t\tget { return GLib.GType.Pointer; }");
+ sw.WriteLine ("\t\t}");
+ }
+ sw.WriteLine ("#endregion");
+ AppendCustom (sw, gen_info.CustomDir);
+ sw.WriteLine ("\t}");
+ sw.WriteLine ("}");
+ sw.Close ();
+ gen_info.Writer = null;
+ Statistics.StructCount++;
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/SymbolTable.cs b/gio-sharp/generator/SymbolTable.cs
new file mode 100644
index 0000000..e10b51f
--- /dev/null
+++ b/gio-sharp/generator/SymbolTable.cs
@@ -0,0 +1,412 @@
+// GtkSharp.Generation.SymbolTable.cs - The Symbol Table Class.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2001-2003 Mike Kestner
+// Copyright (c) 2004-2005 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+
+ public class SymbolTable {
+
+ static SymbolTable table = null;
+
+ Hashtable types = new Hashtable ();
+
+ public static SymbolTable Table {
+ get {
+ if (table == null)
+ table = new SymbolTable ();
+
+ return table;
+ }
+ }
+
+ public SymbolTable ()
+ {
+ // Simple easily mapped types
+ AddType (new SimpleGen ("void", "void", String.Empty));
+ AddType (new SimpleGen ("gpointer", "IntPtr", "IntPtr.Zero"));
+ AddType (new SimpleGen ("gboolean", "bool", "false"));
+ AddType (new SimpleGen ("gint", "int", "0"));
+ AddType (new SimpleGen ("guint", "uint", "0"));
+ AddType (new SimpleGen ("int", "int", "0"));
+ AddType (new SimpleGen ("unsigned", "uint", "0"));
+ AddType (new SimpleGen ("unsigned int", "uint", "0"));
+ AddType (new SimpleGen ("unsigned-int", "uint", "0"));
+ AddType (new SimpleGen ("gshort", "short", "0"));
+ AddType (new SimpleGen ("gushort", "ushort", "0"));
+ AddType (new SimpleGen ("short", "short", "0"));
+ AddType (new SimpleGen ("guchar", "byte", "0"));
+ AddType (new SimpleGen ("unsigned char", "byte", "0"));
+ AddType (new SimpleGen ("unsigned-char", "byte", "0"));
+ AddType (new SimpleGen ("guint1", "bool", "false"));
+ AddType (new SimpleGen ("uint1", "bool", "false"));
+ AddType (new SimpleGen ("gint8", "sbyte", "0"));
+ AddType (new SimpleGen ("guint8", "byte", "0"));
+ AddType (new SimpleGen ("gint16", "short", "0"));
+ AddType (new SimpleGen ("guint16", "ushort", "0"));
+ AddType (new SimpleGen ("gint32", "int", "0"));
+ AddType (new SimpleGen ("guint32", "uint", "0"));
+ AddType (new SimpleGen ("gint64", "long", "0"));
+ AddType (new SimpleGen ("guint64", "ulong", "0"));
+ AddType (new SimpleGen ("long long", "long", "0"));
+ AddType (new SimpleGen ("gfloat", "float", "0.0"));
+ AddType (new SimpleGen ("float", "float", "0.0"));
+ AddType (new SimpleGen ("gdouble", "double", "0.0"));
+ AddType (new SimpleGen ("double", "double", "0.0"));
+ AddType (new SimpleGen ("goffset", "long", "0"));
+ AddType (new SimpleGen ("GQuark", "int", "0"));
+
+ // platform specific integer types.
+#if WIN64LONGS
+ AddType (new SimpleGen ("long", "int", "0"));
+ AddType (new SimpleGen ("glong", "int", "0"));
+ AddType (new SimpleGen ("ulong", "uint", "0"));
+ AddType (new SimpleGen ("gulong", "uint", "0"));
+ AddType (new SimpleGen ("unsigned long", "uint", "0"));
+#else
+ AddType (new LPGen ("long"));
+ AddType (new LPGen ("glong"));
+ AddType (new LPUGen ("ulong"));
+ AddType (new LPUGen ("gulong"));
+ AddType (new LPUGen ("unsigned long"));
+#endif
+
+ AddType (new LPGen ("ssize_t"));
+ AddType (new LPGen ("gssize"));
+ AddType (new LPUGen ("size_t"));
+ AddType (new LPUGen ("gsize"));
+
+#if OFF_T_8
+ AddType (new AliasGen ("off_t", "long"));
+#else
+ AddType (new LPGen ("off_t"));
+#endif
+
+ // string types
+ AddType (new ConstStringGen ("const-gchar"));
+ AddType (new ConstStringGen ("const-xmlChar"));
+ AddType (new ConstStringGen ("const-char"));
+ AddType (new ConstFilenameGen ("const-gfilename"));
+ AddType (new MarshalGen ("gfilename", "string", "IntPtr", "GLib.Marshaller.StringToFilenamePtr({0})", "GLib.Marshaller.FilenamePtrToStringGFree({0})"));
+ AddType (new MarshalGen ("gchar", "string", "IntPtr", "GLib.Marshaller.StringToPtrGStrdup({0})", "GLib.Marshaller.PtrToStringGFree({0})"));
+ AddType (new MarshalGen ("char", "string", "IntPtr", "GLib.Marshaller.StringToPtrGStrdup({0})", "GLib.Marshaller.PtrToStringGFree({0})"));
+ AddType (new SimpleGen ("GStrv", "string[]", "null"));
+
+ // manually wrapped types requiring more complex marshaling
+ AddType (new ManualGen ("GInitiallyUnowned", "GLib.InitiallyUnowned", "GLib.Object.GetObject ({0})"));
+ AddType (new ManualGen ("GObject", "GLib.Object", "GLib.Object.GetObject ({0})"));
+ AddType (new ManualGen ("GList", "GLib.List"));
+ AddType (new ManualGen ("GPtrArray", "GLib.PtrArray"));
+ AddType (new ManualGen ("GSList", "GLib.SList"));
+ AddType (new MarshalGen ("gunichar", "char", "uint", "GLib.Marshaller.CharToGUnichar ({0})", "GLib.Marshaller.GUnicharToChar ({0})"));
+ AddType (new MarshalGen ("time_t", "System.DateTime", "IntPtr", "GLib.Marshaller.DateTimeTotime_t ({0})", "GLib.Marshaller.time_tToDateTime ({0})"));
+ AddType (new MarshalGen ("GString", "string", "IntPtr", "new GLib.GString ({0}).Handle", "GLib.GString.PtrToString ({0})"));
+ AddType (new MarshalGen ("GType", "GLib.GType", "IntPtr", "{0}.Val", "new GLib.GType({0})"));
+ AddType (new ByRefGen ("GValue", "GLib.Value"));
+ AddType (new SimpleGen ("GDestroyNotify", "GLib.DestroyNotify", "null"));
+
+ // FIXME: These ought to be handled properly.
+ AddType (new SimpleGen ("GC", "IntPtr", "IntPtr.Zero"));
+ AddType (new SimpleGen ("GError", "IntPtr", "IntPtr.Zero"));
+ AddType (new SimpleGen ("GMemChunk", "IntPtr", "IntPtr.Zero"));
+ AddType (new SimpleGen ("GTimeVal", "IntPtr", "IntPtr.Zero"));
+ AddType (new SimpleGen ("GClosure", "IntPtr", "IntPtr.Zero"));
+ AddType (new SimpleGen ("GArray", "IntPtr", "IntPtr.Zero"));
+ AddType (new SimpleGen ("GByteArray", "IntPtr", "IntPtr.Zero"));
+ AddType (new SimpleGen ("GData", "IntPtr", "IntPtr.Zero"));
+ AddType (new SimpleGen ("GIOChannel", "IntPtr", "IntPtr.Zero"));
+ AddType (new SimpleGen ("GTypeModule", "GLib.Object", "null"));
+ AddType (new SimpleGen ("GHashTable", "System.IntPtr", "IntPtr.Zero"));
+ AddType (new SimpleGen ("va_list", "IntPtr", "IntPtr.Zero"));
+ AddType (new SimpleGen ("GParamSpec", "IntPtr", "IntPtr.Zero"));
+ AddType (new SimpleGen ("gconstpointer", "IntPtr", "IntPtr.Zero"));
+ }
+
+ public void AddType (IGeneratable gen)
+ {
+ types [gen.CName] = gen;
+ }
+
+ public void AddTypes (IGeneratable[] gens)
+ {
+ foreach (IGeneratable gen in gens)
+ types [gen.CName] = gen;
+ }
+
+ public int Count {
+ get
+ {
+ return types.Count;
+ }
+ }
+
+ public IEnumerable Generatables {
+ get {
+ return types.Values;
+ }
+ }
+
+ public IGeneratable this [string ctype] {
+ get {
+ return DeAlias (ctype) as IGeneratable;
+ }
+ }
+
+ private bool IsConstString (string type)
+ {
+ switch (type) {
+ case "const-gchar":
+ case "const-char":
+ case "const-xmlChar":
+ case "const-gfilename":
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ private string Trim(string type)
+ {
+ // HACK: If we don't detect this here, there is no
+ // way of indicating it in the symbol table
+ if (type == "void*" || type == "const-void*") return "gpointer";
+
+ string trim_type = type.TrimEnd('*');
+
+ if (IsConstString (trim_type))
+ return trim_type;
+
+ if (trim_type.StartsWith("const-")) return trim_type.Substring(6);
+ return trim_type;
+ }
+
+ private object DeAlias (string type)
+ {
+ type = Trim (type);
+ while (types [type] is AliasGen) {
+ IGeneratable igen = types [type] as AliasGen;
+ types [type] = types [igen.Name];
+ type = igen.Name;
+ }
+
+ return types [type];
+ }
+
+ public string FromNativeReturn(string c_type, string val)
+ {
+ IGeneratable gen = this[c_type];
+ if (gen == null)
+ return "";
+ return gen.FromNativeReturn (val);
+ }
+
+ public string ToNativeReturn(string c_type, string val)
+ {
+ IGeneratable gen = this[c_type];
+ if (gen == null)
+ return "";
+ return gen.ToNativeReturn (val);
+ }
+
+ public string FromNative(string c_type, string val)
+ {
+ IGeneratable gen = this[c_type];
+ if (gen == null)
+ return "";
+ return gen.FromNative (val);
+ }
+
+ public string GetCSType(string c_type)
+ {
+ IGeneratable gen = this[c_type];
+ if (gen == null)
+ return "";
+ return gen.QualifiedName;
+ }
+
+ public string GetName(string c_type)
+ {
+ IGeneratable gen = this[c_type];
+ if (gen == null)
+ return "";
+ return gen.Name;
+ }
+
+ public string GetMarshalReturnType(string c_type)
+ {
+ IGeneratable gen = this[c_type];
+ if (gen == null)
+ return "";
+ return gen.MarshalReturnType;
+ }
+
+ public string GetToNativeReturnType(string c_type)
+ {
+ IGeneratable gen = this[c_type];
+ if (gen == null)
+ return "";
+ return gen.ToNativeReturnType;
+ }
+
+ public string GetMarshalType(string c_type)
+ {
+ IGeneratable gen = this[c_type];
+ if (gen == null)
+ return "";
+ return gen.MarshalType;
+ }
+
+ public string CallByName(string c_type, string var_name)
+ {
+ IGeneratable gen = this[c_type];
+ if (gen == null)
+ return "";
+ return gen.CallByName(var_name);
+ }
+
+ public bool IsOpaque(string c_type)
+ {
+ if (this[c_type] is OpaqueGen)
+ return true;
+
+ return false;
+ }
+
+ public bool IsBoxed(string c_type)
+ {
+ if (this[c_type] is BoxedGen)
+ return true;
+
+ return false;
+ }
+
+ public bool IsStruct(string c_type)
+ {
+ if (this[c_type] is StructGen)
+ return true;
+
+ return false;
+ }
+
+ public bool IsEnum(string c_type)
+ {
+ if (this[c_type] is EnumGen)
+ return true;
+
+ return false;
+ }
+
+ public bool IsEnumFlags(string c_type)
+ {
+ EnumGen gen = this [c_type] as EnumGen;
+ return (gen != null && gen.Elem.GetAttribute ("type") == "flags");
+ }
+
+ public bool IsInterface(string c_type)
+ {
+ if (this[c_type] is InterfaceGen)
+ return true;
+
+ return false;
+ }
+
+ public ClassBase GetClassGen(string c_type)
+ {
+ return this[c_type] as ClassBase;
+ }
+
+ public bool IsObject(string c_type)
+ {
+ if (this[c_type] is ObjectGen)
+ return true;
+
+ return false;
+ }
+
+ public bool IsCallback(string c_type)
+ {
+ if (this[c_type] is CallbackGen)
+ return true;
+
+ return false;
+ }
+
+ public bool IsManuallyWrapped(string c_type)
+ {
+ if (this[c_type] is ManualGen)
+ return true;
+
+ return false;
+ }
+
+ public string MangleName(string name)
+ {
+ switch (name) {
+ case "string":
+ return "str1ng";
+ case "event":
+ return "evnt";
+ case "null":
+ return "is_null";
+ case "object":
+ return "objekt";
+ case "params":
+ return "parms";
+ case "ref":
+ return "reference";
+ case "in":
+ return "in_param";
+ case "out":
+ return "out_param";
+ case "fixed":
+ return "mfixed";
+ case "byte":
+ return "_byte";
+ case "new":
+ return "_new";
+ case "base":
+ return "_base";
+ case "lock":
+ return "_lock";
+ case "callback":
+ return "cb";
+ case "readonly":
+ return "read_only";
+ case "interface":
+ return "iface";
+ case "internal":
+ return "_internal";
+ case "where":
+ return "wh3r3";
+ case "foreach":
+ return "for_each";
+ case "remove":
+ return "_remove";
+ default:
+ break;
+ }
+
+ return name;
+ }
+ }
+}
diff --git a/gio-sharp/generator/VMSignature.cs b/gio-sharp/generator/VMSignature.cs
new file mode 100644
index 0000000..fe0ebf1
--- /dev/null
+++ b/gio-sharp/generator/VMSignature.cs
@@ -0,0 +1,75 @@
+// GtkSharp.Generation.VMSignature.cs - The Virtual Method Signature Generation Class.
+//
+// Author: Mike Kestner <mkestner ximian com>
+//
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.Xml;
+
+ public class VMSignature {
+
+ private ArrayList parms = new ArrayList ();
+
+ public VMSignature (Parameters parms)
+ {
+ bool has_cb = parms.HideData;
+ for (int i = 1; i < parms.Count; i++) {
+ Parameter p = parms [i];
+
+ if (i > 1 && p.IsLength && parms [i - 1].IsString)
+ continue;
+
+ if (p.IsCount && ((i > 1 && parms [i - 1].IsArray) || (i < parms.Count - 1 && parms [i + 1].IsArray)))
+ continue;
+
+ has_cb = has_cb || p.Generatable is CallbackGen;
+ if (p.IsUserData && has_cb)
+ continue;
+
+ if (p.CType == "GError**")
+ continue;
+
+ if (p.Scope == "notified")
+ i += 2;
+
+ this.parms.Add (p);
+ }
+ }
+
+ public override string ToString ()
+ {
+ if (parms.Count == 0)
+ return "";
+
+ string[] result = new string [parms.Count];
+ int i = 0;
+
+ foreach (Parameter p in parms) {
+ result [i] = p.PassAs != "" ? p.PassAs + " " : "";
+ result [i++] += p.CSType + " " + p.Name;
+ }
+
+ return String.Join (", ", result);
+ }
+ }
+}
+
diff --git a/gio-sharp/generator/VirtualMethod.cs b/gio-sharp/generator/VirtualMethod.cs
new file mode 100644
index 0000000..8c09704
--- /dev/null
+++ b/gio-sharp/generator/VirtualMethod.cs
@@ -0,0 +1,168 @@
+// GtkSharp.Generation.VirtualMethod.cs - The VirtualMethod Generatable.
+//
+// Author: Mike Kestner <mkestner novell com>
+//
+// Copyright (c) 2003-2004 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GtkSharp.Generation {
+
+ using System;
+ using System.Collections;
+ using System.IO;
+ using System.Xml;
+
+ // FIXME: handle static VMs
+ public class VirtualMethod : MethodBase {
+
+ XmlElement elem;
+ ReturnValue retval;
+ Parameters parms;
+
+ public VirtualMethod (XmlElement elem, ClassBase container_type) : base (elem, container_type)
+ {
+ this.elem = elem;
+ retval = new ReturnValue (elem ["return-type"]);
+ parms = new Parameters (elem["parameters"]);
+ parms.HideData = true;
+ }
+
+ public bool IsGetter {
+ get {
+ return HasGetterName && ((!retval.IsVoid && parms.Count == 1) || (retval.IsVoid && parms.Count == 2 && parms [1].PassAs == "out"));
+ }
+ }
+
+ public bool IsSetter {
+ get {
+ if (!HasSetterName || !retval.IsVoid)
+ return false;
+
+ if (parms.Count == 2 || (parms.Count == 4 && parms [1].Scope == "notified"))
+ return true;
+ else
+ return false;
+ }
+ }
+
+ public string MarshalReturnType {
+ get {
+ return SymbolTable.Table.GetToNativeReturnType (elem["return-type"].GetAttribute("type"));
+ }
+ }
+
+ public void GenerateCallback (StreamWriter sw)
+ {
+ if (!Validate ())
+ return;
+
+ ManagedCallString call = new ManagedCallString (parms, true);
+ string type = parms [0].CSType + "Implementor";
+ string name = parms [0].Name;
+ string call_string = "__obj." + Name + " (" + call + ")";
+ if (IsGetter)
+ call_string = "__obj." + (Name.StartsWith ("Get") ? Name.Substring (3) : Name);
+ else if (IsSetter)
+ call_string = "__obj." + Name.Substring (3) + " = " + call;
+
+ sw.WriteLine ("\t\t[GLib.CDeclCallback]");
+ sw.WriteLine ("\t\tdelegate " + MarshalReturnType + " " + Name + "Delegate (" + parms.ImportSignature + ");");
+ sw.WriteLine ();
+ sw.WriteLine ("\t\tstatic " + MarshalReturnType + " " + Name + "Callback (" + parms.ImportSignature + ")");
+ sw.WriteLine ("\t\t{");
+ string unconditional = call.Unconditional ("\t\t\t");
+ if (unconditional.Length > 0)
+ sw.WriteLine (unconditional);
+ sw.WriteLine ("\t\t\ttry {");
+ sw.WriteLine ("\t\t\t\t" + type + " __obj = GLib.Object.GetObject (" + name + ", false) as " + type + ";");
+ sw.Write (call.Setup ("\t\t\t\t"));
+ if (retval.IsVoid) {
+ if (IsGetter) {
+ Parameter p = parms [1];
+ string out_name = p.Name;
+ if (p.MarshalType != p.CSType)
+ out_name = "my" + out_name;
+ sw.WriteLine ("\t\t\t\t" + out_name + " = " + call_string + ";");
+ } else
+ sw.WriteLine ("\t\t\t\t" + call_string + ";");
+ } else
+ sw.WriteLine ("\t\t\t\t" + retval.CSType + " __result = " + call_string + ";");
+ bool fatal = parms.HasOutParam || !retval.IsVoid;
+ sw.Write (call.Finish ("\t\t\t\t"));
+ if (!retval.IsVoid)
+ sw.WriteLine ("\t\t\t\treturn " + retval.ToNative ("__result") + ";");
+
+ sw.WriteLine ("\t\t\t} catch (Exception e) {");
+ sw.WriteLine ("\t\t\t\tGLib.ExceptionManager.RaiseUnhandledException (e, " + (fatal ? "true" : "false") + ");");
+ if (fatal) {
+ sw.WriteLine ("\t\t\t\t// NOTREACHED: above call does not return.");
+ sw.WriteLine ("\t\t\t\tthrow e;");
+ }
+ sw.WriteLine ("\t\t\t}");
+ sw.WriteLine ("\t\t}");
+ }
+
+ public void GenerateDeclaration (StreamWriter sw, VirtualMethod complement)
+ {
+ VMSignature vmsig = new VMSignature (parms);
+ if (IsGetter) {
+ string name = Name.StartsWith ("Get") ? Name.Substring (3) : Name;
+ string type = retval.IsVoid ? parms [1].CSType : retval.CSType;
+ if (complement != null && complement.parms [1].CSType == type)
+ sw.WriteLine ("\t\t" + type + " " + name + " { get; set; }");
+ else {
+ sw.WriteLine ("\t\t" + type + " " + name + " { get; }");
+ if (complement != null)
+ sw.WriteLine ("\t\t" + complement.retval.CSType + " " + complement.Name + " (" + (new VMSignature (complement.parms)) + ");");
+ }
+ } else if (IsSetter)
+ sw.WriteLine ("\t\t" + parms[1].CSType + " " + Name.Substring (3) + " { set; }");
+ else
+ sw.WriteLine ("\t\t" + retval.CSType + " " + Name + " (" + vmsig + ");");
+ }
+
+ enum ValidState {
+ Unvalidated,
+ Invalid,
+ Valid
+ }
+
+ ValidState vstate = ValidState.Unvalidated;
+
+ public bool IsValid {
+ get {
+ if (vstate == ValidState.Unvalidated)
+ return Validate ();
+ else
+ return vstate == ValidState.Valid;
+ }
+ }
+
+ public override bool Validate ()
+ {
+ if (!parms.Validate () || !retval.Validate ()) {
+ Console.Write ("in virtual method " + Name + " ");
+ vstate = ValidState.Invalid;
+ return false;
+ }
+
+ vstate = ValidState.Valid;
+ return true;
+ }
+ }
+}
+
diff --git a/gio-sharp/gio/AppInfoAdapter.custom b/gio-sharp/gio/AppInfoAdapter.custom
new file mode 100644
index 0000000..1c4a337
--- /dev/null
+++ b/gio-sharp/gio/AppInfoAdapter.custom
@@ -0,0 +1,28 @@
+// AppInfoAdapter.custom - customizations to GLib.AppInfoAdapter
+//
+// Authors: Stephane Delcroix <stephane delcroix org>
+//
+// Copyright (c) 2008 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the Lesser GNU General
+// Public License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+ [DllImport("libgio-2.0-0.dll")]
+ static extern IntPtr g_app_info_get_all();
+
+ public static GLib.AppInfo[] GetAll() {
+ IntPtr raw_ret = g_app_info_get_all();
+ GLib.AppInfo[] ret = (GLib.AppInfo[]) GLib.Marshaller.ListPtrToArray (raw_ret, typeof(GLib.List), true, false, typeof(GLib.AppInfo));
+ return ret;
+ }
diff --git a/gio-sharp/gio/AssemblyInfo.cs b/gio-sharp/gio/AssemblyInfo.cs
new file mode 100644
index 0000000..a061da1
--- /dev/null
+++ b/gio-sharp/gio/AssemblyInfo.cs
@@ -0,0 +1,7 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+[assembly:AssemblyVersion("2.14.0.0")]
+[assembly:AssemblyDelaySign(false)]
+[assembly:AssemblyKeyFile("gtk-sharp.snk")]
+[assembly:GLib.IgnoreClassInitializers]
diff --git a/gio-sharp/gio/File.custom b/gio-sharp/gio/File.custom
new file mode 100644
index 0000000..f764de7
--- /dev/null
+++ b/gio-sharp/gio/File.custom
@@ -0,0 +1,31 @@
+// File.custom - customizations to GLib.File
+//
+// Authors: Stephane Delcroix <stephane delcroix org>
+//
+// Copyright (c) 2008 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the Lesser GNU General
+// Public License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+bool Exists
+{
+ get;
+}
+
+System.Uri Uri
+{
+ get;
+}
+
+bool Delete();
diff --git a/gio-sharp/gio/FileAdapter.custom b/gio-sharp/gio/FileAdapter.custom
new file mode 100644
index 0000000..bab7ab7
--- /dev/null
+++ b/gio-sharp/gio/FileAdapter.custom
@@ -0,0 +1,46 @@
+// FileAdapter.custom - customizations to GLib.FileAdapter
+//
+// Authors: Stephane Delcroix <stephane delcroix org>
+//
+// Copyright (c) 2008 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the Lesser GNU General
+// Public License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+public override string ToString ()
+{
+ return Uri.ToString ();
+}
+
+public bool Exists {
+ get { return QueryExists (null); }
+}
+
+public bool Delete ()
+{
+ return Delete (null);
+}
+
+[DllImport("libgio-2.0-0.dll")]
+static extern IntPtr g_file_get_uri(IntPtr raw);
+
+public System.Uri Uri {
+ get {
+ IntPtr raw_ret = g_file_get_uri(Handle);
+ string ret = GLib.Marshaller.PtrToStringGFree(raw_ret);
+ return new System.Uri (ret);
+ }
+}
+
+
diff --git a/gio-sharp/gio/FileEnumerator.custom b/gio-sharp/gio/FileEnumerator.custom
new file mode 100644
index 0000000..acd4832
--- /dev/null
+++ b/gio-sharp/gio/FileEnumerator.custom
@@ -0,0 +1,59 @@
+// FileEnumerator.custom - customizations to GLib.FileEnumerator
+//
+// Authors: Stephane Delcroix <stephane delcroix org>
+//
+// Copyright (c) 2008 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the Lesser GNU General
+// Public License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+public IEnumerator GetEnumerator ()
+{
+ return new Enumerator (this);
+}
+
+public FileInfo NextFile ()
+{
+ return NextFile ((Cancellable) null);
+}
+
+class Enumerator : IEnumerator
+{
+ FileEnumerator file_enumerator;
+
+ public Enumerator (FileEnumerator file_enumerator)
+ {
+ this.file_enumerator = file_enumerator;
+ }
+
+ FileInfo current=null;
+ public object Current {
+ get {
+ return current;
+ }
+ }
+
+ public bool MoveNext ()
+ {
+ current = file_enumerator.NextFile ();
+ if (current == null)
+ return false;
+ return true;
+ }
+
+ public void Reset ()
+ {
+ throw new NotImplementedException ();
+ }
+}
diff --git a/gio-sharp/gio/FileFactory.cs b/gio-sharp/gio/FileFactory.cs
new file mode 100644
index 0000000..0a5b0fa
--- /dev/null
+++ b/gio-sharp/gio/FileFactory.cs
@@ -0,0 +1,59 @@
+//
+// FileFactory.cs
+//
+// Author(s):
+// Stephane Delcroix <stephane delcroix org>
+//
+// Copyright (c) 2008 Stephane Delcroix
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the Lesser GNU General
+// Public License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace GLib
+{
+ public class FileFactory
+ {
+ [DllImport ("libgio-2.0-0.dll")]
+ private static extern IntPtr g_file_new_for_uri (string uri);
+
+ public static File NewForUri (string uri)
+ {
+ return GLib.FileAdapter.GetObject (g_file_new_for_uri (uri), false) as File;
+ }
+
+ public static File NewForUri (Uri uri)
+ {
+ return GLib.FileAdapter.GetObject (g_file_new_for_uri (uri.ToString ()), false) as File;
+ }
+
+ [DllImport ("libgio-2.0-0.dll")]
+ private static extern IntPtr g_file_new_for_path (string path);
+
+ public static File NewForPath (string path)
+ {
+ return GLib.FileAdapter.GetObject (g_file_new_for_path (path), false) as File;
+ }
+
+ [DllImport ("libgio-2.0-0.dll")]
+ private static extern IntPtr g_file_new_for_commandline_args (string args);
+
+ public static File NewForCommandlineArgs (string args)
+ {
+ return GLib.FileAdapter.GetObject (g_file_new_for_commandline_args (args), false) as File;
+ }
+ }
+}
diff --git a/gio-sharp/gio/Gio.metadata b/gio-sharp/gio/Gio.metadata
new file mode 100644
index 0000000..907fe3c
--- /dev/null
+++ b/gio-sharp/gio/Gio.metadata
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<metadata>
+ <add-node path="/api"><symbol type="simple" cname="GSeekType" name="GLib.SeekType"/></add-node>
+ <attr path="/api/namespace" name="name">GLib</attr>
+ <attr path="/api/namespace/interface[ cname='GAppInfo']" name="consume_only">1</attr>
+ <attr path="/api/namespace/interface[ cname='GAppInfo']/method[ name='CanRemoveSupportsType']" name="name">GetCanRemoveSupportsType</attr>
+ <attr path="/api/namespace/interface[ cname='GAppInfo']/method[ name='GetAll']" name="hidden">1</attr>
+ <attr path="/api/namespace/interface[ cname='GAppInfo']/method[ name='GetAllForType']/return-type" name="element_type">GAppInfo*</attr>
+ <attr path="/api/namespace/interface[ cname='GAppInfo']/method[ name='GetAllForType']/return-type" name="owned">true</attr>
+ <attr path="/api/namespace/interface[ cname='GAppInfo']/method[ name='ShouldShow']" name="name">GetShouldShow</attr>
+ <attr path="/api/namespace/interface[ cname='GAppInfo']/method[ name='SupportsFiles']" name="name">GetSupportsFiles</attr>
+ <attr path="/api/namespace/interface[ cname='GAppInfo']/method[ name='SupportsUris']" name="name">GetSupportsUris</attr>
+ <attr path="/api/namespace/interface[ cname='GDrive']" name="consume_only">1</attr>
+ <attr path="/api/namespace/interface[ cname='GFile']/method[ name='GetParseName']" name="name">GetParsedName</attr>
+ <attr path="/api/namespace/interface[ cname='GFile']/method[ name='GetUri']" name="hidden">1</attr>
+ <attr path="/api/namespace/interface[ cname='GLoadableIcon']/method[ name='LoadAsync']/*/*[ type='GAsyncReadyCallback']" name="scope">async</attr>
+ <attr path="/api/namespace/interface[ cname='GMount']" name="consume_only">1</attr>
+ <attr path="/api/namespace/interface[ cname='GMount']/method[ name='CanUnmount']" name="name">GetCanUnmount</attr>
+ <attr path="/api/namespace/interface[ cname='GSeekable']/method[ cname='g_seekable_can_seek']" name="name">GetCanSeek</attr>
+ <attr path="/api/namespace/interface[ cname='GSeekable']/method[ cname='g_seekable_tell']" name="name">GetPosition</attr>
+ <attr path="/api/namespace/interface[ cname='GVolume']" name="consume_only">1</attr>
+ <attr path="/api/namespace/interface[ cname='GVolume']/method[ name='GetMount']" name="name">GetMountInstance</attr>
+ <attr path="/api/namespace/object/method/*/*[ type='GAsyncReadyCallback']" name="scope">async</attr>
+ <add-node path="/api/namespace/object[ cname='GFileEnumerator']"><implements><interface name="IEnumerable" /></implements></add-node>
+ <attr path="/api/namespace/object[ cname='GFileInfo']/method[ cname='g_file_info_get_attribute_int64']" name="name">GetAttributeLong</attr>
+ <attr path="/api/namespace/object[ cname='GFileInfo']/method[ cname='g_file_info_set_attribute_int64']" name="name">SetAttributeLong</attr>
+ <attr path="/api/namespace/object[ cname='GFileInfo']/method[ cname='g_file_info_get_attribute_uint64']" name="name">GetAttributeULong</attr>
+ <attr path="/api/namespace/object[ cname='GFileInfo']/method[ cname='g_file_info_set_attribute_uint64']" name="name">SetAttributeULong</attr>
+ <attr path="/api/namespace/object[ cname='GFileInfo']/method[ cname='g_file_info_get_attribute_int32']" name="name">GetAttributeInt</attr>
+ <attr path="/api/namespace/object[ cname='GFileInfo']/method[ cname='g_file_info_set_attribute_int32']" name="name">SetAttributeInt</attr>
+ <attr path="/api/namespace/object[ cname='GFileInfo']/method[ cname='g_file_info_get_attribute_uint32']" name="name">GetAttributeUInt</attr>
+ <attr path="/api/namespace/object[ cname='GFileInfo']/method[ cname='g_file_info_set_attribute_uint32']" name="name">SetAttributeUInt</attr>
+ <attr path="/api/namespace/object[ cname='GInputStream']/method[ cname='g_input_stream_read']/parameters/parameter[ name='buffer']" name="type">guchar*</attr>
+ <attr path="/api/namespace/object[ cname='GInputStream']/method[ cname='g_input_stream_read']/parameters/parameter[ name='buffer']" name="array">1</attr>
+ <attr path="/api/namespace/object[ cname='GInputStream']/method[ cname='g_input_stream_read_all']/parameters/parameter[ name='buffer']" name="type">guchar*</attr>
+ <attr path="/api/namespace/object[ cname='GInputStream']/method[ cname='g_input_stream_read_all']/parameters/parameter[ name='buffer']" name="array">1</attr>
+ <attr path="/api/namespace/object[ cname='GInputStream']/method[ cname='g_input_stream_read_async']/parameters/parameter[ name='buffer']" name="type">guchar*</attr>
+ <attr path="/api/namespace/object[ cname='GInputStream']/method[ cname='g_input_stream_read_async']/parameters/parameter[ name='buffer']" name="array">1</attr>
+ <attr path="/api/namespace/object[ cname='GMemoryOutputStream']/method[ name='GetData']" name="new_flag">1</attr>
+ <attr path="/api/namespace/object[ cname='GMountOperation']/method[ name='Reply']" name="name">EmitReply</attr>
+ <attr path="/api/namespace/object[ cname='GOutputStream']/method[ cname='g_output_stream_write']/parameters/parameter[ name='buffer']" name="type">guchar*</attr>
+ <attr path="/api/namespace/object[ cname='GOutputStream']/method[ cname='g_output_stream_write']/parameters/parameter[ name='buffer']" name="array">1</attr>
+ <attr path="/api/namespace/object[ cname='GOutputStream']/method[ cname='g_output_stream_write_all']/parameters/parameter[ name='buffer']" name="type">guchar*</attr>
+ <attr path="/api/namespace/object[ cname='GOutputStream']/method[ cname='g_output_stream_write_all']/parameters/parameter[ name='buffer']" name="array">1</attr>
+ <attr path="/api/namespace/object[ cname='GOutputStream']/method[ cname='g_output_stream_write_async']/parameters/parameter[ name='buffer']" name="type">guchar*</attr>
+ <attr path="/api/namespace/object[ cname='GOutputStream']/method[ cname='g_output_stream_write_async']/parameters/parameter[ name='buffer']" name="array">1</attr>
+ <attr path="/api/namespace/object[ cname='GSimpleAsyncResult']/constructor[ cname='g_simple_async_result_new_error']" name="hidden">1</attr>
+ <attr path="/api/namespace/object[ cname='GSimpleAsyncResult']/method[ name='SetError']" name="hidden">1</attr>
+ <attr path="/api/namespace/object[ cname='GThemedIcon']/method[ name='GetNames']/return-type" name="null_term_array">1</attr>
+ <attr path="/api/namespace/object[ cname='GVolumeMonitor']/method[ name='Get']" name="name">GetDefault</attr>
+ <attr path="/api/namespace/object[ cname='GVolumeMonitor']/method[ name='GetMounts']/return-type" name="element_type">GMount*</attr>
+ <attr path="/api/namespace/object[ cname='GVolumeMonitor']/method[ name='GetMounts']/return-type" name="owned">true</attr>
+ <attr path="/api/namespace/object[ cname='GVolumeMonitor']/method[ name='GetVolumes']/return-type" name="element_type">GVolume*</attr>
+ <attr path="/api/namespace/object[ cname='GVolumeMonitor']/method[ name='GetVolumes']/return-type" name="owned">true</attr>
+ <attr path="/api/namespace/object[ cname='GVolumeMonitor']/method[ name='GetConnectedDrives']/return-type" name="element_type">GDrive*</attr>
+ <attr path="/api/namespace/object[ cname='GVolumeMonitor']/method[ name='GetConnectedDrives']/return-type" name="owned">true</attr>
+ <attr path="/api/namespace/struct[ cname='GFileAttributeInfoList']/field[ name='Infos']" name="array">1</attr>
+</metadata>
diff --git a/gio-sharp/gio/GioStream.cs b/gio-sharp/gio/GioStream.cs
new file mode 100644
index 0000000..03d1696
--- /dev/null
+++ b/gio-sharp/gio/GioStream.cs
@@ -0,0 +1,215 @@
+/*
+ * GioStream.cs: provide a System.IO.Stream api to [Input|Output]Streams
+ *
+ * Author(s):
+ * Stephane Delcroix (stephane delcroix org)
+ *
+ * Copyright (c) 2008 Novell, 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;
+
+namespace GLib
+{
+ public class GioStream : System.IO.Stream
+ {
+ object stream;
+ bool can_read;
+ bool can_seek;
+ bool can_write;
+ bool is_disposed;
+
+ public GioStream (Uri uri, System.IO.FileMode mode)
+ {
+ throw new NotImplementedException ();
+ }
+
+ public GioStream (string filename, System.IO.FileMode mode)
+ {
+ throw new NotImplementedException ();
+ }
+
+ public GioStream (InputStream stream)
+ {
+ this.stream = stream;
+ can_read = true;
+ can_seek = stream is Seekable && (stream as Seekable).CanSeek;
+ }
+
+ public GioStream (OutputStream stream)
+ {
+ this.stream = stream;
+ can_write = true;
+ can_seek = stream is Seekable && (stream as Seekable).CanSeek;
+ }
+
+ public override bool CanSeek {
+ get { return can_seek; }
+ }
+
+ public override bool CanRead {
+ get { return can_read; }
+ }
+
+ public override bool CanWrite {
+ get { return can_write; }
+ }
+
+ public override long Length {
+ get {
+ if (!CanSeek)
+ throw new NotSupportedException ("This stream doesn't support seeking");
+ if (is_disposed)
+ throw new ObjectDisposedException ("The stream is closed");
+
+ if (stream is FileInputStream) {
+ FileInfo info = (stream as FileInputStream).QueryInfo ("standard::size", null);
+ return info.Size;
+ }
+ if (stream is FileOutputStream) {
+ FileInfo info = (stream as FileOutputStream).QueryInfo ("standard::size", null);
+ return info.Size;
+ }
+ throw new NotImplementedException (String.Format ("not implemented for {0} streams", stream.GetType()));
+ }
+ }
+
+ public override long Position {
+ get {
+ if (!CanSeek)
+ throw new NotSupportedException ("This stream doesn't support seeking");
+ if (is_disposed)
+ throw new ObjectDisposedException ("The stream is closed");
+ return (stream as Seekable).Position;
+ }
+ set {
+ Seek (value, System.IO.SeekOrigin.Begin);
+ }
+ }
+
+ public override void Flush ()
+ {
+ if (is_disposed)
+ throw new ObjectDisposedException ("The stream is closed");
+ }
+
+ public override int Read (byte[] buffer, int offset, int count)
+ {
+ if (buffer == null)
+ throw new ArgumentNullException ("buffer");
+ if (offset + count - 1 > buffer.Length)
+ throw new ArgumentException ("(offset + count - 1) is greater than the length of buffer");
+ if (offset < 0)
+ throw new ArgumentOutOfRangeException ("offset");
+ if (count < 0)
+ throw new ArgumentOutOfRangeException ("count");
+ if (!CanRead)
+ throw new NotSupportedException ("The stream does not support reading");
+ if (is_disposed)
+ throw new ObjectDisposedException ("The stream is closed");
+ InputStream input_stream = stream as InputStream;
+ if (input_stream == null)
+ throw new System.Exception ("this shouldn't happen");
+
+ if (offset == 0)
+ return (int)input_stream.Read (buffer, (ulong)count, null);
+ else {
+ byte[] buf = new byte[count];
+ int ret = (int)input_stream.Read (buf, (ulong)count, null);
+ buf.CopyTo (buffer, offset);
+ return ret;
+ }
+ }
+
+ public override void Write (byte[] buffer, int offset, int count)
+ {
+ if (buffer == null)
+ throw new ArgumentNullException ("buffer");
+ if (offset + count > buffer.Length)
+ throw new ArgumentException ("(offset + count) is greater than the length of buffer");
+ if (offset < 0)
+ throw new ArgumentOutOfRangeException ("offset");
+ if (count < 0)
+ throw new ArgumentOutOfRangeException ("count");
+ if (!CanWrite)
+ throw new NotSupportedException ("The stream does not support writing");
+ if (is_disposed)
+ throw new ObjectDisposedException ("The stream is closed");
+ OutputStream output_stream = stream as OutputStream;
+ if (output_stream == null)
+ throw new System.Exception ("this shouldn't happen");
+ if (offset == 0) {
+ output_stream.Write (buffer, (ulong)count, null);
+ return;
+ } else {
+ byte[] buf = new byte[count];
+ Array.Copy (buffer, offset, buf, 0, count);
+ output_stream.Write (buf, (ulong)count, null);
+ return;
+ }
+ }
+
+ public override long Seek (long offset, System.IO.SeekOrigin origin)
+ {
+ if (!CanSeek)
+ throw new NotSupportedException ("This stream doesn't support seeking");
+ if (is_disposed)
+ throw new ObjectDisposedException ("The stream is closed");
+ Seekable seekable = stream as Seekable;
+
+ SeekType seek_type;
+ switch (origin) {
+ case System.IO.SeekOrigin.Current:
+ seek_type = SeekType.Cur;
+ break;
+ case System.IO.SeekOrigin.End:
+ seek_type = SeekType.End;
+ break;
+ case System.IO.SeekOrigin.Begin:
+ default:
+ seek_type = SeekType.Set;
+ break;
+ }
+ seekable.Seek (offset, seek_type, null);
+ return Position;
+ }
+
+ public override void SetLength (long value)
+ {
+ if (!CanSeek || !CanWrite)
+ throw new NotSupportedException ("This stream doesn't support seeking");
+ if (is_disposed)
+ throw new ObjectDisposedException ("The stream is closed");
+ throw new NotImplementedException ();
+ }
+
+ public override void Close ()
+ {
+ if (stream is InputStream)
+ (stream as InputStream).Close (null);
+ if (stream is OutputStream)
+ (stream as OutputStream).Close (null);
+ is_disposed = true;
+ }
+ }
+}
diff --git a/gio-sharp/gio/Makefile.am b/gio-sharp/gio/Makefile.am
new file mode 100644
index 0000000..6999a7c
--- /dev/null
+++ b/gio-sharp/gio/Makefile.am
@@ -0,0 +1,43 @@
+include ../../Makefile.include
+
+UNSAFE = -unsafe
+DEBUG = -debug
+
+SRCS = \
+ AssemblyInfo.cs \
+ FileFactory.cs \
+ GioStream.cs
+
+CUSTOMS =
+
+ASSEMBLIES = \
+ -pkg:glib-sharp-2.0
+
+all: gio-sharp.dll
+
+gio-api.xml: $(srcdir)/gio-api.raw $(srcdir)/Gio.metadata
+ @echo -e "\n*** Massaging the raw api into $@"
+ cp $(srcdir)/gio-api.raw gio-api.xml
+ chmod +w $(builddir)/gio-api.xml
+ gapi2-fixup --api=gio-api.xml --metadata=$(srcdir)/Gio.metadata
+
+$(top_builddir)/generator/gapi_codegen.exe:
+ $(MAKE) -C $(top_builddir)/generator gapi_codegen.exe
+
+generated/File.cs: gio-api.xml $(CUSTOMS) $(builddir)/../generator/gapi_codegen.exe
+ @echo -e "\n*** Generating C# code"
+ $(MONO) $(builddir)/../generator/gapi_codegen.exe $(GLIBSHARP_CFLAGS) --outdir=generated --customdir=$(srcdir) --generate gio-api.xml
+
+gio-sharp.dll: $(srcdir)/generated/File.cs $(SRCS)
+ @echo -e "\n*** Building $@"
+ $(CSC) -target:library -out:$@ $(UNSAFE) $(DEBUG) $(ASSEMBLIES) $(SRCS) $(srcdir)/generated/*.cs
+
+CLEANFILES = \
+ gio-sharp.dll \
+ gio-sharp.dll.mdb \
+ gio-api.xml
+
+EXTRA_DIST = \
+ $(SRCS) \
+ $(CUSTOMS) \
+ gio-api.raw
diff --git a/gio-sharp/gio/gio-api.raw b/gio-sharp/gio/gio-api.raw
new file mode 100644
index 0000000..e2c4e01
--- /dev/null
+++ b/gio-sharp/gio/gio-api.raw
@@ -0,0 +1,5078 @@
+<?xml version="1.0"?>
+<api>
+ <!--
+
+ This file was automatically generated.
+ Please DO NOT MODIFY THIS FILE, modify .metadata files instead.
+
+-->
+ <namespace name="G" library="libgio-2.0-0.dll">
+ <enum name="AppInfoCreateFlags" cname="GAppInfoCreateFlags" gtype="g_app_info_create_flags_get_type" type="flags">
+ <member cname="G_APP_INFO_CREATE_NONE" name="None" />
+ <member cname="G_APP_INFO_CREATE_NEEDS_TERMINAL" name="NeedsTerminal" value="1 << 0" />
+ <member cname="G_APP_INFO_CREATE_SUPPORTS_URIS" name="SupportsUris" value="1 << 1" />
+ </enum>
+ <enum name="AskPasswordFlags" cname="GAskPasswordFlags" gtype="g_ask_password_flags_get_type" type="flags">
+ <member cname="G_ASK_PASSWORD_NEED_PASSWORD" name="NeedPassword" value="1 << 0" />
+ <member cname="G_ASK_PASSWORD_NEED_USERNAME" name="NeedUsername" value="1 << 1" />
+ <member cname="G_ASK_PASSWORD_NEED_DOMAIN" name="NeedDomain" value="1 << 2" />
+ <member cname="G_ASK_PASSWORD_SAVING_SUPPORTED" name="SavingSupported" value="1 << 3" />
+ <member cname="G_ASK_PASSWORD_ANONYMOUS_SUPPORTED" name="AnonymousSupported" value="1 << 4" />
+ </enum>
+ <enum name="DataStreamByteOrder" cname="GDataStreamByteOrder" gtype="g_data_stream_byte_order_get_type" type="enum">
+ <member cname="G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN" name="BigEndian" />
+ <member cname="G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN" name="LittleEndian" />
+ <member cname="G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN" name="HostEndian" />
+ </enum>
+ <enum name="DataStreamNewlineType" cname="GDataStreamNewlineType" gtype="g_data_stream_newline_type_get_type" type="enum">
+ <member cname="G_DATA_STREAM_NEWLINE_TYPE_LF" name="Lf" />
+ <member cname="G_DATA_STREAM_NEWLINE_TYPE_CR" name="Cr" />
+ <member cname="G_DATA_STREAM_NEWLINE_TYPE_CR_LF" name="CrLf" />
+ <member cname="G_DATA_STREAM_NEWLINE_TYPE_ANY" name="Any" />
+ </enum>
+ <enum name="EmblemOrigin" cname="GEmblemOrigin" gtype="g_emblem_origin_get_type" type="enum">
+ <member cname="G_EMBLEM_ORIGIN_UNKNOWN" name="Unknown" />
+ <member cname="G_EMBLEM_ORIGIN_DEVICE" name="Device" />
+ <member cname="G_EMBLEM_ORIGIN_LIVEMETADATA" name="Livemetadata" />
+ <member cname="G_EMBLEM_ORIGIN_TAG" name="Tag" />
+ </enum>
+ <enum name="FileAttributeInfoFlags" cname="GFileAttributeInfoFlags" gtype="g_file_attribute_info_flags_get_type" type="flags">
+ <member cname="G_FILE_ATTRIBUTE_INFO_NONE" name="None" />
+ <member cname="G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE" name="CopyWithFile" value="1 << 0" />
+ <member cname="G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED" name="CopyWhenMoved" value="1 << 1" />
+ </enum>
+ <enum name="FileAttributeStatus" cname="GFileAttributeStatus" gtype="g_file_attribute_status_get_type" type="enum">
+ <member cname="G_FILE_ATTRIBUTE_STATUS_UNSET" name="Unset" />
+ <member cname="G_FILE_ATTRIBUTE_STATUS_SET" name="Set" />
+ <member cname="G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING" name="ErrorSetting" />
+ </enum>
+ <enum name="FileAttributeType" cname="GFileAttributeType" gtype="g_file_attribute_type_get_type" type="enum">
+ <member cname="G_FILE_ATTRIBUTE_TYPE_INVALID" name="Invalid" />
+ <member cname="G_FILE_ATTRIBUTE_TYPE_STRING" name="String" />
+ <member cname="G_FILE_ATTRIBUTE_TYPE_BYTE_STRING" name="ByteString" />
+ <member cname="G_FILE_ATTRIBUTE_TYPE_BOOLEAN" name="Boolean" />
+ <member cname="G_FILE_ATTRIBUTE_TYPE_UINT32" name="Uint32" />
+ <member cname="G_FILE_ATTRIBUTE_TYPE_INT32" name="Int32" />
+ <member cname="G_FILE_ATTRIBUTE_TYPE_UINT64" name="Uint64" />
+ <member cname="G_FILE_ATTRIBUTE_TYPE_INT64" name="Int64" />
+ <member cname="G_FILE_ATTRIBUTE_TYPE_OBJECT" name="Object" />
+ </enum>
+ <enum name="FileCopyFlags" cname="GFileCopyFlags" gtype="g_file_copy_flags_get_type" type="flags">
+ <member cname="G_FILE_COPY_NONE" name="None" />
+ <member cname="G_FILE_COPY_OVERWRITE" name="Overwrite" value="1 << 0" />
+ <member cname="G_FILE_COPY_BACKUP" name="Backup" value="1 << 1" />
+ <member cname="G_FILE_COPY_NOFOLLOW_SYMLINKS" name="NofollowSymlinks" value="1 << 2" />
+ <member cname="G_FILE_COPY_ALL_METADATA" name="AllMetadata" value="1 << 3" />
+ <member cname="G_FILE_COPY_NO_FALLBACK_FOR_MOVE" name="NoFallbackForMove" value="1 << 4" />
+ </enum>
+ <enum name="FileCreateFlags" cname="GFileCreateFlags" gtype="g_file_create_flags_get_type" type="flags">
+ <member cname="G_FILE_CREATE_NONE" name="None" />
+ <member cname="G_FILE_CREATE_PRIVATE" name="Private" value="1 << 0" />
+ </enum>
+ <enum name="FileMonitorEvent" cname="GFileMonitorEvent" gtype="g_file_monitor_event_get_type" type="enum">
+ <member cname="G_FILE_MONITOR_EVENT_CHANGED" name="Changed" />
+ <member cname="G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT" name="ChangesDoneHint" />
+ <member cname="G_FILE_MONITOR_EVENT_DELETED" name="Deleted" />
+ <member cname="G_FILE_MONITOR_EVENT_CREATED" name="Created" />
+ <member cname="G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED" name="AttributeChanged" />
+ <member cname="G_FILE_MONITOR_EVENT_PRE_UNMOUNT" name="PreUnmount" />
+ <member cname="G_FILE_MONITOR_EVENT_UNMOUNTED" name="Unmounted" />
+ </enum>
+ <enum name="FileMonitorFlags" cname="GFileMonitorFlags" gtype="g_file_monitor_flags_get_type" type="flags">
+ <member cname="G_FILE_MONITOR_NONE" name="None" />
+ <member cname="G_FILE_MONITOR_WATCH_MOUNTS" name="WatchMounts" value="1 << 0" />
+ </enum>
+ <enum name="FileQueryInfoFlags" cname="GFileQueryInfoFlags" gtype="g_file_query_info_flags_get_type" type="flags">
+ <member cname="G_FILE_QUERY_INFO_NONE" name="None" />
+ <member cname="G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS" name="NofollowSymlinks" value="1 << 0" />
+ </enum>
+ <enum name="FileType" cname="GFileType" gtype="g_file_type_get_type" type="enum">
+ <member cname="G_FILE_TYPE_UNKNOWN" name="Unknown" />
+ <member cname="G_FILE_TYPE_REGULAR" name="Regular" />
+ <member cname="G_FILE_TYPE_DIRECTORY" name="Directory" />
+ <member cname="G_FILE_TYPE_SYMBOLIC_LINK" name="SymbolicLink" />
+ <member cname="G_FILE_TYPE_SPECIAL" name="Special" />
+ <member cname="G_FILE_TYPE_SHORTCUT" name="Shortcut" />
+ <member cname="G_FILE_TYPE_MOUNTABLE" name="Mountable" />
+ </enum>
+ <enum name="FilesystemPreviewType" cname="GFilesystemPreviewType" gtype="g_filesystem_preview_type_get_type" type="enum">
+ <member cname="G_FILESYSTEM_PREVIEW_TYPE_IF_ALWAYS" name="IfAlways" />
+ <member cname="G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL" name="IfLocal" />
+ <member cname="G_FILESYSTEM_PREVIEW_TYPE_NEVER" name="Never" />
+ </enum>
+ <enum name="IOErrorEnum" cname="GIOErrorEnum" type="enum">
+ <member cname="G_IO_ERROR_FAILED" name="Failed" />
+ <member cname="G_IO_ERROR_NOT_FOUND" name="NotFound" />
+ <member cname="G_IO_ERROR_EXISTS" name="Exists" />
+ <member cname="G_IO_ERROR_IS_DIRECTORY" name="IsDirectory" />
+ <member cname="G_IO_ERROR_NOT_DIRECTORY" name="NotDirectory" />
+ <member cname="G_IO_ERROR_NOT_EMPTY" name="NotEmpty" />
+ <member cname="G_IO_ERROR_NOT_REGULAR_FILE" name="NotRegularFile" />
+ <member cname="G_IO_ERROR_NOT_SYMBOLIC_LINK" name="NotSymbolicLink" />
+ <member cname="G_IO_ERROR_NOT_MOUNTABLE_FILE" name="NotMountableFile" />
+ <member cname="G_IO_ERROR_FILENAME_TOO_LONG" name="FilenameTooLong" />
+ <member cname="G_IO_ERROR_INVALID_FILENAME" name="InvalidFilename" />
+ <member cname="G_IO_ERROR_TOO_MANY_LINKS" name="TooManyLinks" />
+ <member cname="G_IO_ERROR_NO_SPACE" name="NoSpace" />
+ <member cname="G_IO_ERROR_INVALID_ARGUMENT" name="InvalidArgument" />
+ <member cname="G_IO_ERROR_PERMISSION_DENIED" name="PermissionDenied" />
+ <member cname="G_IO_ERROR_NOT_SUPPORTED" name="NotSupported" />
+ <member cname="G_IO_ERROR_NOT_MOUNTED" name="NotMounted" />
+ <member cname="G_IO_ERROR_ALREADY_MOUNTED" name="AlreadyMounted" />
+ <member cname="G_IO_ERROR_CLOSED" name="Closed" />
+ <member cname="G_IO_ERROR_CANCELLED" name="Cancelled" />
+ <member cname="G_IO_ERROR_PENDING" name="Pending" />
+ <member cname="G_IO_ERROR_READ_ONLY" name="ReadOnly" />
+ <member cname="G_IO_ERROR_CANT_CREATE_BACKUP" name="CantCreateBackup" />
+ <member cname="G_IO_ERROR_WRONG_ETAG" name="WrongEtag" />
+ <member cname="G_IO_ERROR_TIMED_OUT" name="TimedOut" />
+ <member cname="G_IO_ERROR_WOULD_RECURSE" name="WouldRecurse" />
+ <member cname="G_IO_ERROR_BUSY" name="Busy" />
+ <member cname="G_IO_ERROR_WOULD_BLOCK" name="WouldBlock" />
+ <member cname="G_IO_ERROR_HOST_NOT_FOUND" name="HostNotFound" />
+ <member cname="G_IO_ERROR_WOULD_MERGE" name="WouldMerge" />
+ <member cname="G_IO_ERROR_FAILED_HANDLED" name="FailedHandled" />
+ </enum>
+ <enum name="MountMountFlags" cname="GMountMountFlags" gtype="g_mount_mount_flags_get_type" type="enum">
+ <member cname="G_MOUNT_MOUNT_NONE" name="None" />
+ </enum>
+ <enum name="MountOperationResult" cname="GMountOperationResult" gtype="g_mount_operation_result_get_type" type="enum">
+ <member cname="G_MOUNT_OPERATION_HANDLED" name="Handled" />
+ <member cname="G_MOUNT_OPERATION_ABORTED" name="Aborted" />
+ <member cname="G_MOUNT_OPERATION_UNHANDLED" name="Unhandled" />
+ </enum>
+ <enum name="MountUnmountFlags" cname="GMountUnmountFlags" gtype="g_mount_unmount_flags_get_type" type="flags">
+ <member cname="G_MOUNT_UNMOUNT_NONE" name="None" />
+ <member cname="G_MOUNT_UNMOUNT_FORCE" name="Force" value="1 << 0" />
+ </enum>
+ <enum name="OutputStreamSpliceFlags" cname="GOutputStreamSpliceFlags" gtype="g_output_stream_splice_flags_get_type" type="flags">
+ <member cname="G_OUTPUT_STREAM_SPLICE_NONE" name="None" />
+ <member cname="G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE" name="CloseSource" value="1 << 0" />
+ <member cname="G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET" name="CloseTarget" value="1 << 1" />
+ </enum>
+ <enum name="PasswordSave" cname="GPasswordSave" gtype="g_password_save_get_type" type="enum">
+ <member cname="G_PASSWORD_SAVE_NEVER" name="Never" />
+ <member cname="G_PASSWORD_SAVE_FOR_SESSION" name="ForSession" />
+ <member cname="G_PASSWORD_SAVE_PERMANENTLY" name="Permanently" />
+ </enum>
+ <callback name="AsyncReadyCallback" cname="GAsyncReadyCallback">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GObject*" name="source_object" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </callback>
+ <callback name="FileProgressCallback" cname="GFileProgressCallback">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="goffset" name="current_num_bytes" />
+ <parameter type="goffset" name="total_num_bytes" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </callback>
+ <callback name="FileReadMoreCallback" cname="GFileReadMoreCallback">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="file_contents" />
+ <parameter type="goffset" name="file_size" />
+ <parameter type="gpointer" name="callback_data" />
+ </parameters>
+ </callback>
+ <callback name="IOSchedulerJobFunc" cname="GIOSchedulerJobFunc">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GIOSchedulerJob*" name="job" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </callback>
+ <callback name="ReallocFunc" cname="GReallocFunc">
+ <return-type type="gpointer" />
+ <parameters>
+ <parameter type="gpointer" name="data" />
+ <parameter type="gsize" name="size" />
+ </parameters>
+ </callback>
+ <callback name="SimpleAsyncThreadFunc" cname="GSimpleAsyncThreadFunc">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GSimpleAsyncResult*" name="res" />
+ <parameter type="GObject*" name="object" />
+ <parameter type="GCancellable*" name="cancellable" />
+ </parameters>
+ </callback>
+ <interface name="AppInfo" cname="GAppInfo">
+ <virtual_method name="Dup" cname="dup">
+ <return-type type="GAppInfo*" />
+ <parameters>
+ <parameter type="GAppInfo*" name="appinfo" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Equal" cname="equal">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAppInfo*" name="appinfo1" />
+ <parameter type="GAppInfo*" name="appinfo2" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetIcon" cname="get_icon">
+ <return-type type="GIcon*" />
+ <parameters>
+ <parameter type="GAppInfo*" name="appinfo" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Launch" cname="launch">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAppInfo*" name="appinfo" />
+ <parameter type="GList*" name="filenames" />
+ <parameter type="GAppLaunchContext*" name="launch_context" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="SupportsUris" cname="supports_uris">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAppInfo*" name="appinfo" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="SupportsFiles" cname="supports_files">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAppInfo*" name="appinfo" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="LaunchUris" cname="launch_uris">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAppInfo*" name="appinfo" />
+ <parameter type="GList*" name="uris" />
+ <parameter type="GAppLaunchContext*" name="launch_context" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="ShouldShow" cname="should_show">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAppInfo*" name="appinfo" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="SetAsDefaultForType" cname="set_as_default_for_type">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAppInfo*" name="appinfo" />
+ <parameter type="const-char*" name="content_type" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="SetAsDefaultForExtension" cname="set_as_default_for_extension">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAppInfo*" name="appinfo" />
+ <parameter type="const-char*" name="extension" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="AddSupportsType" cname="add_supports_type">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAppInfo*" name="appinfo" />
+ <parameter type="const-char*" name="content_type" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanRemoveSupportsType" cname="can_remove_supports_type">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAppInfo*" name="appinfo" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="RemoveSupportsType" cname="remove_supports_type">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAppInfo*" name="appinfo" />
+ <parameter type="const-char*" name="content_type" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <method name="AddSupportsType" cname="g_app_info_add_supports_type">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="content_type" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="CanRemoveSupportsType" cname="g_app_info_can_remove_supports_type">
+ <return-type type="gboolean" />
+ </method>
+ <method name="CreateFromCommandline" cname="g_app_info_create_from_commandline" shared="true">
+ <return-type type="GAppInfo*" />
+ <parameters>
+ <parameter type="const-char*" name="commandline" />
+ <parameter type="const-char*" name="application_name" />
+ <parameter type="GAppInfoCreateFlags" name="flags" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Dup" cname="g_app_info_dup">
+ <return-type type="GAppInfo*" />
+ </method>
+ <method name="Equal" cname="g_app_info_equal">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAppInfo*" name="appinfo2" />
+ </parameters>
+ </method>
+ <method name="GetAll" cname="g_app_info_get_all" shared="true">
+ <return-type type="GList*" />
+ </method>
+ <method name="GetAllForType" cname="g_app_info_get_all_for_type" shared="true">
+ <return-type type="GList*" />
+ <parameters>
+ <parameter type="const-char*" name="content_type" />
+ </parameters>
+ </method>
+ <method name="GetDefaultForType" cname="g_app_info_get_default_for_type" shared="true">
+ <return-type type="GAppInfo*" />
+ <parameters>
+ <parameter type="const-char*" name="content_type" />
+ <parameter type="gboolean" name="must_support_uris" />
+ </parameters>
+ </method>
+ <method name="GetDefaultForUriScheme" cname="g_app_info_get_default_for_uri_scheme" shared="true">
+ <return-type type="GAppInfo*" />
+ <parameters>
+ <parameter type="const-char*" name="uri_scheme" />
+ </parameters>
+ </method>
+ <method name="GetDescription" cname="g_app_info_get_description">
+ <return-type type="const-char*" />
+ </method>
+ <method name="GetExecutable" cname="g_app_info_get_executable">
+ <return-type type="const-char*" />
+ </method>
+ <method name="GetIcon" cname="g_app_info_get_icon">
+ <return-type type="GIcon*" />
+ </method>
+ <method name="GetId" cname="g_app_info_get_id">
+ <return-type type="const-char*" />
+ </method>
+ <method name="GetName" cname="g_app_info_get_name">
+ <return-type type="const-char*" />
+ </method>
+ <method name="GetType" cname="g_app_info_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="Launch" cname="g_app_info_launch">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GList*" name="files" />
+ <parameter type="GAppLaunchContext*" name="launch_context" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="LaunchDefaultForUri" cname="g_app_info_launch_default_for_uri" shared="true">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="uri" />
+ <parameter type="GAppLaunchContext*" name="launch_context" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="LaunchUris" cname="g_app_info_launch_uris">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GList*" name="uris" />
+ <parameter type="GAppLaunchContext*" name="launch_context" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="RemoveSupportsType" cname="g_app_info_remove_supports_type">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="content_type" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetAsDefaultForExtension" cname="g_app_info_set_as_default_for_extension">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="extension" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetAsDefaultForType" cname="g_app_info_set_as_default_for_type">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="content_type" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ShouldShow" cname="g_app_info_should_show">
+ <return-type type="gboolean" />
+ </method>
+ <method name="SupportsFiles" cname="g_app_info_supports_files">
+ <return-type type="gboolean" />
+ </method>
+ <method name="SupportsUris" cname="g_app_info_supports_uris">
+ <return-type type="gboolean" />
+ </method>
+ </interface>
+ <interface name="AsyncResult" cname="GAsyncResult">
+ <virtual_method name="GetUserData" cname="get_user_data">
+ <return-type type="gpointer" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="async_result" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetSourceObject" cname="get_source_object">
+ <return-type type="GObject*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="async_result" />
+ </parameters>
+ </virtual_method>
+ <method name="GetSourceObject" cname="g_async_result_get_source_object">
+ <return-type type="GObject*" />
+ </method>
+ <method name="GetType" cname="g_async_result_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="GetUserData" cname="g_async_result_get_user_data">
+ <return-type type="gpointer" />
+ </method>
+ </interface>
+ <interface name="DesktopAppInfoLookup" cname="GDesktopAppInfoLookup">
+ <virtual_method name="GetDefaultForUriScheme" cname="get_default_for_uri_scheme">
+ <return-type type="GAppInfo*" />
+ <parameters>
+ <parameter type="GDesktopAppInfoLookup*" name="lookup" />
+ <parameter type="const-char*" name="uri_scheme" />
+ </parameters>
+ </virtual_method>
+ <method name="GetDefaultForUriScheme" cname="g_desktop_app_info_lookup_get_default_for_uri_scheme">
+ <return-type type="GAppInfo*" />
+ <parameters>
+ <parameter type="const-char*" name="uri_scheme" />
+ </parameters>
+ </method>
+ <method name="GetType" cname="g_desktop_app_info_lookup_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ </interface>
+ <interface name="Drive" cname="GDrive">
+ <signal name="Changed" cname="changed" when="LAST" field_name="changed">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </signal>
+ <signal name="Disconnected" cname="disconnected" when="LAST" field_name="disconnected">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </signal>
+ <signal name="EjectButton" cname="eject-button" when="LAST" field_name="eject_button">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </signal>
+ <virtual_method name="GetName" cname="get_name">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetIcon" cname="get_icon">
+ <return-type type="GIcon*" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="HasVolumes" cname="has_volumes">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetVolumes" cname="get_volumes">
+ <return-type type="GList*" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="IsMediaRemovable" cname="is_media_removable">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="HasMedia" cname="has_media">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="IsMediaCheckAutomatic" cname="is_media_check_automatic">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanEject" cname="can_eject">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanPollForMedia" cname="can_poll_for_media">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Eject" cname="eject">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="EjectFinish" cname="eject_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="PollForMedia" cname="poll_for_media">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="PollForMediaFinish" cname="poll_for_media_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetIdentifier" cname="get_identifier">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ <parameter type="const-char*" name="kind" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="EnumerateIdentifiers" cname="enumerate_identifiers">
+ <return-type type="char**" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </virtual_method>
+ <method name="CanEject" cname="g_drive_can_eject">
+ <return-type type="gboolean" />
+ </method>
+ <method name="CanPollForMedia" cname="g_drive_can_poll_for_media">
+ <return-type type="gboolean" />
+ </method>
+ <method name="Eject" cname="g_drive_eject">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="EjectFinish" cname="g_drive_eject_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="EnumerateIdentifiers" cname="g_drive_enumerate_identifiers">
+ <return-type type="char**" />
+ </method>
+ <method name="GetIcon" cname="g_drive_get_icon">
+ <return-type type="GIcon*" />
+ </method>
+ <method name="GetIdentifier" cname="g_drive_get_identifier">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="const-char*" name="kind" />
+ </parameters>
+ </method>
+ <method name="GetName" cname="g_drive_get_name">
+ <return-type type="char*" />
+ </method>
+ <method name="GetType" cname="g_drive_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="GetVolumes" cname="g_drive_get_volumes">
+ <return-type type="GList*" />
+ </method>
+ <method name="HasMedia" cname="g_drive_has_media">
+ <return-type type="gboolean" />
+ </method>
+ <method name="HasVolumes" cname="g_drive_has_volumes">
+ <return-type type="gboolean" />
+ </method>
+ <method name="IsMediaCheckAutomatic" cname="g_drive_is_media_check_automatic">
+ <return-type type="gboolean" />
+ </method>
+ <method name="IsMediaRemovable" cname="g_drive_is_media_removable">
+ <return-type type="gboolean" />
+ </method>
+ <method name="PollForMedia" cname="g_drive_poll_for_media">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="PollForMediaFinish" cname="g_drive_poll_for_media_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ </interface>
+ <interface name="File" cname="GFile">
+ <virtual_method name="Dup" cname="dup">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Hash" cname="hash">
+ <return-type type="guint" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Equal" cname="equal">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file1" />
+ <parameter type="GFile*" name="file2" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="IsNative" cname="is_native">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="HasUriScheme" cname="has_uri_scheme">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="uri_scheme" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetUriScheme" cname="get_uri_scheme">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetBasename" cname="get_basename">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetPath" cname="get_path">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetUri" cname="get_uri">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetParseName" cname="get_parse_name">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetParent" cname="get_parent">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="PrefixMatches" cname="prefix_matches">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="prefix" />
+ <parameter type="GFile*" name="file" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetRelativePath" cname="get_relative_path">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GFile*" name="parent" />
+ <parameter type="GFile*" name="descendant" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="ResolveRelativePath" cname="resolve_relative_path">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="relative_path" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetChildForDisplayName" cname="get_child_for_display_name">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="display_name" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="EnumerateChildren" cname="enumerate_children">
+ <return-type type="GFileEnumerator*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="attributes" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="EnumerateChildrenAsync" cname="enumerate_children_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="attributes" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="EnumerateChildrenFinish" cname="enumerate_children_finish">
+ <return-type type="GFileEnumerator*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QueryInfo" cname="query_info">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="attributes" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QueryInfoAsync" cname="query_info_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="attributes" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QueryInfoFinish" cname="query_info_finish">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QueryFilesystemInfo" cname="query_filesystem_info">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="attributes" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QueryFilesystemInfoAsync" cname="query_filesystem_info_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="attributes" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QueryFilesystemInfoFinish" cname="query_filesystem_info_finish">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="FindEnclosingMount" cname="find_enclosing_mount">
+ <return-type type="GMount*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="FindEnclosingMountAsync" cname="find_enclosing_mount_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="FindEnclosingMountFinish" cname="find_enclosing_mount_finish">
+ <return-type type="GMount*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="SetDisplayName" cname="set_display_name">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="display_name" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="SetDisplayNameAsync" cname="set_display_name_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="display_name" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="SetDisplayNameFinish" cname="set_display_name_finish">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QuerySettableAttributes" cname="query_settable_attributes">
+ <return-type type="GFileAttributeInfoList*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QuerySettableAttributesAsync" cname="_query_settable_attributes_async">
+ <return-type type="void" />
+ </virtual_method>
+ <virtual_method name="QuerySettableAttributesFinish" cname="_query_settable_attributes_finish">
+ <return-type type="void" />
+ </virtual_method>
+ <virtual_method name="QueryWritableNamespaces" cname="query_writable_namespaces">
+ <return-type type="GFileAttributeInfoList*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QueryWritableNamespacesAsync" cname="_query_writable_namespaces_async">
+ <return-type type="void" />
+ </virtual_method>
+ <virtual_method name="QueryWritableNamespacesFinish" cname="_query_writable_namespaces_finish">
+ <return-type type="void" />
+ </virtual_method>
+ <virtual_method name="SetAttribute" cname="set_attribute">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="GFileAttributeType" name="type" />
+ <parameter type="gpointer" name="value_p" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="SetAttributesFromInfo" cname="set_attributes_from_info">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GFileInfo*" name="info" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="SetAttributesAsync" cname="set_attributes_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GFileInfo*" name="info" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="SetAttributesFinish" cname="set_attributes_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GFileInfo**" name="info" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="ReadFn" cname="read_fn">
+ <return-type type="GFileInputStream*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="ReadAsync" cname="read_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="ReadFinish" cname="read_finish">
+ <return-type type="GFileInputStream*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="AppendTo" cname="append_to">
+ <return-type type="GFileOutputStream*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="AppendToAsync" cname="append_to_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="AppendToFinish" cname="append_to_finish">
+ <return-type type="GFileOutputStream*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Create" cname="create">
+ <return-type type="GFileOutputStream*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CreateAsync" cname="create_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CreateFinish" cname="create_finish">
+ <return-type type="GFileOutputStream*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Replace" cname="replace">
+ <return-type type="GFileOutputStream*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="etag" />
+ <parameter type="gboolean" name="make_backup" />
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="ReplaceAsync" cname="replace_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="etag" />
+ <parameter type="gboolean" name="make_backup" />
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="ReplaceFinish" cname="replace_finish">
+ <return-type type="GFileOutputStream*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="DeleteFile" cname="delete_file">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="DeleteFileAsync" cname="_delete_file_async">
+ <return-type type="void" />
+ </virtual_method>
+ <virtual_method name="DeleteFileFinish" cname="_delete_file_finish">
+ <return-type type="void" />
+ </virtual_method>
+ <virtual_method name="Trash" cname="trash">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="TrashAsync" cname="_trash_async">
+ <return-type type="void" />
+ </virtual_method>
+ <virtual_method name="TrashFinish" cname="_trash_finish">
+ <return-type type="void" />
+ </virtual_method>
+ <virtual_method name="MakeDirectory" cname="make_directory">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="MakeDirectoryAsync" cname="_make_directory_async">
+ <return-type type="void" />
+ </virtual_method>
+ <virtual_method name="MakeDirectoryFinish" cname="_make_directory_finish">
+ <return-type type="void" />
+ </virtual_method>
+ <virtual_method name="MakeSymbolicLink" cname="make_symbolic_link">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="symlink_value" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="MakeSymbolicLinkAsync" cname="_make_symbolic_link_async">
+ <return-type type="void" />
+ </virtual_method>
+ <virtual_method name="MakeSymbolicLinkFinish" cname="_make_symbolic_link_finish">
+ <return-type type="void" />
+ </virtual_method>
+ <virtual_method name="Copy" cname="copy">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="source" />
+ <parameter type="GFile*" name="destination" />
+ <parameter type="GFileCopyFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GFileProgressCallback" name="progress_callback" />
+ <parameter type="gpointer" name="progress_callback_data" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CopyAsync" cname="copy_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="source" />
+ <parameter type="GFile*" name="destination" />
+ <parameter type="GFileCopyFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GFileProgressCallback" name="progress_callback" />
+ <parameter type="gpointer" name="progress_callback_data" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CopyFinish" cname="copy_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Move" cname="move">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="source" />
+ <parameter type="GFile*" name="destination" />
+ <parameter type="GFileCopyFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GFileProgressCallback" name="progress_callback" />
+ <parameter type="gpointer" name="progress_callback_data" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="MoveAsync" cname="_move_async">
+ <return-type type="void" />
+ </virtual_method>
+ <virtual_method name="MoveFinish" cname="_move_finish">
+ <return-type type="void" />
+ </virtual_method>
+ <virtual_method name="MountMountable" cname="mount_mountable">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GMountMountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="MountMountableFinish" cname="mount_mountable_finish">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="UnmountMountable" cname="unmount_mountable">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="UnmountMountableFinish" cname="unmount_mountable_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="EjectMountable" cname="eject_mountable">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="EjectMountableFinish" cname="eject_mountable_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="MountEnclosingVolume" cname="mount_enclosing_volume">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="location" />
+ <parameter type="GMountMountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="MountEnclosingVolumeFinish" cname="mount_enclosing_volume_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="location" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="MonitorDir" cname="monitor_dir">
+ <return-type type="GFileMonitor*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GFileMonitorFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="MonitorFile" cname="monitor_file">
+ <return-type type="GFileMonitor*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GFileMonitorFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <method name="AppendTo" cname="g_file_append_to">
+ <return-type type="GFileOutputStream*" />
+ <parameters>
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="AppendToAsync" cname="g_file_append_to_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="AppendToFinish" cname="g_file_append_to_finish">
+ <return-type type="GFileOutputStream*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Copy" cname="g_file_copy">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="destination" />
+ <parameter type="GFileCopyFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GFileProgressCallback" name="progress_callback" />
+ <parameter type="gpointer" name="progress_callback_data" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="CopyAsync" cname="g_file_copy_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="destination" />
+ <parameter type="GFileCopyFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GFileProgressCallback" name="progress_callback" />
+ <parameter type="gpointer" name="progress_callback_data" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="CopyAttributes" cname="g_file_copy_attributes">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="destination" />
+ <parameter type="GFileCopyFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="CopyFinish" cname="g_file_copy_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Create" cname="g_file_create">
+ <return-type type="GFileOutputStream*" />
+ <parameters>
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="CreateAsync" cname="g_file_create_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="CreateFinish" cname="g_file_create_finish">
+ <return-type type="GFileOutputStream*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Delete" cname="g_file_delete">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Dup" cname="g_file_dup">
+ <return-type type="GFile*" />
+ </method>
+ <method name="EjectMountable" cname="g_file_eject_mountable">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="EjectMountableFinish" cname="g_file_eject_mountable_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="EnumerateChildren" cname="g_file_enumerate_children">
+ <return-type type="GFileEnumerator*" />
+ <parameters>
+ <parameter type="const-char*" name="attributes" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="EnumerateChildrenAsync" cname="g_file_enumerate_children_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="attributes" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="EnumerateChildrenFinish" cname="g_file_enumerate_children_finish">
+ <return-type type="GFileEnumerator*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Equal" cname="g_file_equal">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file2" />
+ </parameters>
+ </method>
+ <method name="FindEnclosingMount" cname="g_file_find_enclosing_mount">
+ <return-type type="GMount*" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="FindEnclosingMountAsync" cname="g_file_find_enclosing_mount_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="FindEnclosingMountFinish" cname="g_file_find_enclosing_mount_finish">
+ <return-type type="GMount*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="GetBasename" cname="g_file_get_basename">
+ <return-type type="char*" />
+ </method>
+ <method name="GetChild" cname="g_file_get_child">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="const-char*" name="name" />
+ </parameters>
+ </method>
+ <method name="GetChildForDisplayName" cname="g_file_get_child_for_display_name">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="const-char*" name="display_name" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="GetParent" cname="g_file_get_parent">
+ <return-type type="GFile*" />
+ </method>
+ <method name="GetParseName" cname="g_file_get_parse_name">
+ <return-type type="char*" />
+ </method>
+ <method name="GetPath" cname="g_file_get_path">
+ <return-type type="char*" />
+ </method>
+ <method name="GetRelativePath" cname="g_file_get_relative_path">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GFile*" name="descendant" />
+ </parameters>
+ </method>
+ <method name="GetType" cname="g_file_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="GetUri" cname="g_file_get_uri">
+ <return-type type="char*" />
+ </method>
+ <method name="GetUriScheme" cname="g_file_get_uri_scheme">
+ <return-type type="char*" />
+ </method>
+ <method name="HasPrefix" cname="g_file_has_prefix">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="prefix" />
+ </parameters>
+ </method>
+ <method name="HasUriScheme" cname="g_file_has_uri_scheme">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="uri_scheme" />
+ </parameters>
+ </method>
+ <method name="Hash" cname="g_file_hash" shared="true">
+ <return-type type="guint" />
+ <parameters>
+ <parameter type="gconstpointer" name="file" />
+ </parameters>
+ </method>
+ <method name="IsNative" cname="g_file_is_native">
+ <return-type type="gboolean" />
+ </method>
+ <method name="LoadContents" cname="g_file_load_contents">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="char**" name="contents" />
+ <parameter type="gsize*" name="length" />
+ <parameter type="char**" name="etag_out" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="LoadContentsAsync" cname="g_file_load_contents_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="LoadContentsFinish" cname="g_file_load_contents_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="char**" name="contents" />
+ <parameter type="gsize*" name="length" />
+ <parameter type="char**" name="etag_out" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="LoadPartialContentsAsync" cname="g_file_load_partial_contents_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GFileReadMoreCallback" name="read_more_callback" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="LoadPartialContentsFinish" cname="g_file_load_partial_contents_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="char**" name="contents" />
+ <parameter type="gsize*" name="length" />
+ <parameter type="char**" name="etag_out" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="MakeDirectory" cname="g_file_make_directory">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="MakeDirectoryWithParents" cname="g_file_make_directory_with_parents">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="MakeSymbolicLink" cname="g_file_make_symbolic_link">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="symlink_value" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Monitor" cname="g_file_monitor">
+ <return-type type="GFileMonitor*" />
+ <parameters>
+ <parameter type="GFileMonitorFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="MountEnclosingVolume" cname="g_file_mount_enclosing_volume">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountMountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="MountEnclosingVolumeFinish" cname="g_file_mount_enclosing_volume_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="MountMountable" cname="g_file_mount_mountable">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountMountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="MountMountableFinish" cname="g_file_mount_mountable_finish">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Move" cname="g_file_move">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="destination" />
+ <parameter type="GFileCopyFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GFileProgressCallback" name="progress_callback" />
+ <parameter type="gpointer" name="progress_callback_data" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <constructor cname="g_file_new_for_commandline_arg">
+ <parameters>
+ <parameter type="const-char*" name="arg" />
+ </parameters>
+ </constructor>
+ <constructor cname="g_file_new_for_path">
+ <parameters>
+ <parameter type="const-char*" name="path" />
+ </parameters>
+ </constructor>
+ <constructor cname="g_file_new_for_uri">
+ <parameters>
+ <parameter type="const-char*" name="uri" />
+ </parameters>
+ </constructor>
+ <method name="ParseName" cname="g_file_parse_name" shared="true">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="const-char*" name="parse_name" />
+ </parameters>
+ </method>
+ <method name="QueryDefaultHandler" cname="g_file_query_default_handler">
+ <return-type type="GAppInfo*" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="QueryExists" cname="g_file_query_exists">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ </parameters>
+ </method>
+ <method name="QueryFileType" cname="g_file_query_file_type">
+ <return-type type="GFileType" />
+ <parameters>
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ </parameters>
+ </method>
+ <method name="QueryFilesystemInfo" cname="g_file_query_filesystem_info">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="const-char*" name="attributes" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="QueryFilesystemInfoAsync" cname="g_file_query_filesystem_info_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="attributes" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="QueryFilesystemInfoFinish" cname="g_file_query_filesystem_info_finish">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="QueryInfo" cname="g_file_query_info">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="const-char*" name="attributes" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="QueryInfoAsync" cname="g_file_query_info_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="attributes" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="QueryInfoFinish" cname="g_file_query_info_finish">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="QuerySettableAttributes" cname="g_file_query_settable_attributes">
+ <return-type type="GFileAttributeInfoList*" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="QueryWritableNamespaces" cname="g_file_query_writable_namespaces">
+ <return-type type="GFileAttributeInfoList*" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Read" cname="g_file_read">
+ <return-type type="GFileInputStream*" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ReadAsync" cname="g_file_read_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="ReadFinish" cname="g_file_read_finish">
+ <return-type type="GFileInputStream*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Replace" cname="g_file_replace">
+ <return-type type="GFileOutputStream*" />
+ <parameters>
+ <parameter type="const-char*" name="etag" />
+ <parameter type="gboolean" name="make_backup" />
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ReplaceAsync" cname="g_file_replace_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="etag" />
+ <parameter type="gboolean" name="make_backup" />
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="ReplaceContents" cname="g_file_replace_contents">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="contents" />
+ <parameter type="gsize" name="length" />
+ <parameter type="const-char*" name="etag" />
+ <parameter type="gboolean" name="make_backup" />
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="char**" name="new_etag" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ReplaceContentsAsync" cname="g_file_replace_contents_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="contents" />
+ <parameter type="gsize" name="length" />
+ <parameter type="const-char*" name="etag" />
+ <parameter type="gboolean" name="make_backup" />
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="ReplaceContentsFinish" cname="g_file_replace_contents_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="char**" name="new_etag" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ReplaceFinish" cname="g_file_replace_finish">
+ <return-type type="GFileOutputStream*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ResolveRelativePath" cname="g_file_resolve_relative_path">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="const-char*" name="relative_path" />
+ </parameters>
+ </method>
+ <method name="SetAttribute" cname="g_file_set_attribute">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="GFileAttributeType" name="type" />
+ <parameter type="gpointer" name="value_p" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetAttributeByteString" cname="g_file_set_attribute_byte_string">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="const-char*" name="value" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetAttributeInt32" cname="g_file_set_attribute_int32">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="gint32" name="value" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetAttributeInt64" cname="g_file_set_attribute_int64">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="gint64" name="value" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetAttributeString" cname="g_file_set_attribute_string">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="const-char*" name="value" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetAttributeUint32" cname="g_file_set_attribute_uint32">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="guint32" name="value" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetAttributeUint64" cname="g_file_set_attribute_uint64">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="guint64" name="value" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetAttributesAsync" cname="g_file_set_attributes_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFileInfo*" name="info" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="SetAttributesFinish" cname="g_file_set_attributes_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GFileInfo**" name="info" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetAttributesFromInfo" cname="g_file_set_attributes_from_info">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFileInfo*" name="info" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetDisplayName" cname="g_file_set_display_name">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="const-char*" name="display_name" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetDisplayNameAsync" cname="g_file_set_display_name_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="display_name" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="SetDisplayNameFinish" cname="g_file_set_display_name_finish">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Trash" cname="g_file_trash">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="UnmountMountable" cname="g_file_unmount_mountable">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="UnmountMountableFinish" cname="g_file_unmount_mountable_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ </interface>
+ <interface name="Icon" cname="GIcon">
+ <virtual_method name="Hash" cname="hash">
+ <return-type type="guint" />
+ <parameters>
+ <parameter type="GIcon*" name="icon" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Equal" cname="equal">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GIcon*" name="icon1" />
+ <parameter type="GIcon*" name="icon2" />
+ </parameters>
+ </virtual_method>
+ <method name="Equal" cname="g_icon_equal">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GIcon*" name="icon2" />
+ </parameters>
+ </method>
+ <method name="GetType" cname="g_icon_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="Hash" cname="g_icon_hash" shared="true">
+ <return-type type="guint" />
+ <parameters>
+ <parameter type="gconstpointer" name="icon" />
+ </parameters>
+ </method>
+ </interface>
+ <interface name="LoadableIcon" cname="GLoadableIcon">
+ <virtual_method name="Load" cname="load">
+ <return-type type="GInputStream*" />
+ <parameters>
+ <parameter type="GLoadableIcon*" name="icon" />
+ <parameter type="int" name="size" />
+ <parameter type="char**" name="type" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="LoadAsync" cname="load_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GLoadableIcon*" name="icon" />
+ <parameter type="int" name="size" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="LoadFinish" cname="load_finish">
+ <return-type type="GInputStream*" />
+ <parameters>
+ <parameter type="GLoadableIcon*" name="icon" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="char**" name="type" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <method name="GetType" cname="g_loadable_icon_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="Load" cname="g_loadable_icon_load">
+ <return-type type="GInputStream*" />
+ <parameters>
+ <parameter type="int" name="size" />
+ <parameter type="char**" name="type" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="LoadAsync" cname="g_loadable_icon_load_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="int" name="size" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="LoadFinish" cname="g_loadable_icon_load_finish">
+ <return-type type="GInputStream*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="char**" name="type" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ </interface>
+ <interface name="Mount" cname="GMount">
+ <signal name="Changed" cname="changed" when="LAST" field_name="changed">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ </parameters>
+ </signal>
+ <signal name="Unmounted" cname="unmounted" when="LAST" field_name="unmounted">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ </parameters>
+ </signal>
+ <virtual_method name="GetRoot" cname="get_root">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetName" cname="get_name">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetIcon" cname="get_icon">
+ <return-type type="GIcon*" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetUuid" cname="get_uuid">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetVolume" cname="get_volume">
+ <return-type type="GVolume*" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetDrive" cname="get_drive">
+ <return-type type="GDrive*" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanUnmount" cname="can_unmount">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanEject" cname="can_eject">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Unmount" cname="unmount">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="UnmountFinish" cname="unmount_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Eject" cname="eject">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="EjectFinish" cname="eject_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Remount" cname="remount">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ <parameter type="GMountMountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="RemountFinish" cname="remount_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GuessContentType" cname="guess_content_type">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ <parameter type="gboolean" name="force_rescan" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GuessContentTypeFinish" cname="guess_content_type_finish">
+ <return-type type="gchar**" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GuessContentTypeSync" cname="guess_content_type_sync">
+ <return-type type="gchar**" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ <parameter type="gboolean" name="force_rescan" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <method name="CanEject" cname="g_mount_can_eject">
+ <return-type type="gboolean" />
+ </method>
+ <method name="CanUnmount" cname="g_mount_can_unmount">
+ <return-type type="gboolean" />
+ </method>
+ <method name="Eject" cname="g_mount_eject">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="EjectFinish" cname="g_mount_eject_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="GetDrive" cname="g_mount_get_drive">
+ <return-type type="GDrive*" />
+ </method>
+ <method name="GetIcon" cname="g_mount_get_icon">
+ <return-type type="GIcon*" />
+ </method>
+ <method name="GetName" cname="g_mount_get_name">
+ <return-type type="char*" />
+ </method>
+ <method name="GetRoot" cname="g_mount_get_root">
+ <return-type type="GFile*" />
+ </method>
+ <method name="GetType" cname="g_mount_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="GetUuid" cname="g_mount_get_uuid">
+ <return-type type="char*" />
+ </method>
+ <method name="GetVolume" cname="g_mount_get_volume">
+ <return-type type="GVolume*" />
+ </method>
+ <method name="GuessContentType" cname="g_mount_guess_content_type">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gboolean" name="force_rescan" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="GuessContentTypeFinish" cname="g_mount_guess_content_type_finish">
+ <return-type type="gchar**" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="GuessContentTypeSync" cname="g_mount_guess_content_type_sync">
+ <return-type type="gchar**" />
+ <parameters>
+ <parameter type="gboolean" name="force_rescan" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Remount" cname="g_mount_remount">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountMountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="RemountFinish" cname="g_mount_remount_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Unmount" cname="g_mount_unmount">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="UnmountFinish" cname="g_mount_unmount_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ </interface>
+ <interface name="Seekable" cname="GSeekable">
+ <virtual_method name="Tell" cname="tell">
+ <return-type type="goffset" />
+ <parameters>
+ <parameter type="GSeekable*" name="seekable" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanSeek" cname="can_seek">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GSeekable*" name="seekable" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Seek" cname="seek">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GSeekable*" name="seekable" />
+ <parameter type="goffset" name="offset" />
+ <parameter type="GSeekType" name="type" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanTruncate" cname="can_truncate">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GSeekable*" name="seekable" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="TruncateFn" cname="truncate_fn">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GSeekable*" name="seekable" />
+ <parameter type="goffset" name="offset" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <method name="CanSeek" cname="g_seekable_can_seek">
+ <return-type type="gboolean" />
+ </method>
+ <method name="CanTruncate" cname="g_seekable_can_truncate">
+ <return-type type="gboolean" />
+ </method>
+ <method name="GetType" cname="g_seekable_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="Seek" cname="g_seekable_seek">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="goffset" name="offset" />
+ <parameter type="GSeekType" name="type" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Tell" cname="g_seekable_tell">
+ <return-type type="goffset" />
+ </method>
+ <method name="Truncate" cname="g_seekable_truncate">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="goffset" name="offset" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ </interface>
+ <interface name="Volume" cname="GVolume">
+ <signal name="Changed" cname="changed" when="LAST" field_name="changed">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ </parameters>
+ </signal>
+ <signal name="Removed" cname="removed" when="LAST" field_name="removed">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ </parameters>
+ </signal>
+ <virtual_method name="GetName" cname="get_name">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetIcon" cname="get_icon">
+ <return-type type="GIcon*" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetUuid" cname="get_uuid">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetDrive" cname="get_drive">
+ <return-type type="GDrive*" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetMount" cname="get_mount">
+ <return-type type="GMount*" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanMount" cname="can_mount">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanEject" cname="can_eject">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="MountFn" cname="mount_fn">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ <parameter type="GMountMountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="MountFinish" cname="mount_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Eject" cname="eject">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="EjectFinish" cname="eject_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetIdentifier" cname="get_identifier">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ <parameter type="const-char*" name="kind" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="EnumerateIdentifiers" cname="enumerate_identifiers">
+ <return-type type="char**" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="ShouldAutomount" cname="should_automount">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetActivationRoot" cname="get_activation_root">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ </parameters>
+ </virtual_method>
+ <method name="CanEject" cname="g_volume_can_eject">
+ <return-type type="gboolean" />
+ </method>
+ <method name="CanMount" cname="g_volume_can_mount">
+ <return-type type="gboolean" />
+ </method>
+ <method name="Eject" cname="g_volume_eject">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="EjectFinish" cname="g_volume_eject_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="EnumerateIdentifiers" cname="g_volume_enumerate_identifiers">
+ <return-type type="char**" />
+ </method>
+ <method name="GetActivationRoot" cname="g_volume_get_activation_root">
+ <return-type type="GFile*" />
+ </method>
+ <method name="GetDrive" cname="g_volume_get_drive">
+ <return-type type="GDrive*" />
+ </method>
+ <method name="GetIcon" cname="g_volume_get_icon">
+ <return-type type="GIcon*" />
+ </method>
+ <method name="GetIdentifier" cname="g_volume_get_identifier">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="const-char*" name="kind" />
+ </parameters>
+ </method>
+ <method name="GetMount" cname="g_volume_get_mount">
+ <return-type type="GMount*" />
+ </method>
+ <method name="GetName" cname="g_volume_get_name">
+ <return-type type="char*" />
+ </method>
+ <method name="GetType" cname="g_volume_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="GetUuid" cname="g_volume_get_uuid">
+ <return-type type="char*" />
+ </method>
+ <method name="Mount" cname="g_volume_mount">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountMountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="MountFinish" cname="g_volume_mount_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ShouldAutomount" cname="g_volume_should_automount">
+ <return-type type="gboolean" />
+ </method>
+ </interface>
+ <object name="IOModule" cname="GIOModule" parent="GTypeModule">
+ <method name="GetType" cname="g_io_module_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="Load" cname="g_io_module_load">
+ <return-type type="void" />
+ </method>
+ <constructor cname="g_io_module_new">
+ <parameters>
+ <parameter type="const-gchar*" name="filename" />
+ </parameters>
+ </constructor>
+ <method name="Unload" cname="g_io_module_unload">
+ <return-type type="void" />
+ </method>
+ </object>
+ <object name="AppLaunchContext" cname="GAppLaunchContext" parent="GObject">
+ <field name="Priv" cname="priv" type="GAppLaunchContextPrivate*" />
+ <virtual_method name="GetDisplay" cname="get_display">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GAppLaunchContext*" name="context" />
+ <parameter type="GAppInfo*" name="info" />
+ <parameter type="GList*" name="files" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetStartupNotifyId" cname="get_startup_notify_id">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GAppLaunchContext*" name="context" />
+ <parameter type="GAppInfo*" name="info" />
+ <parameter type="GList*" name="files" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="LaunchFailed" cname="launch_failed">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GAppLaunchContext*" name="context" />
+ <parameter type="const-char*" name="startup_notify_id" />
+ </parameters>
+ </virtual_method>
+ <method name="GetDisplay" cname="g_app_launch_context_get_display">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GAppInfo*" name="info" />
+ <parameter type="GList*" name="files" />
+ </parameters>
+ </method>
+ <method name="GetStartupNotifyId" cname="g_app_launch_context_get_startup_notify_id">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GAppInfo*" name="info" />
+ <parameter type="GList*" name="files" />
+ </parameters>
+ </method>
+ <method name="GetType" cname="g_app_launch_context_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="LaunchFailed" cname="g_app_launch_context_launch_failed">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="startup_notify_id" />
+ </parameters>
+ </method>
+ <constructor cname="g_app_launch_context_new" />
+ </object>
+ <object name="BufferedInputStream" cname="GBufferedInputStream" parent="GFilterInputStream">
+ <field name="Priv" cname="priv" type="GBufferedInputStreamPrivate*" />
+ <property name="BufferSize" cname="buffer-size" type="guint" readable="true" writeable="true" construct="true" />
+ <virtual_method name="Fill" cname="fill">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="GBufferedInputStream*" name="stream" />
+ <parameter type="gssize" name="count" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="FillAsync" cname="fill_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GBufferedInputStream*" name="stream" />
+ <parameter type="gssize" name="count" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="FillFinish" cname="fill_finish">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="GBufferedInputStream*" name="stream" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <method name="Fill" cname="g_buffered_input_stream_fill">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="gssize" name="count" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="FillAsync" cname="g_buffered_input_stream_fill_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gssize" name="count" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="FillFinish" cname="g_buffered_input_stream_fill_finish">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="GetAvailable" cname="g_buffered_input_stream_get_available">
+ <return-type type="gsize" />
+ </method>
+ <method name="GetBufferSize" cname="g_buffered_input_stream_get_buffer_size">
+ <return-type type="gsize" />
+ </method>
+ <method name="GetType" cname="g_buffered_input_stream_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <constructor cname="g_buffered_input_stream_new">
+ <parameters>
+ <parameter type="GInputStream*" name="base_stream" />
+ </parameters>
+ </constructor>
+ <constructor cname="g_buffered_input_stream_new_sized">
+ <parameters>
+ <parameter type="GInputStream*" name="base_stream" />
+ <parameter type="gsize" name="size" />
+ </parameters>
+ </constructor>
+ <method name="Peek" cname="g_buffered_input_stream_peek">
+ <return-type type="gsize" />
+ <parameters>
+ <parameter type="void*" name="buffer" />
+ <parameter type="gsize" name="offset" />
+ <parameter type="gsize" name="count" />
+ </parameters>
+ </method>
+ <method name="PeekBuffer" cname="g_buffered_input_stream_peek_buffer">
+ <return-type type="const-void*" />
+ <parameters>
+ <parameter type="gsize*" name="count" />
+ </parameters>
+ </method>
+ <method name="ReadByte" cname="g_buffered_input_stream_read_byte">
+ <return-type type="int" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetBufferSize" cname="g_buffered_input_stream_set_buffer_size">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gsize" name="size" />
+ </parameters>
+ </method>
+ </object>
+ <object name="BufferedOutputStream" cname="GBufferedOutputStream" parent="GFilterOutputStream">
+ <field name="Priv" cname="priv" type="GBufferedOutputStreamPrivate*" />
+ <property name="BufferSize" cname="buffer-size" type="guint" readable="true" writeable="true" construct="true" />
+ <property name="AutoGrow" cname="auto-grow" type="gboolean" readable="true" writeable="true" />
+ <method name="GetAutoGrow" cname="g_buffered_output_stream_get_auto_grow">
+ <return-type type="gboolean" />
+ </method>
+ <method name="GetBufferSize" cname="g_buffered_output_stream_get_buffer_size">
+ <return-type type="gsize" />
+ </method>
+ <method name="GetType" cname="g_buffered_output_stream_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <constructor cname="g_buffered_output_stream_new">
+ <parameters>
+ <parameter type="GOutputStream*" name="base_stream" />
+ </parameters>
+ </constructor>
+ <constructor cname="g_buffered_output_stream_new_sized">
+ <parameters>
+ <parameter type="GOutputStream*" name="base_stream" />
+ <parameter type="gsize" name="size" />
+ </parameters>
+ </constructor>
+ <method name="SetAutoGrow" cname="g_buffered_output_stream_set_auto_grow">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gboolean" name="auto_grow" />
+ </parameters>
+ </method>
+ <method name="SetBufferSize" cname="g_buffered_output_stream_set_buffer_size">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gsize" name="size" />
+ </parameters>
+ </method>
+ </object>
+ <object name="Cancellable" cname="GCancellable" parent="GObject">
+ <signal name="Cancelled" cname="cancelled" when="LAST" field_name="cancelled">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ </parameters>
+ </signal>
+ <method name="Cancel" cname="g_cancellable_cancel">
+ <return-type type="void" />
+ </method>
+ <method name="GetCurrent" cname="g_cancellable_get_current" shared="true">
+ <return-type type="GCancellable*" />
+ </method>
+ <method name="GetFd" cname="g_cancellable_get_fd">
+ <return-type type="int" />
+ </method>
+ <method name="GetType" cname="g_cancellable_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="IsCancelled" cname="g_cancellable_is_cancelled">
+ <return-type type="gboolean" />
+ </method>
+ <constructor cname="g_cancellable_new" />
+ <method name="PopCurrent" cname="g_cancellable_pop_current">
+ <return-type type="void" />
+ </method>
+ <method name="PushCurrent" cname="g_cancellable_push_current">
+ <return-type type="void" />
+ </method>
+ <method name="Reset" cname="g_cancellable_reset">
+ <return-type type="void" />
+ </method>
+ <method name="SetErrorIfCancelled" cname="g_cancellable_set_error_if_cancelled">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ </object>
+ <object name="DataInputStream" cname="GDataInputStream" parent="GBufferedInputStream">
+ <field name="Priv" cname="priv" type="GDataInputStreamPrivate*" />
+ <property name="ByteOrder" cname="byte-order" type="GDataStreamByteOrder" readable="true" writeable="true" />
+ <property name="NewlineType" cname="newline-type" type="GDataStreamNewlineType" readable="true" writeable="true" />
+ <method name="GetByteOrder" cname="g_data_input_stream_get_byte_order">
+ <return-type type="GDataStreamByteOrder" />
+ </method>
+ <method name="GetNewlineType" cname="g_data_input_stream_get_newline_type">
+ <return-type type="GDataStreamNewlineType" />
+ </method>
+ <method name="GetType" cname="g_data_input_stream_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <constructor cname="g_data_input_stream_new">
+ <parameters>
+ <parameter type="GInputStream*" name="base_stream" />
+ </parameters>
+ </constructor>
+ <method name="ReadByte" cname="g_data_input_stream_read_byte">
+ <return-type type="guchar" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ReadInt16" cname="g_data_input_stream_read_int16">
+ <return-type type="gint16" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ReadInt32" cname="g_data_input_stream_read_int32">
+ <return-type type="gint32" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ReadInt64" cname="g_data_input_stream_read_int64">
+ <return-type type="gint64" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ReadLine" cname="g_data_input_stream_read_line">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="gsize*" name="length" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ReadUint16" cname="g_data_input_stream_read_uint16">
+ <return-type type="guint16" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ReadUint32" cname="g_data_input_stream_read_uint32">
+ <return-type type="guint32" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ReadUint64" cname="g_data_input_stream_read_uint64">
+ <return-type type="guint64" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ReadUntil" cname="g_data_input_stream_read_until">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="const-gchar*" name="stop_chars" />
+ <parameter type="gsize*" name="length" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetByteOrder" cname="g_data_input_stream_set_byte_order">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GDataStreamByteOrder" name="order" />
+ </parameters>
+ </method>
+ <method name="SetNewlineType" cname="g_data_input_stream_set_newline_type">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GDataStreamNewlineType" name="type" />
+ </parameters>
+ </method>
+ </object>
+ <object name="DataOutputStream" cname="GDataOutputStream" parent="GFilterOutputStream">
+ <field name="Priv" cname="priv" type="GDataOutputStreamPrivate*" />
+ <property name="ByteOrder" cname="byte-order" type="GDataStreamByteOrder" readable="true" writeable="true" />
+ <method name="GetByteOrder" cname="g_data_output_stream_get_byte_order">
+ <return-type type="GDataStreamByteOrder" />
+ </method>
+ <method name="GetType" cname="g_data_output_stream_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <constructor cname="g_data_output_stream_new">
+ <parameters>
+ <parameter type="GOutputStream*" name="base_stream" />
+ </parameters>
+ </constructor>
+ <method name="PutByte" cname="g_data_output_stream_put_byte">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="guchar" name="data" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="PutInt16" cname="g_data_output_stream_put_int16">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="gint16" name="data" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="PutInt32" cname="g_data_output_stream_put_int32">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="gint32" name="data" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="PutInt64" cname="g_data_output_stream_put_int64">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="gint64" name="data" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="PutString" cname="g_data_output_stream_put_string">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="str" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="PutUint16" cname="g_data_output_stream_put_uint16">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="guint16" name="data" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="PutUint32" cname="g_data_output_stream_put_uint32">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="guint32" name="data" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="PutUint64" cname="g_data_output_stream_put_uint64">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="guint64" name="data" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetByteOrder" cname="g_data_output_stream_set_byte_order">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GDataStreamByteOrder" name="order" />
+ </parameters>
+ </method>
+ </object>
+ <object name="DesktopAppInfo" cname="GDesktopAppInfo" parent="GObject">
+ <implements>
+ <interface cname="GAppInfo" />
+ </implements>
+ <method name="GetIsHidden" cname="g_desktop_app_info_get_is_hidden">
+ <return-type type="gboolean" />
+ </method>
+ <method name="GetType" cname="g_desktop_app_info_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <constructor cname="g_desktop_app_info_new">
+ <parameters>
+ <parameter type="const-char*" name="desktop_id" />
+ </parameters>
+ </constructor>
+ <constructor cname="g_desktop_app_info_new_from_filename">
+ <parameters>
+ <parameter type="const-char*" name="filename" />
+ </parameters>
+ </constructor>
+ <constructor cname="g_desktop_app_info_new_from_keyfile">
+ <parameters>
+ <parameter type="GKeyFile*" name="key_file" />
+ </parameters>
+ </constructor>
+ <method name="SetDesktopEnv" cname="g_desktop_app_info_set_desktop_env" shared="true">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="desktop_env" />
+ </parameters>
+ </method>
+ </object>
+ <object name="Emblem" cname="GEmblem" parent="GObject">
+ <property name="Origin" cname="origin" type="GEmblemOrigin" readable="true" writeable="true" construct-only="true" />
+ <property name="Icon" cname="icon" type="GObject" readable="true" writeable="true" construct-only="true" />
+ <implements>
+ <interface cname="GIcon" />
+ </implements>
+ <method name="GetIcon" cname="g_emblem_get_icon">
+ <return-type type="GIcon*" />
+ </method>
+ <method name="GetOrigin" cname="g_emblem_get_origin">
+ <return-type type="GEmblemOrigin" />
+ </method>
+ <method name="GetType" cname="g_emblem_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <constructor cname="g_emblem_new">
+ <parameters>
+ <parameter type="GIcon*" name="icon" />
+ </parameters>
+ </constructor>
+ <constructor cname="g_emblem_new_with_origin">
+ <parameters>
+ <parameter type="GIcon*" name="icon" />
+ <parameter type="GEmblemOrigin" name="origin" />
+ </parameters>
+ </constructor>
+ </object>
+ <object name="EmblemedIcon" cname="GEmblemedIcon" parent="GObject">
+ <implements>
+ <interface cname="GIcon" />
+ </implements>
+ <method name="AddEmblem" cname="g_emblemed_icon_add_emblem">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GEmblem*" name="emblem" />
+ </parameters>
+ </method>
+ <method name="GetEmblems" cname="g_emblemed_icon_get_emblems">
+ <return-type type="GList*" />
+ </method>
+ <method name="GetIcon" cname="g_emblemed_icon_get_icon">
+ <return-type type="GIcon*" />
+ </method>
+ <method name="GetType" cname="g_emblemed_icon_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <constructor cname="g_emblemed_icon_new">
+ <parameters>
+ <parameter type="GIcon*" name="icon" />
+ <parameter type="GEmblem*" name="emblem" />
+ </parameters>
+ </constructor>
+ </object>
+ <object name="FilenameCompleter" cname="GFilenameCompleter" parent="GObject">
+ <signal name="GotCompletionData" cname="got-completion-data" when="LAST" field_name="got_completion_data">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFilenameCompleter*" name="filename_completer" />
+ </parameters>
+ </signal>
+ <method name="GetCompletionSuffix" cname="g_filename_completer_get_completion_suffix">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="const-char*" name="initial_text" />
+ </parameters>
+ </method>
+ <method name="GetCompletions" cname="g_filename_completer_get_completions">
+ <return-type type="char**" />
+ <parameters>
+ <parameter type="const-char*" name="initial_text" />
+ </parameters>
+ </method>
+ <method name="GetType" cname="g_filename_completer_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <constructor cname="g_filename_completer_new" />
+ <method name="SetDirsOnly" cname="g_filename_completer_set_dirs_only">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gboolean" name="dirs_only" />
+ </parameters>
+ </method>
+ </object>
+ <object name="FileEnumerator" cname="GFileEnumerator" parent="GObject">
+ <field name="Priv" cname="priv" type="GFileEnumeratorPrivate*" />
+ <property name="Container" cname="container" type="GFile" writeable="true" construct-only="true" />
+ <virtual_method name="NextFile" cname="next_file">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GFileEnumerator*" name="enumerator" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CloseFn" cname="close_fn">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFileEnumerator*" name="enumerator" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="NextFilesAsync" cname="next_files_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFileEnumerator*" name="enumerator" />
+ <parameter type="int" name="num_files" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="NextFilesFinish" cname="next_files_finish">
+ <return-type type="GList*" />
+ <parameters>
+ <parameter type="GFileEnumerator*" name="enumerator" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CloseAsync" cname="close_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFileEnumerator*" name="enumerator" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CloseFinish" cname="close_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFileEnumerator*" name="enumerator" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <method name="Close" cname="g_file_enumerator_close">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="CloseAsync" cname="g_file_enumerator_close_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="CloseFinish" cname="g_file_enumerator_close_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="GetContainer" cname="g_file_enumerator_get_container">
+ <return-type type="GFile*" />
+ </method>
+ <method name="GetType" cname="g_file_enumerator_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="HasPending" cname="g_file_enumerator_has_pending">
+ <return-type type="gboolean" />
+ </method>
+ <method name="IsClosed" cname="g_file_enumerator_is_closed">
+ <return-type type="gboolean" />
+ </method>
+ <method name="NextFile" cname="g_file_enumerator_next_file">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="NextFilesAsync" cname="g_file_enumerator_next_files_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="int" name="num_files" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="NextFilesFinish" cname="g_file_enumerator_next_files_finish">
+ <return-type type="GList*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetPending" cname="g_file_enumerator_set_pending">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gboolean" name="pending" />
+ </parameters>
+ </method>
+ </object>
+ <object name="FileIcon" cname="GFileIcon" parent="GObject">
+ <property name="File" cname="file" type="GFile" readable="true" writeable="true" construct-only="true" />
+ <implements>
+ <interface cname="GIcon" />
+ <interface cname="GLoadableIcon" />
+ </implements>
+ <method name="GetFile" cname="g_file_icon_get_file">
+ <return-type type="GFile*" />
+ </method>
+ <method name="GetType" cname="g_file_icon_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <constructor cname="g_file_icon_new">
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ </parameters>
+ </constructor>
+ </object>
+ <object name="FileInfo" cname="GFileInfo" parent="GObject">
+ <method name="ClearStatus" cname="g_file_info_clear_status">
+ <return-type type="void" />
+ </method>
+ <method name="CopyInto" cname="g_file_info_copy_into">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFileInfo*" name="dest_info" />
+ </parameters>
+ </method>
+ <method name="Dup" cname="g_file_info_dup">
+ <return-type type="GFileInfo*" />
+ </method>
+ <method name="GetAttributeAsString" cname="g_file_info_get_attribute_as_string">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ </parameters>
+ </method>
+ <method name="GetAttributeBoolean" cname="g_file_info_get_attribute_boolean">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ </parameters>
+ </method>
+ <method name="GetAttributeByteString" cname="g_file_info_get_attribute_byte_string">
+ <return-type type="const-char*" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ </parameters>
+ </method>
+ <method name="GetAttributeData" cname="g_file_info_get_attribute_data">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="GFileAttributeType*" name="type" />
+ <parameter type="gpointer*" name="value_pp" />
+ <parameter type="GFileAttributeStatus*" name="status" />
+ </parameters>
+ </method>
+ <method name="GetAttributeInt32" cname="g_file_info_get_attribute_int32">
+ <return-type type="gint32" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ </parameters>
+ </method>
+ <method name="GetAttributeInt64" cname="g_file_info_get_attribute_int64">
+ <return-type type="gint64" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ </parameters>
+ </method>
+ <method name="GetAttributeObject" cname="g_file_info_get_attribute_object">
+ <return-type type="GObject*" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ </parameters>
+ </method>
+ <method name="GetAttributeStatus" cname="g_file_info_get_attribute_status">
+ <return-type type="GFileAttributeStatus" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ </parameters>
+ </method>
+ <method name="GetAttributeString" cname="g_file_info_get_attribute_string">
+ <return-type type="const-char*" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ </parameters>
+ </method>
+ <method name="GetAttributeType" cname="g_file_info_get_attribute_type">
+ <return-type type="GFileAttributeType" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ </parameters>
+ </method>
+ <method name="GetAttributeUint32" cname="g_file_info_get_attribute_uint32">
+ <return-type type="guint32" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ </parameters>
+ </method>
+ <method name="GetAttributeUint64" cname="g_file_info_get_attribute_uint64">
+ <return-type type="guint64" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ </parameters>
+ </method>
+ <method name="GetContentType" cname="g_file_info_get_content_type">
+ <return-type type="const-char*" />
+ </method>
+ <method name="GetDisplayName" cname="g_file_info_get_display_name">
+ <return-type type="const-char*" />
+ </method>
+ <method name="GetEditName" cname="g_file_info_get_edit_name">
+ <return-type type="const-char*" />
+ </method>
+ <method name="GetEtag" cname="g_file_info_get_etag">
+ <return-type type="const-char*" />
+ </method>
+ <method name="GetFileType" cname="g_file_info_get_file_type">
+ <return-type type="GFileType" />
+ </method>
+ <method name="GetIcon" cname="g_file_info_get_icon">
+ <return-type type="GIcon*" />
+ </method>
+ <method name="GetIsBackup" cname="g_file_info_get_is_backup">
+ <return-type type="gboolean" />
+ </method>
+ <method name="GetIsHidden" cname="g_file_info_get_is_hidden">
+ <return-type type="gboolean" />
+ </method>
+ <method name="GetIsSymlink" cname="g_file_info_get_is_symlink">
+ <return-type type="gboolean" />
+ </method>
+ <method name="GetModificationTime" cname="g_file_info_get_modification_time">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GTimeVal*" name="result" />
+ </parameters>
+ </method>
+ <method name="GetName" cname="g_file_info_get_name">
+ <return-type type="const-char*" />
+ </method>
+ <method name="GetSize" cname="g_file_info_get_size">
+ <return-type type="goffset" />
+ </method>
+ <method name="GetSortOrder" cname="g_file_info_get_sort_order">
+ <return-type type="gint32" />
+ </method>
+ <method name="GetSymlinkTarget" cname="g_file_info_get_symlink_target">
+ <return-type type="const-char*" />
+ </method>
+ <method name="GetType" cname="g_file_info_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="HasAttribute" cname="g_file_info_has_attribute">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ </parameters>
+ </method>
+ <method name="ListAttributes" cname="g_file_info_list_attributes">
+ <return-type type="char**" />
+ <parameters>
+ <parameter type="const-char*" name="name_space" />
+ </parameters>
+ </method>
+ <constructor cname="g_file_info_new" />
+ <method name="RemoveAttribute" cname="g_file_info_remove_attribute">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ </parameters>
+ </method>
+ <method name="SetAttribute" cname="g_file_info_set_attribute">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="GFileAttributeType" name="type" />
+ <parameter type="gpointer" name="value_p" />
+ </parameters>
+ </method>
+ <method name="SetAttributeBoolean" cname="g_file_info_set_attribute_boolean">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="gboolean" name="attr_value" />
+ </parameters>
+ </method>
+ <method name="SetAttributeByteString" cname="g_file_info_set_attribute_byte_string">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="const-char*" name="attr_value" />
+ </parameters>
+ </method>
+ <method name="SetAttributeInt32" cname="g_file_info_set_attribute_int32">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="gint32" name="attr_value" />
+ </parameters>
+ </method>
+ <method name="SetAttributeInt64" cname="g_file_info_set_attribute_int64">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="gint64" name="attr_value" />
+ </parameters>
+ </method>
+ <method name="SetAttributeMask" cname="g_file_info_set_attribute_mask">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFileAttributeMatcher*" name="mask" />
+ </parameters>
+ </method>
+ <method name="SetAttributeObject" cname="g_file_info_set_attribute_object">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="GObject*" name="attr_value" />
+ </parameters>
+ </method>
+ <method name="SetAttributeString" cname="g_file_info_set_attribute_string">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="const-char*" name="attr_value" />
+ </parameters>
+ </method>
+ <method name="SetAttributeUint32" cname="g_file_info_set_attribute_uint32">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="guint32" name="attr_value" />
+ </parameters>
+ </method>
+ <method name="SetAttributeUint64" cname="g_file_info_set_attribute_uint64">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="guint64" name="attr_value" />
+ </parameters>
+ </method>
+ <method name="SetContentType" cname="g_file_info_set_content_type">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="content_type" />
+ </parameters>
+ </method>
+ <method name="SetDisplayName" cname="g_file_info_set_display_name">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="display_name" />
+ </parameters>
+ </method>
+ <method name="SetEditName" cname="g_file_info_set_edit_name">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="edit_name" />
+ </parameters>
+ </method>
+ <method name="SetFileType" cname="g_file_info_set_file_type">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFileType" name="type" />
+ </parameters>
+ </method>
+ <method name="SetIcon" cname="g_file_info_set_icon">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GIcon*" name="icon" />
+ </parameters>
+ </method>
+ <method name="SetIsHidden" cname="g_file_info_set_is_hidden">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gboolean" name="is_hidden" />
+ </parameters>
+ </method>
+ <method name="SetIsSymlink" cname="g_file_info_set_is_symlink">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gboolean" name="is_symlink" />
+ </parameters>
+ </method>
+ <method name="SetModificationTime" cname="g_file_info_set_modification_time">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GTimeVal*" name="mtime" />
+ </parameters>
+ </method>
+ <method name="SetName" cname="g_file_info_set_name">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="name" />
+ </parameters>
+ </method>
+ <method name="SetSize" cname="g_file_info_set_size">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="goffset" name="size" />
+ </parameters>
+ </method>
+ <method name="SetSortOrder" cname="g_file_info_set_sort_order">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gint32" name="sort_order" />
+ </parameters>
+ </method>
+ <method name="SetSymlinkTarget" cname="g_file_info_set_symlink_target">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="symlink_target" />
+ </parameters>
+ </method>
+ <method name="UnsetAttributeMask" cname="g_file_info_unset_attribute_mask">
+ <return-type type="void" />
+ </method>
+ </object>
+ <object name="FileInputStream" cname="GFileInputStream" parent="GInputStream">
+ <field name="Priv" cname="priv" type="GFileInputStreamPrivate*" />
+ <virtual_method name="Tell" cname="tell">
+ <return-type type="goffset" />
+ <parameters>
+ <parameter type="GFileInputStream*" name="stream" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanSeek" cname="can_seek">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFileInputStream*" name="stream" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Seek" cname="seek">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFileInputStream*" name="stream" />
+ <parameter type="goffset" name="offset" />
+ <parameter type="GSeekType" name="type" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QueryInfo" cname="query_info">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GFileInputStream*" name="stream" />
+ <parameter type="char*" name="attributes" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QueryInfoAsync" cname="query_info_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFileInputStream*" name="stream" />
+ <parameter type="char*" name="attributes" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QueryInfoFinish" cname="query_info_finish">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GFileInputStream*" name="stream" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <implements>
+ <interface cname="GSeekable" />
+ </implements>
+ <method name="GetType" cname="g_file_input_stream_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="QueryInfo" cname="g_file_input_stream_query_info">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="char*" name="attributes" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="QueryInfoAsync" cname="g_file_input_stream_query_info_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="char*" name="attributes" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="QueryInfoFinish" cname="g_file_input_stream_query_info_finish">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ </object>
+ <object name="FileMonitor" cname="GFileMonitor" parent="GObject">
+ <field name="Priv" cname="priv" type="GFileMonitorPrivate*" />
+ <signal name="Changed" cname="changed" when="LAST" field_name="changed">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFileMonitor*" name="monitor" />
+ <parameter type="GFile*" name="file" />
+ <parameter type="GFile*" name="other_file" />
+ <parameter type="GFileMonitorEvent" name="event_type" />
+ </parameters>
+ </signal>
+ <virtual_method name="Cancel" cname="cancel">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFileMonitor*" name="monitor" />
+ </parameters>
+ </virtual_method>
+ <property name="RateLimit" cname="rate-limit" type="gint" readable="true" writeable="true" />
+ <property name="Cancelled" cname="cancelled" type="gboolean" readable="true" />
+ <method name="Cancel" cname="g_file_monitor_cancel">
+ <return-type type="gboolean" />
+ </method>
+ <method name="Directory" cname="g_file_monitor_directory" shared="true">
+ <return-type type="GFileMonitor*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GFileMonitorFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="EmitEvent" cname="g_file_monitor_emit_event">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="child" />
+ <parameter type="GFile*" name="other_file" />
+ <parameter type="GFileMonitorEvent" name="event_type" />
+ </parameters>
+ </method>
+ <method name="File" cname="g_file_monitor_file" shared="true">
+ <return-type type="GFileMonitor*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GFileMonitorFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="GetType" cname="g_file_monitor_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="IsCancelled" cname="g_file_monitor_is_cancelled">
+ <return-type type="gboolean" />
+ </method>
+ <method name="SetRateLimit" cname="g_file_monitor_set_rate_limit">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="int" name="limit_msecs" />
+ </parameters>
+ </method>
+ </object>
+ <object name="FileOutputStream" cname="GFileOutputStream" parent="GOutputStream">
+ <field name="Priv" cname="priv" type="GFileOutputStreamPrivate*" />
+ <virtual_method name="Tell" cname="tell">
+ <return-type type="goffset" />
+ <parameters>
+ <parameter type="GFileOutputStream*" name="stream" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanSeek" cname="can_seek">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFileOutputStream*" name="stream" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Seek" cname="seek">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFileOutputStream*" name="stream" />
+ <parameter type="goffset" name="offset" />
+ <parameter type="GSeekType" name="type" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanTruncate" cname="can_truncate">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFileOutputStream*" name="stream" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="TruncateFn" cname="truncate_fn">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFileOutputStream*" name="stream" />
+ <parameter type="goffset" name="size" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QueryInfo" cname="query_info">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GFileOutputStream*" name="stream" />
+ <parameter type="char*" name="attributes" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QueryInfoAsync" cname="query_info_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFileOutputStream*" name="stream" />
+ <parameter type="char*" name="attributes" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QueryInfoFinish" cname="query_info_finish">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GFileOutputStream*" name="stream" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetEtag" cname="get_etag">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GFileOutputStream*" name="stream" />
+ </parameters>
+ </virtual_method>
+ <implements>
+ <interface cname="GSeekable" />
+ </implements>
+ <method name="GetEtag" cname="g_file_output_stream_get_etag">
+ <return-type type="char*" />
+ </method>
+ <method name="GetType" cname="g_file_output_stream_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="QueryInfo" cname="g_file_output_stream_query_info">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="char*" name="attributes" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="QueryInfoAsync" cname="g_file_output_stream_query_info_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="char*" name="attributes" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="QueryInfoFinish" cname="g_file_output_stream_query_info_finish">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ </object>
+ <object name="FilterInputStream" cname="GFilterInputStream" parent="GInputStream">
+ <field name="BaseStream" cname="base_stream" type="GInputStream*" />
+ <property name="BaseStream" cname="base-stream" type="GInputStream" readable="true" writeable="true" construct-only="true" />
+ <method name="GetBaseStream" cname="g_filter_input_stream_get_base_stream">
+ <return-type type="GInputStream*" />
+ </method>
+ <method name="GetType" cname="g_filter_input_stream_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ </object>
+ <object name="FilterOutputStream" cname="GFilterOutputStream" parent="GOutputStream">
+ <field name="BaseStream" cname="base_stream" type="GOutputStream*" />
+ <property name="BaseStream" cname="base-stream" type="GOutputStream" readable="true" writeable="true" construct-only="true" />
+ <method name="GetBaseStream" cname="g_filter_output_stream_get_base_stream">
+ <return-type type="GOutputStream*" />
+ </method>
+ <method name="GetType" cname="g_filter_output_stream_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ </object>
+ <object name="InputStream" cname="GInputStream" parent="GObject">
+ <field name="Priv" cname="priv" type="GInputStreamPrivate*" />
+ <virtual_method name="ReadFn" cname="read_fn">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="GInputStream*" name="stream" />
+ <parameter type="void*" name="buffer" />
+ <parameter type="gsize" name="count" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Skip" cname="skip">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="GInputStream*" name="stream" />
+ <parameter type="gsize" name="count" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CloseFn" cname="close_fn">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GInputStream*" name="stream" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="ReadAsync" cname="read_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GInputStream*" name="stream" />
+ <parameter type="void*" name="buffer" />
+ <parameter type="gsize" name="count" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="ReadFinish" cname="read_finish">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="GInputStream*" name="stream" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="SkipAsync" cname="skip_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GInputStream*" name="stream" />
+ <parameter type="gsize" name="count" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="SkipFinish" cname="skip_finish">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="GInputStream*" name="stream" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CloseAsync" cname="close_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GInputStream*" name="stream" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CloseFinish" cname="close_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GInputStream*" name="stream" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <method name="ClearPending" cname="g_input_stream_clear_pending">
+ <return-type type="void" />
+ </method>
+ <method name="Close" cname="g_input_stream_close">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="CloseAsync" cname="g_input_stream_close_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="CloseFinish" cname="g_input_stream_close_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="GetType" cname="g_input_stream_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="HasPending" cname="g_input_stream_has_pending">
+ <return-type type="gboolean" />
+ </method>
+ <method name="IsClosed" cname="g_input_stream_is_closed">
+ <return-type type="gboolean" />
+ </method>
+ <method name="Read" cname="g_input_stream_read">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="void*" name="buffer" />
+ <parameter type="gsize" name="count" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ReadAll" cname="g_input_stream_read_all">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="void*" name="buffer" />
+ <parameter type="gsize" name="count" />
+ <parameter type="gsize*" name="bytes_read" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ReadAsync" cname="g_input_stream_read_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="void*" name="buffer" />
+ <parameter type="gsize" name="count" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="ReadFinish" cname="g_input_stream_read_finish">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SetPending" cname="g_input_stream_set_pending">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Skip" cname="g_input_stream_skip">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="gsize" name="count" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SkipAsync" cname="g_input_stream_skip_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gsize" name="count" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="SkipFinish" cname="g_input_stream_skip_finish">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ </object>
+ <object name="LocalDirectoryMonitor" cname="GLocalDirectoryMonitor" parent="GFileMonitor">
+ <field name="Dirname" cname="dirname" type="gchar*" />
+ <field name="MountMonitor" cname="mount_monitor" type="GUnixMountMonitor*" />
+ <field name="WasMounted" cname="was_mounted" type="gboolean" />
+ <property name="Dirname" cname="dirname" type="gchar*" writeable="true" construct-only="true" />
+ <virtual_method name="IsSupported" cname="is_supported">
+ <return-type type="gboolean" />
+ </virtual_method>
+ <method name="GetType" cname="g_local_directory_monitor_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ </object>
+ <object name="LocalFileEnumerator" cname="GLocalFileEnumerator" parent="GFileEnumerator" />
+ <object name="MemoryInputStream" cname="GMemoryInputStream" parent="GInputStream">
+ <field name="Priv" cname="priv" type="GMemoryInputStreamPrivate*" />
+ <implements>
+ <interface cname="GSeekable" />
+ </implements>
+ <method name="AddData" cname="g_memory_input_stream_add_data">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-void*" name="data" />
+ <parameter type="gssize" name="len" />
+ <parameter type="GDestroyNotify" name="destroy" />
+ </parameters>
+ </method>
+ <method name="GetType" cname="g_memory_input_stream_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <constructor cname="g_memory_input_stream_new" />
+ <constructor cname="g_memory_input_stream_new_from_data">
+ <parameters>
+ <parameter type="const-void*" name="data" />
+ <parameter type="gssize" name="len" />
+ <parameter type="GDestroyNotify" name="destroy" />
+ </parameters>
+ </constructor>
+ </object>
+ <object name="MemoryOutputStream" cname="GMemoryOutputStream" parent="GOutputStream">
+ <field name="Priv" cname="priv" type="GMemoryOutputStreamPrivate*" />
+ <implements>
+ <interface cname="GSeekable" />
+ </implements>
+ <method name="GetData" cname="g_memory_output_stream_get_data">
+ <return-type type="gpointer" />
+ </method>
+ <method name="GetDataSize" cname="g_memory_output_stream_get_data_size">
+ <return-type type="gsize" />
+ </method>
+ <method name="GetSize" cname="g_memory_output_stream_get_size">
+ <return-type type="gsize" />
+ </method>
+ <method name="GetType" cname="g_memory_output_stream_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <constructor cname="g_memory_output_stream_new">
+ <parameters>
+ <parameter type="gpointer" name="data" />
+ <parameter type="gsize" name="len" />
+ <parameter type="GReallocFunc" name="realloc_fn" />
+ <parameter type="GDestroyNotify" name="destroy" />
+ </parameters>
+ </constructor>
+ </object>
+ <object name="MountOperation" cname="GMountOperation" parent="GObject">
+ <field name="Priv" cname="priv" type="GMountOperationPrivate*" />
+ <signal name="AskPassword" cname="ask-password" when="LAST" field_name="ask_password">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountOperation*" name="op" />
+ <parameter type="const-char*" name="message" />
+ <parameter type="const-char*" name="default_user" />
+ <parameter type="const-char*" name="default_domain" />
+ <parameter type="GAskPasswordFlags" name="flags" />
+ </parameters>
+ </signal>
+ <signal name="AskQuestion" cname="ask-question" when="LAST" field_name="ask_question">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountOperation*" name="op" />
+ <parameter type="const-char*" name="message" />
+ <parameter type="const-char*" array="true" name="choices" />
+ </parameters>
+ </signal>
+ <signal name="Reply" cname="reply" when="LAST" field_name="reply">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountOperation*" name="op" />
+ <parameter type="GMountOperationResult" name="result" />
+ </parameters>
+ </signal>
+ <property name="Username" cname="username" type="gchar*" readable="true" writeable="true" />
+ <property name="Password" cname="password" type="gchar*" readable="true" writeable="true" />
+ <property name="Anonymous" cname="anonymous" type="gboolean" readable="true" writeable="true" />
+ <property name="Domain" cname="domain" type="gchar*" readable="true" writeable="true" />
+ <property name="PasswordSave" cname="password-save" type="GPasswordSave" readable="true" writeable="true" />
+ <property name="Choice" cname="choice" type="gint" readable="true" writeable="true" />
+ <method name="GetAnonymous" cname="g_mount_operation_get_anonymous">
+ <return-type type="gboolean" />
+ </method>
+ <method name="GetChoice" cname="g_mount_operation_get_choice">
+ <return-type type="int" />
+ </method>
+ <method name="GetDomain" cname="g_mount_operation_get_domain">
+ <return-type type="const-char*" />
+ </method>
+ <method name="GetPassword" cname="g_mount_operation_get_password">
+ <return-type type="const-char*" />
+ </method>
+ <method name="GetPasswordSave" cname="g_mount_operation_get_password_save">
+ <return-type type="GPasswordSave" />
+ </method>
+ <method name="GetType" cname="g_mount_operation_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="GetUsername" cname="g_mount_operation_get_username">
+ <return-type type="const-char*" />
+ </method>
+ <constructor cname="g_mount_operation_new" />
+ <method name="Reply" cname="g_mount_operation_reply">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountOperationResult" name="result" />
+ </parameters>
+ </method>
+ <method name="SetAnonymous" cname="g_mount_operation_set_anonymous">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gboolean" name="anonymous" />
+ </parameters>
+ </method>
+ <method name="SetChoice" cname="g_mount_operation_set_choice">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="int" name="choice" />
+ </parameters>
+ </method>
+ <method name="SetDomain" cname="g_mount_operation_set_domain">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="domain" />
+ </parameters>
+ </method>
+ <method name="SetPassword" cname="g_mount_operation_set_password">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="password" />
+ </parameters>
+ </method>
+ <method name="SetPasswordSave" cname="g_mount_operation_set_password_save">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GPasswordSave" name="save" />
+ </parameters>
+ </method>
+ <method name="SetUsername" cname="g_mount_operation_set_username">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="username" />
+ </parameters>
+ </method>
+ </object>
+ <object name="NativeVolumeMonitor" cname="GNativeVolumeMonitor" parent="GVolumeMonitor">
+ <virtual_method name="GetMountForMountPath" cname="get_mount_for_mount_path">
+ <return-type type="GMount*" />
+ <parameters>
+ <parameter type="const-char*" name="mount_path" />
+ <parameter type="GCancellable*" name="cancellable" />
+ </parameters>
+ </virtual_method>
+ <method name="GetType" cname="g_native_volume_monitor_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ </object>
+ <object name="OutputStream" cname="GOutputStream" parent="GObject">
+ <field name="Priv" cname="priv" type="GOutputStreamPrivate*" />
+ <virtual_method name="WriteFn" cname="write_fn">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="GOutputStream*" name="stream" />
+ <parameter type="const-void*" name="buffer" />
+ <parameter type="gsize" name="count" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Splice" cname="splice">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="GOutputStream*" name="stream" />
+ <parameter type="GInputStream*" name="source" />
+ <parameter type="GOutputStreamSpliceFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Flush" cname="flush">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GOutputStream*" name="stream" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CloseFn" cname="close_fn">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GOutputStream*" name="stream" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="WriteAsync" cname="write_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GOutputStream*" name="stream" />
+ <parameter type="const-void*" name="buffer" />
+ <parameter type="gsize" name="count" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="WriteFinish" cname="write_finish">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="GOutputStream*" name="stream" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="SpliceAsync" cname="splice_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GOutputStream*" name="stream" />
+ <parameter type="GInputStream*" name="source" />
+ <parameter type="GOutputStreamSpliceFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="SpliceFinish" cname="splice_finish">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="GOutputStream*" name="stream" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="FlushAsync" cname="flush_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GOutputStream*" name="stream" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="FlushFinish" cname="flush_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GOutputStream*" name="stream" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CloseAsync" cname="close_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GOutputStream*" name="stream" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CloseFinish" cname="close_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GOutputStream*" name="stream" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <method name="ClearPending" cname="g_output_stream_clear_pending">
+ <return-type type="void" />
+ </method>
+ <method name="Close" cname="g_output_stream_close">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="CloseAsync" cname="g_output_stream_close_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="CloseFinish" cname="g_output_stream_close_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Flush" cname="g_output_stream_flush">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="FlushAsync" cname="g_output_stream_flush_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="FlushFinish" cname="g_output_stream_flush_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="GetType" cname="g_output_stream_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="HasPending" cname="g_output_stream_has_pending">
+ <return-type type="gboolean" />
+ </method>
+ <method name="IsClosed" cname="g_output_stream_is_closed">
+ <return-type type="gboolean" />
+ </method>
+ <method name="SetPending" cname="g_output_stream_set_pending">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Splice" cname="g_output_stream_splice">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="GInputStream*" name="source" />
+ <parameter type="GOutputStreamSpliceFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SpliceAsync" cname="g_output_stream_splice_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GInputStream*" name="source" />
+ <parameter type="GOutputStreamSpliceFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="SpliceFinish" cname="g_output_stream_splice_finish">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Write" cname="g_output_stream_write">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="const-void*" name="buffer" />
+ <parameter type="gsize" name="count" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="WriteAll" cname="g_output_stream_write_all">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-void*" name="buffer" />
+ <parameter type="gsize" name="count" />
+ <parameter type="gsize*" name="bytes_written" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="WriteAsync" cname="g_output_stream_write_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-void*" name="buffer" />
+ <parameter type="gsize" name="count" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="WriteFinish" cname="g_output_stream_write_finish">
+ <return-type type="gssize" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ </object>
+ <object name="SimpleAsyncResult" cname="GSimpleAsyncResult" parent="GObject">
+ <implements>
+ <interface cname="GAsyncResult" />
+ </implements>
+ <method name="Complete" cname="g_simple_async_result_complete">
+ <return-type type="void" />
+ </method>
+ <method name="CompleteInIdle" cname="g_simple_async_result_complete_in_idle">
+ <return-type type="void" />
+ </method>
+ <method name="GetOpResGboolean" cname="g_simple_async_result_get_op_res_gboolean">
+ <return-type type="gboolean" />
+ </method>
+ <method name="GetOpResGpointer" cname="g_simple_async_result_get_op_res_gpointer">
+ <return-type type="gpointer" />
+ </method>
+ <method name="GetOpResGssize" cname="g_simple_async_result_get_op_res_gssize">
+ <return-type type="gssize" />
+ </method>
+ <method name="GetSourceTag" cname="g_simple_async_result_get_source_tag">
+ <return-type type="gpointer" />
+ </method>
+ <method name="GetType" cname="g_simple_async_result_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <constructor cname="g_simple_async_result_new">
+ <parameters>
+ <parameter type="GObject*" name="source_object" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ <parameter type="gpointer" name="source_tag" />
+ </parameters>
+ </constructor>
+ <constructor cname="g_simple_async_result_new_error">
+ <parameters>
+ <parameter type="GObject*" name="source_object" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ <parameter type="GQuark" name="domain" />
+ <parameter type="gint" name="code" />
+ <parameter type="const-char*" name="format" printf_format="true" />
+ <parameter ellipsis="true" printf_format_args="true" />
+ </parameters>
+ </constructor>
+ <constructor cname="g_simple_async_result_new_from_error">
+ <parameters>
+ <parameter type="GObject*" name="source_object" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ <parameter type="GError*" name="error" />
+ </parameters>
+ </constructor>
+ <method name="PropagateError" cname="g_simple_async_result_propagate_error">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GError**" name="dest" />
+ </parameters>
+ </method>
+ <method name="RunInThread" cname="g_simple_async_result_run_in_thread">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GSimpleAsyncThreadFunc" name="func" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ </parameters>
+ </method>
+ <method name="SetError" cname="g_simple_async_result_set_error">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GQuark" name="domain" />
+ <parameter type="gint" name="code" />
+ <parameter type="const-char*" name="format" printf_format="true" />
+ <parameter ellipsis="true" printf_format_args="true" />
+ </parameters>
+ </method>
+ <method name="SetErrorVa" cname="g_simple_async_result_set_error_va">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GQuark" name="domain" />
+ <parameter type="gint" name="code" />
+ <parameter type="const-char*" name="format" />
+ <parameter type="va_list" name="args" />
+ </parameters>
+ </method>
+ <method name="SetFromError" cname="g_simple_async_result_set_from_error">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GError*" name="error" />
+ </parameters>
+ </method>
+ <method name="SetHandleCancellation" cname="g_simple_async_result_set_handle_cancellation">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gboolean" name="handle_cancellation" />
+ </parameters>
+ </method>
+ <method name="SetOpResGboolean" cname="g_simple_async_result_set_op_res_gboolean">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gboolean" name="op_res" />
+ </parameters>
+ </method>
+ <method name="SetOpResGpointer" cname="g_simple_async_result_set_op_res_gpointer">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gpointer" name="op_res" />
+ <parameter type="GDestroyNotify" name="destroy_op_res" />
+ </parameters>
+ </method>
+ <method name="SetOpResGssize" cname="g_simple_async_result_set_op_res_gssize">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gssize" name="op_res" />
+ </parameters>
+ </method>
+ </object>
+ <object name="ThemedIcon" cname="GThemedIcon" parent="GObject">
+ <property name="Name" cname="name" type="gchar*" writeable="true" construct-only="true" />
+ <property name="Names" cname="names" type="GStrv" readable="true" writeable="true" construct-only="true" />
+ <property name="UseDefaultFallbacks" cname="use-default-fallbacks" type="gboolean" readable="true" writeable="true" construct-only="true" />
+ <implements>
+ <interface cname="GIcon" />
+ </implements>
+ <method name="AppendName" cname="g_themed_icon_append_name">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="iconname" />
+ </parameters>
+ </method>
+ <method name="GetNames" cname="g_themed_icon_get_names">
+ <return-type type="const-char**" />
+ </method>
+ <method name="GetType" cname="g_themed_icon_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <constructor cname="g_themed_icon_new">
+ <parameters>
+ <parameter type="const-char*" name="iconname" />
+ </parameters>
+ </constructor>
+ <constructor cname="g_themed_icon_new_from_names">
+ <parameters>
+ <parameter type="char**" name="iconnames" />
+ <parameter type="int" name="len" />
+ </parameters>
+ </constructor>
+ <constructor cname="g_themed_icon_new_with_default_fallbacks">
+ <parameters>
+ <parameter type="const-char*" name="iconname" />
+ </parameters>
+ </constructor>
+ <method name="PrependName" cname="g_themed_icon_prepend_name">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="iconname" />
+ </parameters>
+ </method>
+ </object>
+ <object name="Vfs" cname="GVfs" parent="GObject">
+ <virtual_method name="IsActive" cname="is_active">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GVfs*" name="vfs" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetFileForPath" cname="get_file_for_path">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="GVfs*" name="vfs" />
+ <parameter type="const-char*" name="path" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetFileForUri" cname="get_file_for_uri">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="GVfs*" name="vfs" />
+ <parameter type="const-char*" name="uri" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="ParseName" cname="parse_name">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="GVfs*" name="vfs" />
+ <parameter type="const-char*" name="parse_name" />
+ </parameters>
+ </virtual_method>
+ <method name="GetDefault" cname="g_vfs_get_default" shared="true">
+ <return-type type="GVfs*" />
+ </method>
+ <method name="GetFileForPath" cname="g_vfs_get_file_for_path">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="const-char*" name="path" />
+ </parameters>
+ </method>
+ <method name="GetFileForUri" cname="g_vfs_get_file_for_uri">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="const-char*" name="uri" />
+ </parameters>
+ </method>
+ <method name="GetLocal" cname="g_vfs_get_local" shared="true">
+ <return-type type="GVfs*" />
+ </method>
+ <method name="GetSupportedUriSchemes" cname="g_vfs_get_supported_uri_schemes">
+ <return-type type="const-gchar**" />
+ </method>
+ <method name="GetType" cname="g_vfs_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="IsActive" cname="g_vfs_is_active">
+ <return-type type="gboolean" />
+ </method>
+ <method name="ParseName" cname="g_vfs_parse_name">
+ <return-type type="GFile*" />
+ <parameters>
+ <parameter type="const-char*" name="parse_name" />
+ </parameters>
+ </method>
+ </object>
+ <object name="VolumeMonitor" cname="GVolumeMonitor" parent="GObject">
+ <field name="Priv" cname="priv" type="gpointer" />
+ <signal name="VolumeAdded" cname="volume-added" when="LAST" field_name="volume_added">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ <parameter type="GVolume*" name="volume" />
+ </parameters>
+ </signal>
+ <signal name="VolumeRemoved" cname="volume-removed" when="LAST" field_name="volume_removed">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ <parameter type="GVolume*" name="volume" />
+ </parameters>
+ </signal>
+ <signal name="VolumeChanged" cname="volume-changed" when="LAST" field_name="volume_changed">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ <parameter type="GVolume*" name="volume" />
+ </parameters>
+ </signal>
+ <signal name="MountAdded" cname="mount-added" when="LAST" field_name="mount_added">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ <parameter type="GMount*" name="mount" />
+ </parameters>
+ </signal>
+ <signal name="MountRemoved" cname="mount-removed" when="LAST" field_name="mount_removed">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ <parameter type="GMount*" name="mount" />
+ </parameters>
+ </signal>
+ <signal name="MountPreUnmount" cname="mount-pre-unmount" when="LAST" field_name="mount_pre_unmount">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ <parameter type="GMount*" name="mount" />
+ </parameters>
+ </signal>
+ <signal name="MountChanged" cname="mount-changed" when="LAST" field_name="mount_changed">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ <parameter type="GMount*" name="mount" />
+ </parameters>
+ </signal>
+ <signal name="DriveConnected" cname="drive-connected" when="LAST" field_name="drive_connected">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </signal>
+ <signal name="DriveDisconnected" cname="drive-disconnected" when="LAST" field_name="drive_disconnected">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </signal>
+ <signal name="DriveChanged" cname="drive-changed" when="LAST" field_name="drive_changed">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </signal>
+ <virtual_method name="IsSupported" cname="is_supported">
+ <return-type type="gboolean" />
+ </virtual_method>
+ <virtual_method name="GetConnectedDrives" cname="get_connected_drives">
+ <return-type type="GList*" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetVolumes" cname="get_volumes">
+ <return-type type="GList*" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetMounts" cname="get_mounts">
+ <return-type type="GList*" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetVolumeForUuid" cname="get_volume_for_uuid">
+ <return-type type="GVolume*" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ <parameter type="const-char*" name="uuid" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetMountForUuid" cname="get_mount_for_uuid">
+ <return-type type="GMount*" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ <parameter type="const-char*" name="uuid" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="AdoptOrphanMount" cname="adopt_orphan_mount">
+ <return-type type="GVolume*" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ </parameters>
+ </virtual_method>
+ <signal name="DriveEjectButton" cname="drive-eject-button" when="LAST" field_name="drive_eject_button">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </signal>
+ <method name="AdoptOrphanMount" cname="g_volume_monitor_adopt_orphan_mount" shared="true">
+ <return-type type="GVolume*" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ </parameters>
+ </method>
+ <method name="Get" cname="g_volume_monitor_get" shared="true">
+ <return-type type="GVolumeMonitor*" />
+ </method>
+ <method name="GetConnectedDrives" cname="g_volume_monitor_get_connected_drives">
+ <return-type type="GList*" />
+ </method>
+ <method name="GetMountForUuid" cname="g_volume_monitor_get_mount_for_uuid">
+ <return-type type="GMount*" />
+ <parameters>
+ <parameter type="const-char*" name="uuid" />
+ </parameters>
+ </method>
+ <method name="GetMounts" cname="g_volume_monitor_get_mounts">
+ <return-type type="GList*" />
+ </method>
+ <method name="GetType" cname="g_volume_monitor_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="GetVolumeForUuid" cname="g_volume_monitor_get_volume_for_uuid">
+ <return-type type="GVolume*" />
+ <parameters>
+ <parameter type="const-char*" name="uuid" />
+ </parameters>
+ </method>
+ <method name="GetVolumes" cname="g_volume_monitor_get_volumes">
+ <return-type type="GList*" />
+ </method>
+ </object>
+ <struct name="FileAttributeInfo" cname="GFileAttributeInfo">
+ <field name="Name" cname="name" type="char*" />
+ <field name="Type" cname="type" type="GFileAttributeType" />
+ <field name="Flags" cname="flags" type="GFileAttributeInfoFlags" />
+ </struct>
+ <struct name="FileAttributeInfoList" cname="GFileAttributeInfoList" opaque="true">
+ <field name="Infos" cname="infos" type="GFileAttributeInfo*" access="public" writeable="true" />
+ <field name="NInfos" cname="n_infos" type="int" access="public" writeable="true" />
+ <method name="Add" cname="g_file_attribute_info_list_add">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="name" />
+ <parameter type="GFileAttributeType" name="type" />
+ <parameter type="GFileAttributeInfoFlags" name="flags" />
+ </parameters>
+ </method>
+ <method name="Dup" cname="g_file_attribute_info_list_dup">
+ <return-type type="GFileAttributeInfoList*" />
+ </method>
+ <method name="Lookup" cname="g_file_attribute_info_list_lookup">
+ <return-type type="const-GFileAttributeInfo*" />
+ <parameters>
+ <parameter type="const-char*" name="name" />
+ </parameters>
+ </method>
+ <constructor cname="g_file_attribute_info_list_new" />
+ <method name="Ref" cname="g_file_attribute_info_list_ref">
+ <return-type type="GFileAttributeInfoList*" />
+ </method>
+ <method name="Unref" cname="g_file_attribute_info_list_unref">
+ <return-type type="void" />
+ </method>
+ </struct>
+ <struct name="FileAttributeMatcher" cname="GFileAttributeMatcher" opaque="true">
+ <method name="EnumerateNamespace" cname="g_file_attribute_matcher_enumerate_namespace">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="ns" />
+ </parameters>
+ </method>
+ <method name="EnumerateNext" cname="g_file_attribute_matcher_enumerate_next">
+ <return-type type="const-char*" />
+ </method>
+ <method name="Matches" cname="g_file_attribute_matcher_matches">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ </parameters>
+ </method>
+ <method name="MatchesOnly" cname="g_file_attribute_matcher_matches_only">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ </parameters>
+ </method>
+ <constructor cname="g_file_attribute_matcher_new">
+ <parameters>
+ <parameter type="const-char*" name="attributes" />
+ </parameters>
+ </constructor>
+ <method name="Ref" cname="g_file_attribute_matcher_ref">
+ <return-type type="GFileAttributeMatcher*" />
+ </method>
+ <method name="Unref" cname="g_file_attribute_matcher_unref">
+ <return-type type="void" />
+ </method>
+ </struct>
+ <struct name="IOExtension" cname="GIOExtension" opaque="true">
+ <method name="GetName" cname="g_io_extension_get_name">
+ <return-type type="const-char*" />
+ </method>
+ <method name="GetPriority" cname="g_io_extension_get_priority">
+ <return-type type="gint" />
+ </method>
+ <method name="GetType" cname="g_io_extension_get_type">
+ <return-type type="GType" />
+ </method>
+ <method name="RefClass" cname="g_io_extension_ref_class">
+ <return-type type="GTypeClass*" />
+ </method>
+ </struct>
+ <struct name="IOExtensionPoint" cname="GIOExtensionPoint" opaque="true">
+ <method name="GetExtensionByName" cname="g_io_extension_point_get_extension_by_name">
+ <return-type type="GIOExtension*" />
+ <parameters>
+ <parameter type="const-char*" name="name" />
+ </parameters>
+ </method>
+ <method name="GetExtensions" cname="g_io_extension_point_get_extensions">
+ <return-type type="GList*" />
+ </method>
+ <method name="GetRequiredType" cname="g_io_extension_point_get_required_type">
+ <return-type type="GType" />
+ </method>
+ <method name="Implement" cname="g_io_extension_point_implement" shared="true">
+ <return-type type="GIOExtension*" />
+ <parameters>
+ <parameter type="const-char*" name="extension_point_name" />
+ <parameter type="GType" name="type" />
+ <parameter type="const-char*" name="extension_name" />
+ <parameter type="gint" name="priority" />
+ </parameters>
+ </method>
+ <method name="Lookup" cname="g_io_extension_point_lookup" shared="true">
+ <return-type type="GIOExtensionPoint*" />
+ <parameters>
+ <parameter type="const-char*" name="name" />
+ </parameters>
+ </method>
+ <method name="Register" cname="g_io_extension_point_register" shared="true">
+ <return-type type="GIOExtensionPoint*" />
+ <parameters>
+ <parameter type="const-char*" name="name" />
+ </parameters>
+ </method>
+ <method name="SetRequiredType" cname="g_io_extension_point_set_required_type">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GType" name="type" />
+ </parameters>
+ </method>
+ </struct>
+ <struct name="IOSchedulerJob" cname="GIOSchedulerJob" opaque="true">
+ <method name="SendToMainloop" cname="g_io_scheduler_job_send_to_mainloop">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GSourceFunc" name="func" />
+ <parameter type="gpointer" name="user_data" />
+ <parameter type="GDestroyNotify" name="notify" />
+ </parameters>
+ </method>
+ <method name="SendToMainloopAsync" cname="g_io_scheduler_job_send_to_mainloop_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GSourceFunc" name="func" />
+ <parameter type="gpointer" name="user_data" />
+ <parameter type="GDestroyNotify" name="notify" />
+ </parameters>
+ </method>
+ </struct>
+ <class name="Content" cname="GContent_">
+ <method name="TypeCanBeExecutable" cname="g_content_type_can_be_executable" shared="true">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="type" />
+ </parameters>
+ </method>
+ <method name="TypeEquals" cname="g_content_type_equals" shared="true">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="type1" />
+ <parameter type="const-char*" name="type2" />
+ </parameters>
+ </method>
+ <method name="TypeFromMimeType" cname="g_content_type_from_mime_type" shared="true">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="const-char*" name="mime_type" />
+ </parameters>
+ </method>
+ <method name="TypeGetDescription" cname="g_content_type_get_description" shared="true">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="const-char*" name="type" />
+ </parameters>
+ </method>
+ <method name="TypeGetIcon" cname="g_content_type_get_icon" shared="true">
+ <return-type type="GIcon*" />
+ <parameters>
+ <parameter type="const-char*" name="type" />
+ </parameters>
+ </method>
+ <method name="TypeGetMimeType" cname="g_content_type_get_mime_type" shared="true">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="const-char*" name="type" />
+ </parameters>
+ </method>
+ <method name="TypeGuess" cname="g_content_type_guess" shared="true">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="const-char*" name="filename" />
+ <parameter type="const-guchar*" name="data" />
+ <parameter type="gsize" name="data_size" />
+ <parameter type="gboolean*" name="result_uncertain" />
+ </parameters>
+ </method>
+ <method name="TypeGuessForTree" cname="g_content_type_guess_for_tree" shared="true">
+ <return-type type="char**" />
+ <parameters>
+ <parameter type="GFile*" name="root" />
+ </parameters>
+ </method>
+ <method name="TypeIsA" cname="g_content_type_is_a" shared="true">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="type" />
+ <parameter type="const-char*" name="supertype" />
+ </parameters>
+ </method>
+ <method name="TypeIsUnknown" cname="g_content_type_is_unknown" shared="true">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="type" />
+ </parameters>
+ </method>
+ <method name="TypesGetRegistered" cname="g_content_types_get_registered" shared="true">
+ <return-type type="GList*" />
+ </method>
+ </class>
+ <class name="Io" cname="GIo_">
+ <method name="ErrorFromErrno" cname="g_io_error_from_errno" shared="true">
+ <return-type type="GIOErrorEnum" />
+ <parameters>
+ <parameter type="gint" name="err_no" />
+ </parameters>
+ </method>
+ <method name="ErrorQuark" cname="g_io_error_quark" shared="true">
+ <return-type type="GQuark" />
+ </method>
+ <method name="ModulesLoadAllInDirectory" cname="g_io_modules_load_all_in_directory" shared="true">
+ <return-type type="GList*" />
+ <parameters>
+ <parameter type="const-gchar*" name="dirname" />
+ </parameters>
+ </method>
+ <method name="SchedulerCancelAllJobs" cname="g_io_scheduler_cancel_all_jobs" shared="true">
+ <return-type type="void" />
+ </method>
+ <method name="SchedulerPushJob" cname="g_io_scheduler_push_job" shared="true">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GIOSchedulerJobFunc" name="job_func" />
+ <parameter type="gpointer" name="user_data" />
+ <parameter type="GDestroyNotify" name="notify" />
+ <parameter type="gint" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ </parameters>
+ </method>
+ </class>
+ <class name="Simple" cname="GSimple_">
+ <method name="AsyncReportErrorInIdle" cname="g_simple_async_report_error_in_idle" shared="true">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GObject*" name="object" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ <parameter type="GQuark" name="domain" />
+ <parameter type="gint" name="code" />
+ <parameter type="const-char*" name="format" />
+ <parameter ellipsis="true" />
+ </parameters>
+ </method>
+ <method name="AsyncReportGerrorInIdle" cname="g_simple_async_report_gerror_in_idle" shared="true">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GObject*" name="object" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ <parameter type="GError*" name="error" />
+ </parameters>
+ </method>
+ </class>
+ </namespace>
+</api>
\ No newline at end of file
diff --git a/gio-sharp/gio/gtk-sharp.snk b/gio-sharp/gio/gtk-sharp.snk
new file mode 100755
index 0000000..03fc770
Binary files /dev/null and b/gio-sharp/gio/gtk-sharp.snk differ
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]