2004-02-16 Mike Kestner <mkestner@ximian.com>

* glib/TypeConverter.cs : check for GType prop on all types,
	not just value types, before we fall back to managed values.
	* glib/Value.cs : use handle to set_boxed for IWrappers.

svn path=/trunk/gtk-sharp/; revision=23158
This commit is contained in:
Mike Kestner 2004-02-17 05:09:13 +00:00
parent 320c4f713d
commit 46b9b156a4
3 changed files with 16 additions and 8 deletions

View File

@ -1,3 +1,9 @@
2004-02-16 Mike Kestner <mkestner@ximian.com>
* glib/TypeConverter.cs : check for GType prop on all types,
not just value types, before we fall back to managed values.
* glib/Value.cs : use handle to set_boxed for IWrappers.
2004-02-16 Mike Kestner <mkestner@ximian.com> 2004-02-16 Mike Kestner <mkestner@ximian.com>
* gdk/EventKey.cs : add a Key prop to return casted KeyVals. * gdk/EventKey.cs : add a Key prop to return casted KeyVals.

View File

@ -39,13 +39,11 @@ namespace GLibSharp {
return GType.UInt; return GType.UInt;
if (type.IsSubclassOf (typeof (GLib.Object))) if (type.IsSubclassOf (typeof (GLib.Object)))
return GType.Object; return GType.Object;
if (type.IsValueType) { PropertyInfo pi = type.GetProperty ("GType", BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);
PropertyInfo pi = type.GetProperty ("GType"); if (pi != null)
if (pi == null) return (GType) pi.GetValue (null, null);
return GType.Pointer; if (type.IsValueType)
else return GType.Pointer;
return (GType) pi.GetValue (null, null);
}
return GType.None; return GType.None;
} }

View File

@ -372,7 +372,7 @@ namespace GLib {
} else { } else {
_val = gtksharp_value_create (type.Val); _val = gtksharp_value_create (type.Val);
} }
if (type == GType.None) if (type == GType.None)
g_value_set_boxed (_val, ManagedValue.WrapObject (obj)); g_value_set_boxed (_val, ManagedValue.WrapObject (obj));
else if (type == GType.String) else if (type == GType.String)
@ -396,6 +396,10 @@ namespace GLib {
Marshal.StructureToPtr (obj, buf, false); Marshal.StructureToPtr (obj, buf, false);
g_value_set_pointer (_val, buf); g_value_set_pointer (_val, buf);
} else if (g_type_is_a (type.Val, GLib.GType.Boxed.Val)) { } else if (g_type_is_a (type.Val, GLib.GType.Boxed.Val)) {
if (obj is IWrapper) {
g_value_set_boxed (_val, ((IWrapper)obj).Handle);
return;
}
buf = Marshal.AllocHGlobal (Marshal.SizeOf (obj.GetType())); buf = Marshal.AllocHGlobal (Marshal.SizeOf (obj.GetType()));
Marshal.StructureToPtr (obj, buf, false); Marshal.StructureToPtr (obj, buf, false);
g_value_set_boxed (_val, buf); g_value_set_boxed (_val, buf);