From 54bc72e0a394db6288bdf78fc5182c9adc1b1d16 Mon Sep 17 00:00:00 2001
From: Mike Kestner <mkestner@gmail.com>
Date: Sat, 28 Apr 2007 16:42:10 +0000
Subject: [PATCH] 2007-04-28  Mike Kestner  <mkestner@novell.com>

	* generator/NativeCallbackSignature.cs :
	* generator/Signal.cs : don't use ref IntPtr in native callback sigs
	for struct parameters.  Use IntPtr and StructureToPtr.  Fixes the
	layout issues in MD introduced by the structure marshaling rework.

svn path=/trunk/gtk-sharp/; revision=76433
---
 ChangeLog                            | 7 +++++++
 generator/NativeCallbackSignature.cs | 2 +-
 generator/Signal.cs                  | 9 +++++----
 3 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 08ef141ff..5541e4f52 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-04-28  Mike Kestner  <mkestner@novell.com>
+
+	* generator/NativeCallbackSignature.cs :
+	* generator/Signal.cs : don't use ref IntPtr in native callback sigs
+	for struct parameters.  Use IntPtr and StructureToPtr.  Fixes the 
+	layout issues in MD introduced by the structure marshaling rework.
+
 2007-04-24  Aaron Bockover  <abockover@novell.com>
 
 	* gtk/Widget.custom (StyleGetProperty): return null if 
diff --git a/generator/NativeCallbackSignature.cs b/generator/NativeCallbackSignature.cs
index d62fb390c..ed97ef502 100644
--- a/generator/NativeCallbackSignature.cs
+++ b/generator/NativeCallbackSignature.cs
@@ -45,7 +45,7 @@ namespace GtkSharp.Generation {
 				parms [i] = "";
 				if (p.CType == "GError**")
 					parms [i] += "out ";
-				else if (p.PassAs != "")
+				else if (p.PassAs != "" && !(p.Generatable is StructBase))
 					parms [i] += p.PassAs + " ";
 				parms [i] += p.NativeCallbackType + " " + p.Name;
 			}
diff --git a/generator/Signal.cs b/generator/Signal.cs
index 92c9c18b4..77957b3a1 100644
--- a/generator/Signal.cs
+++ b/generator/Signal.cs
@@ -98,9 +98,10 @@ namespace GtkSharp.Generation {
 					if (i > 0)
 						result += ", ";
 
-					if (parms[i].PassAs != "")
-						result += parms[i].PassAs + " ";
-					result += (parms[i].NativeCallbackType + " arg" + i);
+					Parameter p = parms [i];
+					if (p.PassAs != "" && !(p.Generatable is StructBase))
+						result += p.PassAs + " ";
+					result += (p.NativeCallbackType + " arg" + i);
 				}
 				result += ", IntPtr gch";
 
@@ -229,7 +230,7 @@ namespace GtkSharp.Generation {
 					} else
 						sw.WriteLine("\t\t\t\targs.Args[" + (idx - 1) + "] = " + p.FromNative ("arg" + idx)  + ";");
 				}
-				if (igen is StructBase)
+				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";