[f-spot: 2/8] bundle gio-sharp



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 &lt;&lt; 0" />
+      <member cname="G_APP_INFO_CREATE_SUPPORTS_URIS" name="SupportsUris" value="1 &lt;&lt; 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 &lt;&lt; 0" />
+      <member cname="G_ASK_PASSWORD_NEED_USERNAME" name="NeedUsername" value="1 &lt;&lt; 1" />
+      <member cname="G_ASK_PASSWORD_NEED_DOMAIN" name="NeedDomain" value="1 &lt;&lt; 2" />
+      <member cname="G_ASK_PASSWORD_SAVING_SUPPORTED" name="SavingSupported" value="1 &lt;&lt; 3" />
+      <member cname="G_ASK_PASSWORD_ANONYMOUS_SUPPORTED" name="AnonymousSupported" value="1 &lt;&lt; 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 &lt;&lt; 0" />
+      <member cname="G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED" name="CopyWhenMoved" value="1 &lt;&lt; 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 &lt;&lt; 0" />
+      <member cname="G_FILE_COPY_BACKUP" name="Backup" value="1 &lt;&lt; 1" />
+      <member cname="G_FILE_COPY_NOFOLLOW_SYMLINKS" name="NofollowSymlinks" value="1 &lt;&lt; 2" />
+      <member cname="G_FILE_COPY_ALL_METADATA" name="AllMetadata" value="1 &lt;&lt; 3" />
+      <member cname="G_FILE_COPY_NO_FALLBACK_FOR_MOVE" name="NoFallbackForMove" value="1 &lt;&lt; 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 &lt;&lt; 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 &lt;&lt; 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 &lt;&lt; 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 &lt;&lt; 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 &lt;&lt; 0" />
+      <member cname="G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET" name="CloseTarget" value="1 &lt;&lt; 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]