From b40365eafb7bde6c12c0e34428e1bf1bae9d686b Mon Sep 17 00:00:00 2001 From: Lluis Sanchez Date: Wed, 23 Jan 2008 23:54:02 +0000 Subject: [PATCH] 2008-01-24 Lluis Sanchez Gual * glade/XML.custom: due to a recent Mono fix (bug #322762), Type.GetFields does not return private fields from base classes anymore, so the BindFields now has to go through the class hierarchy to get all fields. svn path=/trunk/gtk-sharp/; revision=93742 --- ChangeLog | 7 +++++++ glade/XML.custom | 54 ++++++++++++++++++++++++++---------------------- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/ChangeLog b/ChangeLog index 06cb20284..048612a3e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-01-24 Lluis Sanchez Gual + + * glade/XML.custom: due to a recent Mono fix (bug #322762), + Type.GetFields does not return private fields from base classes + anymore, so the BindFields now has to go through the class + hierarchy to get all fields. + 2008-01-23 Mike Kestner * bootstrap-2.12: update version and tag 2.11.91. diff --git a/glade/XML.custom b/glade/XML.custom index 68b91415f..d713e4ffd 100644 --- a/glade/XML.custom +++ b/glade/XML.custom @@ -352,38 +352,42 @@ private void BindFields (object target, Type type) { - System.Reflection.BindingFlags flags = System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic; + System.Reflection.BindingFlags flags = System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.DeclaredOnly; if (target != null) flags |= System.Reflection.BindingFlags.Instance; else flags |= System.Reflection.BindingFlags.Static; - System.Reflection.FieldInfo[] fields = type.GetFields (flags); - if (fields == null) - return; - - foreach (System.Reflection.FieldInfo field in fields) - { - object[] attrs = field.GetCustomAttributes (typeof (WidgetAttribute), false); - if (attrs == null || attrs.Length == 0) - continue; - // The widget to field binding must be 1:1, so only check - // the first attribute. - WidgetAttribute attr = (WidgetAttribute) attrs[0]; - Gtk.Widget widget; - if (attr.Specified) - widget = GetWidget (attr.Name); - else - widget = GetWidget (field.Name); + do { + System.Reflection.FieldInfo[] fields = type.GetFields (flags); + if (fields == null) + return; + + foreach (System.Reflection.FieldInfo field in fields) + { + object[] attrs = field.GetCustomAttributes (typeof (WidgetAttribute), false); + if (attrs == null || attrs.Length == 0) + continue; + // The widget to field binding must be 1:1, so only check + // the first attribute. + WidgetAttribute attr = (WidgetAttribute) attrs[0]; + Gtk.Widget widget; + if (attr.Specified) + widget = GetWidget (attr.Name); + else + widget = GetWidget (field.Name); - if (widget != null) - try { - field.SetValue (target, widget, flags, null, null); - } catch (Exception e) { - Console.WriteLine ("Unable to set value for field " + field.Name); - throw e; - } + if (widget != null) + try { + field.SetValue (target, widget, flags, null, null); + } catch (Exception e) { + Console.WriteLine ("Unable to set value for field " + field.Name); + throw e; + } + } + type = type.BaseType; } + while (type != typeof(object) && type != null); } public void BindFields (object target)