diff --git a/ChangeLog b/ChangeLog index b7a21ecf7..227354cd9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-06-09 Andrés G. Aragoneses + + * atk/Object.custom: + * atk/glue/object.c: + Temporary workaround for infinite recursion issue. + 2008-06-06 Andrés G. Aragoneses * glib/glue/thread.c: Fix a warning. diff --git a/atk/Object.custom b/atk/Object.custom index ff5e889a6..31af442c0 100644 --- a/atk/Object.custom +++ b/atk/Object.custom @@ -110,7 +110,7 @@ static extern void atksharp_object_override_ref_state_set (IntPtr type, RefStateSetDelegate cb); [DllImport("atksharpglue-2")] - static extern IntPtr atksharp_object_base_ref_state_set (IntPtr atk_obj); + static extern IntPtr atksharp_object_base_ref_state_set (IntPtr atk_obj, IntPtr gtype); [GLib.CDeclCallback] delegate IntPtr RefStateSetDelegate (IntPtr raw); @@ -142,7 +142,8 @@ [GLib.DefaultSignalHandler (Type=typeof(Atk.Object), ConnectionMethod="OverrideRefStateSet")] protected virtual Atk.StateSet OnRefStateSet () { - IntPtr raw = atksharp_object_base_ref_state_set (Handle); + IntPtr raw = atksharp_object_base_ref_state_set (Handle, GLib.GType.FromName("AtkObject").Val); return GLib.Object.GetObject (raw, true) as StateSet; } + diff --git a/atk/glue/object.c b/atk/glue/object.c index f528dd102..c4dee2201 100644 --- a/atk/glue/object.c +++ b/atk/glue/object.c @@ -28,7 +28,7 @@ void atksharp_object_override_ref_child (GType gtype, gpointer cb); void atksharp_object_override_ref_state_set (GType gtype, gpointer cb); -AtkStateSet* atksharp_object_base_ref_state_set (AtkObject *base); +AtkStateSet* atksharp_object_base_ref_state_set (AtkObject *base, GType gtype); void @@ -59,9 +59,11 @@ atksharp_object_override_ref_state_set (GType gtype, gpointer cb) } AtkStateSet* -atksharp_object_base_ref_state_set (AtkObject *atk_obj) +atksharp_object_base_ref_state_set (AtkObject *atk_obj, GType gtype) { - AtkObjectClass *parent = g_type_class_peek_parent (G_OBJECT_GET_CLASS (atk_obj)); + //FIXME: find a cleaner way of doing this (it comes from a managed call to GType.FromName() : + AtkObjectClass *parent = g_type_class_peek (gtype); + if (parent->ref_state_set) return (*parent->ref_state_set) (atk_obj); return NULL;