From e7a4cbea59d16830279d62742813ace98fe16725 Mon Sep 17 00:00:00 2001 From: Stephane Delcroix Date: Mon, 27 Oct 2008 15:08:02 +0000 Subject: [PATCH] 2008-10-27 Stephane Delcroix * glib/ListBase.cs: DataMarshal: create the right object for *Adapter list items. svn path=/trunk/gtk-sharp/; revision=117169 --- ChangeLog | 5 +++++ glib/ListBase.cs | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 095af228d..2e99b99b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-10-27 Stephane Delcroix + + * glib/ListBase.cs: DataMarshal: create the right object for *Adapter + list items. + 2008-10-08 Mike Gorse * atk/Object.custom: Pass Handle in EmitChildrenChanged (fix critical) diff --git a/glib/ListBase.cs b/glib/ListBase.cs index 2b7875650..e51abf984 100644 --- a/glib/ListBase.cs +++ b/glib/ListBase.cs @@ -169,7 +169,11 @@ namespace GLib { ret = (int) data; else if (element_type.IsValueType) ret = Marshal.PtrToStructure (data, element_type); - else + else if (element_type.IsInterface) { + Type adapter_type = element_type.Assembly.GetType (element_type.FullName + "Adapter"); + System.Reflection.MethodInfo method = adapter_type.GetMethod ("GetObject", new Type[] {typeof(IntPtr), typeof(bool)}); + ret = method.Invoke (null, new object[] {data, false}); + } else ret = Activator.CreateInstance (element_type, new object[] {data}); } else if (Object.IsObject (data))