diff --git a/ChangeLog b/ChangeLog index cb40f4749..8be1a7c36 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-09-19 Mike Kestner + + * generator/VirtualMethod.cs: refactor delegate generation into + GenerateCallback and add [CDeclCallback] which was missing. + * generator/InterfaceGen.cs: kill GenerateDelegates. They are now + generated by VirtualMethod.GenerateCallback. + 2007-09-14 Mike Kestner * generator/CallbackGen.cs (GenInvoker): null check the sig field diff --git a/generator/InterfaceGen.cs b/generator/InterfaceGen.cs index abea6e7e7..174d64cbc 100644 --- a/generator/InterfaceGen.cs +++ b/generator/InterfaceGen.cs @@ -3,7 +3,7 @@ // Author: Mike Kestner // // Copyright (c) 2001-2003 Mike Kestner -// Copyright (c) 2004 Novell, Inc. +// 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 @@ -75,18 +75,6 @@ namespace GtkSharp.Generation { } } - void GenerateDelegates (StreamWriter sw) - { - if (vms.Count == 0) - return; - - foreach (VirtualMethod vm in vms) { - if (vm.IsValid) - sw.WriteLine ("\t\t" + vm.NativeDelegate); - } - sw.WriteLine (); - } - void GenerateIfaceStruct (StreamWriter sw) { sw.WriteLine ("\t\tstatic " + IfaceName + " iface;"); @@ -184,7 +172,6 @@ namespace GtkSharp.Generation { sw.WriteLine ("\tinternal class " + Name + "Adapter : GLib.GInterfaceAdapter {"); sw.WriteLine (); - GenerateDelegates (sw); GenerateIfaceStruct (sw); GenerateStaticCtor (sw); GenerateCallbacks (sw); diff --git a/generator/VirtualMethod.cs b/generator/VirtualMethod.cs index a167300d0..3f658ff37 100644 --- a/generator/VirtualMethod.cs +++ b/generator/VirtualMethod.cs @@ -83,12 +83,6 @@ namespace GtkSharp.Generation { } } - public string NativeDelegate { - get { - return "delegate " + MarshalReturnType + " " + Name + "Delegate (" + parms.ImportSignature + ");"; - } - } - public void GenerateCallback (StreamWriter sw) { if (!Validate ()) @@ -102,6 +96,10 @@ namespace GtkSharp.Generation { 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{"); sw.WriteLine ("\t\t\t" + type + " __obj = GLib.Object.GetObject (" + name + ", false) as " + type + ";");