[g-a-devel] getIndexInParent ...



Hi there,

	So - this is my analysis of the getIndexInParent problem I'm seeing in
at-poke:

	I'm getting this trace (gtk-demo) - with locked at-poke etc.

#65 0x4098a65a in spi_atk_bridge_property_event_listener
(signal_hint=0xbede3208, n_param_values=2, param_values=0x8fd5368,
data=0x80cd1c8)
    at bridge.c:802
...
#69 0x405fc226 in atk_object_notify (obj=0x8fd5368, pspec=0x0) at
atkobject.c:1292
...
#79 0x40618193 in g_object_notify ()
from /opt/gnome/lib/libgobject-2.0.so.0
#80 0x405fadf6 in atk_object_set_parent (accessible=Variable
"accessible" is not available.
) at atkobject.c:881
#81 0x4094dd9e in gail_button_real_initialize ()
from /opt/gnome/lib/gtk-2.0/modules/libgail.so
#82 0x405fabde in atk_object_initialize (accessible=Variable
"accessible" is not available.
) at atkobject.c:1272
#83 0x4094bf66 in gail_button_new ()
from /opt/gnome/lib/gtk-2.0/modules/libgail.so
#84 0x409460b2 in gail_button_factory_create_accessible ()
from /opt/gnome/lib/gtk-2.0/modules/libgail.so
#85 0x405fc94e in atk_object_factory_create_accessible (factory=Variable
"factory" is not available.
) at atkobjectfactory.c:85
#86 0x4030b480 in gtk_widget_real_get_accessible (widget=0x81045e8) at
gtkwidget.c:7284
#87 0x4030b414 in gtk_widget_get_accessible (widget=0x81045e8) at
gtkwidget.c:7266
...
#94 0x40a17e46 in impl_accessibility_accessible_get_index_in_parent
(servant=0xfffffffc, ev=0xbede3f90) at accessible.c:273
#95 0x40a15101 in
_ORBIT_skel_small_Accessibility_Accessible_getIndexInParent
(_o_servant=0x8fd4dec, _o_retval=0x7fffffff, _o_args=0x0, 
    _o_ctx=0xbede3e40, _o_ev=0xbede3f90,
_impl_getIndexInParent=0x40a17e20
<impl_accessibility_accessible_get_index_in_parent>)
    at Accessibility-common.c:369

...

    CORBA method 'get_index_in_parent' re-enters here ...
...

#114 0x40a0a65c in Accessibility_EventListener_notifyEvent
(_obj=0x80caee8, e=0xfffffffc, ev=0x4098c878) at
Accessibility-stubs.c:754
#115 0x4098999c in spi_atk_emit_eventv (gobject=Variable "gobject" is
not available.
) at bridge.c:654
#116 0x4098a65a in spi_atk_bridge_property_event_listener
(signal_hint=0xbede4498, n_param_values=2, param_values=0x8fd4878, 


     Then loops forever - creating a new (duplicate) gail foo each time.

     IMHO the 'g_object_notify' in atk_object_set_parent is completely
bogus, that should only be emitted for a genuine change IMHO - and
thus should be done inside 'atk_object_real_set_parent' iff the parent
changes. No idea if that level of semantic change is acceptable. The
similar snafu's in setting role, name etc. are not so concerning I
think; since the actual data is set by the time we come to refresh it
- even so, not ideal.

    Given that not even gail overrides 'set_parent', I tried not
emitting the notification unless the value changed. Of course -
unfortunately, during construction - we emit this notification as we
change the value from NULL to <new-parent> - which sucks.

    Of course - if we did the atk_object_initialize (accessible,
widget) in the gtk_widget_get_accessible after the g_object_set_qdata
(); we might get away with this, but that change is no doubt too big.

    Probably the best way to fix this is to add a
gail_object_initialize method & call that across gail, blocking notify
signal emissions during that process.

    Does that seem reasonable ?

	Regards,

		Michael.

-- 
 michael meeks novell com  <><, Pseudo Engineer, itinerant idiot




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]