diff --git a/ChangeLog b/ChangeLog index 3abe6d506..5c4a82a29 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,11 +1,19 @@ +2005-01-28 Mike Kestner + + * generator/ReturnValue.cs : use ToNativeReturnType for ToNativeType + instead of MarshalType. + * generator/Signal.cs : deal with boxed return values. beef up return + handling in the default handler generation code. + * generator/SignalHandler.cs : use ToNative return types for native + callbacks. Remove redundant casting/conversion in callback impl. + [Fixes #71899] + 2005-01-28 Dan Winship * glib/Object.cs (AddNotification, RemoveNotification): methods to subscribe to the "notify" signal (with property details). [#71684] - * glib/GLibSharp.voidObjectIntPtrSignal.cs: autogenerated, for notifications - * glib/NotifyHandler.cs: sort of autogenerated 2005-01-28 Mike Kestner diff --git a/generator/ReturnValue.cs b/generator/ReturnValue.cs index 702d3c277..bf4d062c2 100644 --- a/generator/ReturnValue.cs +++ b/generator/ReturnValue.cs @@ -71,7 +71,7 @@ namespace GtkSharp.Generation { public string ToNativeType { get { - return SymbolTable.Table.GetMarshalType (CType) + (IsArray ? "[]" : String.Empty); + return SymbolTable.Table.GetToNativeReturnType (CType) + (IsArray ? "[]" : String.Empty); } } diff --git a/generator/Signal.cs b/generator/Signal.cs index 56977059b..50cccccdd 100644 --- a/generator/Signal.cs +++ b/generator/Signal.cs @@ -130,6 +130,8 @@ namespace GtkSharp.Generation { if (igen is ObjectGen) return "GLib.GType.Object"; + if (igen is BoxedGen) + return retval.CSType + ".GType"; switch (retval.CSType) { case "bool": @@ -237,9 +239,11 @@ namespace GtkSharp.Generation { sw.WriteLine ("\t\t{"); sw.WriteLine ("\t\t\t{0} obj = GLib.Object.GetObject ({1}, false) as {0};", implementor != null ? implementor.Name : container_type.Name, parms[0].Name); sw.Write (call.Setup ("\t\t\t")); - sw.Write ("\t\t\t{0}", IsVoid ? "" : "return "); + sw.Write ("\t\t\t{0}", IsVoid ? "" : retval.CSType == retval.ToNativeType ? "return " : retval.CSType + " raw_ret = "); sw.WriteLine ("obj.{0} ({1});", "On" + Name, call.ToString ()); sw.Write (call.Finish ("\t\t\t")); + if (!IsVoid && retval.CSType != retval.ToNativeType) + sw.WriteLine ("\t\t\treturn {0};", SymbolTable.Table.ToNativeReturn (retval.CType, "raw_ret")); sw.WriteLine ("\t\t}\n"); string cname = "\"" + elem.GetAttribute("cname") + "\""; sw.WriteLine ("\t\tprivate static void Override" + Name + " (GLib.GType gtype)"); diff --git a/generator/SignalHandler.cs b/generator/SignalHandler.cs index 7bd5b5039..d1630aa37 100644 --- a/generator/SignalHandler.cs +++ b/generator/SignalHandler.cs @@ -120,14 +120,14 @@ namespace GtkSharp.Generation { sw.WriteLine("\tusing System;"); sw.WriteLine("\tusing System.Runtime.InteropServices;"); sw.WriteLine(); - sw.Write("\tinternal delegate " + retval.MarshalType + " "); + sw.Write("\tinternal delegate " + retval.ToNativeType + " "); sw.WriteLine(DelegateName + "(" + ISig + ", int key);"); sw.WriteLine(); sw.WriteLine("\tinternal class " + Name + " : GLib.SignalCallback {"); sw.WriteLine(); sw.WriteLine("\t\tprivate static " + DelegateName + " _Delegate;"); sw.WriteLine(); - sw.Write("\t\tprivate static " + retval.MarshalType + " "); + sw.Write("\t\tprivate static " + retval.ToNativeType + " "); sw.WriteLine(CallbackName + "(" + ISig + ", int key)"); sw.WriteLine("\t\t{"); sw.WriteLine("\t\t\tif (!_Instances.Contains(key))"); @@ -179,7 +179,7 @@ namespace GtkSharp.Generation { else sw.WriteLine ("\t\t\t\tthrow new Exception(\"args.RetVal unset in callback\");"); - sw.WriteLine("\t\t\treturn (" + retval.MarshalType + ") " + table.ToNativeReturn (retval.CType, "((" + retval.CSType + ")args.RetVal)") + ";"); + sw.WriteLine("\t\t\treturn " + table.ToNativeReturn (retval.CType, "((" + retval.CSType + ")args.RetVal)") + ";"); } sw.WriteLine("\t\t}"); sw.WriteLine();