2008-01-24 Lluis Sanchez Gual <lluis@novell.com>

* 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
This commit is contained in:
Lluis Sanchez 2008-01-23 23:54:02 +00:00
parent a1b5081559
commit b40365eafb
2 changed files with 36 additions and 25 deletions

View File

@ -1,3 +1,10 @@
2008-01-24 Lluis Sanchez Gual <lluis@novell.com>
* 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 <mkestner@novell.com> 2008-01-23 Mike Kestner <mkestner@novell.com>
* bootstrap-2.12: update version and tag 2.11.91. * bootstrap-2.12: update version and tag 2.11.91.

View File

@ -352,38 +352,42 @@
private void BindFields (object target, Type type) 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) if (target != null)
flags |= System.Reflection.BindingFlags.Instance; flags |= System.Reflection.BindingFlags.Instance;
else else
flags |= System.Reflection.BindingFlags.Static; flags |= System.Reflection.BindingFlags.Static;
System.Reflection.FieldInfo[] fields = type.GetFields (flags); do {
if (fields == null) System.Reflection.FieldInfo[] fields = type.GetFields (flags);
return; if (fields == null)
return;
foreach (System.Reflection.FieldInfo field in fields)
{ foreach (System.Reflection.FieldInfo field in fields)
object[] attrs = field.GetCustomAttributes (typeof (WidgetAttribute), false); {
if (attrs == null || attrs.Length == 0) object[] attrs = field.GetCustomAttributes (typeof (WidgetAttribute), false);
continue; if (attrs == null || attrs.Length == 0)
// The widget to field binding must be 1:1, so only check continue;
// the first attribute. // The widget to field binding must be 1:1, so only check
WidgetAttribute attr = (WidgetAttribute) attrs[0]; // the first attribute.
Gtk.Widget widget; WidgetAttribute attr = (WidgetAttribute) attrs[0];
if (attr.Specified) Gtk.Widget widget;
widget = GetWidget (attr.Name); if (attr.Specified)
else widget = GetWidget (attr.Name);
widget = GetWidget (field.Name); else
widget = GetWidget (field.Name);
if (widget != null) if (widget != null)
try { try {
field.SetValue (target, widget, flags, null, null); field.SetValue (target, widget, flags, null, null);
} catch (Exception e) { } catch (Exception e) {
Console.WriteLine ("Unable to set value for field " + field.Name); Console.WriteLine ("Unable to set value for field " + field.Name);
throw e; throw e;
} }
}
type = type.BaseType;
} }
while (type != typeof(object) && type != null);
} }
public void BindFields (object target) public void BindFields (object target)