Re: [g-a-devel]at-spi speedups ...
- From: Bill Haneman <bill haneman sun com>
- To: Michael Meeks <michael ximian com>
- Cc: accessibility mailing list <gnome-accessibility-devel gnome org>
- Subject: Re: [g-a-devel]at-spi speedups ...
- Date: 16 Dec 2002 13:41:59 +0000
On Sat, 2002-12-14 at 23:24, Michael Meeks wrote:
> Hi there,
>
> This implements the StateSet optimisation - re-using the AtkStateSet
> code for optimium ease / safety. It also stops doing 2 redundant
> roundtrips per keypress to the registry which gives a nice
> responsiveness improvement.
>
Hi Michael:
Thanks for the patch; it looks great *except* that I do not think there
should be any ATK usage in cspi. Generally I think reuse is great but
in this case it would cause more interpenetration of our layers, which
is not a good thing.
I realize that adds both code and labor (and thus the possibility of
error), but I still think it's the right thing to do (to avoid ATK usage
in cspi).
I don't know _what_ happenned in cspi_main's 'take' method :-/ .
Since there's a release today I'd like to fix those three lines first,
I'll credit you in the ChangeLog. Maybe I had multiple emacs sessions
and clobbered something, since I _do_ always
'make clean; make > /dev/null' to catch warnings.
Perhaps I will have to go to -Werror...
BTW, what compiler version are you using? You are seeing a couple of
warnings that I don't get (for instance, the spi_text fallthrough).
Thanks again and best regards,
Bill
> It also fixes several other problems that I found on the way trying to
> debug a crash in gnopernicus' srcore - turned out to be something simple
> - but I discovered gnopernicus is quite happy not to tell you it's slave
> process 'srcore' has died - which sucks.
>
> Patch fixes a leak I noticed, and removes some chunks of redundant
> code.
>
> May I commit ?
>
> Michael.
> ? docs/reference/cspi/deprecated
> ? docs/reference/cspi/tmpl/at-spi-cspi-unused.sgml
> ? docs/reference/cspi/tmpl/spi_streamable_content.sgml
> ? registryd/Accessibility_Registry.server.in
> ? registryd/at-spi-registryd
> ? test/clean.sh
> ? test/event-listener-test
> ? test/festival_server.log
> ? test/festival_server.log.Tue_Oct__8_19:11:05_BST_2002
> ? test/festival_server.log.Wed_Oct__9_14:17:35_BST_2002
> ? test/festival_server.log.Wed_Oct__9_16:43:17_BST_2002
> ? test/festival_server.scm
> ? test/festival_sleep_pid
> ? test/festival_wrapper_pid
> ? test/screen-review-test
> ? test/stress-test
> ? test/test.sh
> ? test/visual-bell
> Index: ChangeLog
> ===================================================================
> RCS file: /cvs/gnome/at-spi/ChangeLog,v
> retrieving revision 1.270
> diff -u -p -u -r1.270 ChangeLog
> --- ChangeLog 13 Dec 2002 13:58:39 -0000 1.270
> +++ ChangeLog 14 Dec 2002 23:22:27 -0000
> @@ -1,3 +1,53 @@
> +2002-12-14 Michael Meeks <michael ximian com>
> +
> + * atk-bridge/bridge.c (spi_atk_bridget_get_dec): impl.
> + to avoid 2 roundtrips to the registry per key event
> + (spi_atk_bridge_key_listener): upd.
> + (deregister_application): release the dec.
> +
> + * registryd/registry.c (notify_listeners_cb):
> + bin lots of re-enterant complexity - we no longer
> + do a round-trip bonobo ref here, ensure that a single
> + listener's exception failure won't poison all other
> + notifications.
> + (impl_registry_notify_event): bin obvious memory leak.
> +
> +2002-12-13 Michael Meeks <michael ximian com>
> +
> + * atk-bridge/bridge.c (spi_atk_bridge_focus_tracker):
> + init the ev so the error is meaningful.
> + (spi_atk_bridge_key_listener): ditto.
> +
> + * cspi/spi_main.c (cspi_ev): init the ev so we start
> + with a clean slate, otherwise the first exception
> + kills us completely.
> +
> + * cspi/spi_text.c (get_accessible_text_boundary_type):
> + add a fallthrough for no warnings.
> +
> + * cspi/spi_registry.c: prune unused warnings.
> +
> + * cspi/spi_main.c (cspi_object_take): fix
> + mind-blowing brokenness ( by watching the compile
> + warnings )
> +
> + * cspi/spi_accessible.c (Accessible_getStateSet):
> + re-impl. to use an AtkStateSet.
> + (spi_state_type_from_accessible_state),
> + (init_state_table): bin these.
> +
> + * libspi/stateset.c (spi_atk_state_set_from_sequence):
> + split out from
> + (atk_state_set_from_accessibility_state_set): here.
> +
> + * cspi/spi_accessible.c (spi_state_to_atk): impl.
> + (AccessibleStateSet_contains, AccessibleStateSet_ref),
> + (AccessibleStateSet_unref, AccessibleStateSet_contains),
> + (AccessibleStateSet_add, AccessibleStateSet_remove),
> + (AccessibleStateSet_equals, AccessibleStateSet_compare),
> + (AccessibleStateSet_isEmpty): re-write to use a local
> + AtkStateSet object.
> +
> 2002-12-13 Bill Haneman <bill haneman sun com>
>
> * configure.in: Revved to 1.1.7 (new keymask vals).
> Index: TODO
> ===================================================================
> RCS file: /cvs/gnome/at-spi/TODO,v
> retrieving revision 1.11
> diff -u -p -u -r1.11 TODO
> --- TODO 4 Jun 2002 12:16:39 -0000 1.11
> +++ TODO 14 Dec 2002 23:22:27 -0000
> @@ -1,3 +1,7 @@
> +Optimisation:
> + + async unref's ...
> + + cache Role & queryInterface results ... [!]
> +
> 2.0.0:
>
> + fix bug #82509 which prevents return of boolean FALSE from
> Index: atk-bridge/bridge.c
> ===================================================================
> RCS file: /cvs/gnome/at-spi/atk-bridge/bridge.c,v
> retrieving revision 1.56
> diff -u -p -u -r1.56 bridge.c
> --- atk-bridge/bridge.c 9 Dec 2002 08:29:21 -0000 1.56
> +++ atk-bridge/bridge.c 14 Dec 2002 23:22:27 -0000
> @@ -41,10 +41,9 @@
> #define DBG(a,b) if(_dbg>=(a))b
>
> static int _dbg = 0;
> -static char *spi_nil_string = "";
> -
> static CORBA_Environment ev;
> -static Accessibility_Registry registry = NULL;
> +static Accessibility_Registry registry = CORBA_OBJECT_NIL;
> +static Accessibility_DeviceEventController device_event_controller =
> CORBA_OBJECT_NIL;
> static SpiApplication *this_app = NULL;
> static gboolean registry_died = FALSE;
> static gboolean atk_listeners_registered = FALSE;
> @@ -225,7 +224,7 @@ spi_atk_bridge_register_application (Acc
> }
>
> static Accessibility_Registry
> -spi_atk_bridge_get_registry ()
> +spi_atk_bridge_get_registry (void)
> {
> CORBA_Environment ev;
>
> @@ -252,6 +251,34 @@ spi_atk_bridge_get_registry ()
> return registry;
> }
>
> +static Accessibility_DeviceEventController
> +spi_atk_bridget_get_dec (void)
> +{
> + CORBA_Environment ev;
> +
> + if (device_event_controller != CORBA_OBJECT_NIL)
> + {
> + if (ORBit_small_get_connection_status (device_event_controller)
> + == ORBIT_CONNECTION_CONNECTED)
> + return device_event_controller;
> + }
> +
> + CORBA_exception_init (&ev);
> +
> + device_event_controller =
> + Accessibility_Registry_getDeviceEventController (
> + spi_atk_bridge_get_registry (), &ev);
> +
> + if (BONOBO_EX (&ev))
> + {
> + g_warning ("failure: no deviceeventcontroller found\n");
> + registry_died = TRUE;
> + device_event_controller = CORBA_OBJECT_NIL;
> + }
> +
> + return device_event_controller;
> +}
> +
> int
> gtk_module_init (gint *argc, gchar **argv[])
> {
> @@ -352,6 +379,7 @@ deregister_application (BonoboObject *ap
> Accessibility_Registry registry = spi_atk_bridge_get_registry ();
> Accessibility_Registry_deregisterApplication (registry, BONOBO_OBJREF
> (app), &ev);
>
> + device_event_controller = bonobo_object_release_unref
> (device_event_controller, &ev);
> registry = bonobo_object_release_unref (registry, &ev);
>
> app = bonobo_object_unref (app);
> @@ -442,10 +470,13 @@ spi_atk_bridge_focus_tracker (AtkObject
> e.detail1 = 0;
> e.detail2 = 0;
> spi_init_any_nil (&e.any_data);
> +
> + CORBA_exception_init (&ev);
> Accessibility_Registry_notifyEvent (spi_atk_bridge_get_registry (),
> &e, &ev);
> - if (BONOBO_EX (&ev)) registry_died = TRUE;
> -
> - Accessibility_Accessible_unref (e.source, &ev);
> + if (BONOBO_EX (&ev))
> + registry_died = TRUE;
> +
> + bonobo_object_unref (source);
>
> CORBA_exception_free (&ev);
> }
> @@ -646,33 +677,15 @@ spi_atk_bridge_key_listener (AtkKeyEvent
> {
> CORBA_boolean result;
> Accessibility_DeviceEvent key_event;
> - Accessibility_DeviceEventController controller;
> -
> - if (BONOBO_EX (&ev))
> - g_warning ("failure: pre-listener get dec\n");
>
> - controller =
> - Accessibility_Registry_getDeviceEventController (
> - spi_atk_bridge_get_registry (), &ev);
> + CORBA_exception_init (&ev);
>
> - if (BONOBO_EX (&ev))
> - {
> - g_warning ("failure: no deviceeventcontroller found\n");
> - CORBA_exception_free (&ev);
> - registry_died = TRUE;
> - result = FALSE;
> - }
> - else
> - {
> + spi_init_keystroke_from_atk_key_event (&key_event, event);
>
> - spi_init_keystroke_from_atk_key_event (&key_event, event);
> + result = Accessibility_DeviceEventController_notifyListenersSync (
> + spi_atk_bridget_get_dec (), &key_event, &ev);
>
> - result = Accessibility_DeviceEventController_notifyListenersSync
> (
> - controller, &key_event, &ev);
> -
> - bonobo_object_release_unref (controller, &ev);
> - CORBA_exception_free (&ev);
> - }
> + CORBA_exception_free (&ev);
>
> return result;
> }
> Index: cspi/spi-impl.h
> ===================================================================
> RCS file: /cvs/gnome/at-spi/cspi/spi-impl.h,v
> retrieving revision 1.16
> diff -u -p -u -r1.16 spi-impl.h
> --- cspi/spi-impl.h 17 Nov 2002 13:53:54 -0000 1.16
> +++ cspi/spi-impl.h 14 Dec 2002 23:22:27 -0000
> @@ -43,13 +43,13 @@ typedef Accessible AccessibleHypertext;
> typedef Accessible AccessibleImage;
> typedef Accessible AccessibleRelation;
> typedef Accessible AccessibleSelection;
> -typedef Accessible AccessibleStateSet;
> typedef Accessible AccessibleStreamableContent;
> typedef Accessible AccessibleTable;
> typedef Accessible AccessibleText;
> typedef Accessible AccessibleValue;
> typedef Accessible AccessibilityRegistry;
>
> +typedef void AccessibleStateSet;
> typedef void AccessibleEventListener;
> typedef void AccessibleKeystrokeListener;
> typedef void AccessibleDeviceListener;
> Index: cspi/spi-private.h
> ===================================================================
> RCS file: /cvs/gnome/at-spi/cspi/spi-private.h,v
> retrieving revision 1.11
> diff -u -p -u -r1.11 spi-private.h
> --- cspi/spi-private.h 6 Dec 2002 17:33:32 -0000 1.11
> +++ cspi/spi-private.h 14 Dec 2002 23:22:27 -0000
> @@ -39,6 +39,11 @@ struct _Accessible {
> guint ref_count : 30;
> };
>
> +struct _AccessibleStateSet {
> + guint ref_count;
> + GArray *states;
> +};
> +
> #define SPI_INTERNAL_EVENT_MAGIC 0xc3
> /*
> * For internal use by CSPI implementation only
> Index: cspi/spi_accessible.c
> ===================================================================
> RCS file: /cvs/gnome/at-spi/cspi/spi_accessible.c,v
> retrieving revision 1.44
> diff -u -p -u -r1.44 spi_accessible.c
> --- cspi/spi_accessible.c 20 Nov 2002 17:14:28 -0000 1.44
> +++ cspi/spi_accessible.c 14 Dec 2002 23:22:28 -0000
> @@ -22,8 +22,12 @@
> */
>
> #include <stdlib.h> /* for malloc */
> +#include <atk/atkstateset.h>
> #include <cspi/spi-private.h>
>
> +/* internal from libspi/stateset.c */
> +extern AtkStateSet *spi_atk_state_set_from_sequence (const
> Accessibility_StateSeq *seq);;
> +
> static const char *role_names [] =
> {
> "invalid",
> @@ -213,68 +217,6 @@ cspi_role_from_spi_role (Accessibility_R
> return cspi_role;
> }
>
> -static SPIBoolean
> -init_state_table (Accessibility_StateType *state_table)
> -{
> - int i;
> -
> - for (i = 0; i < Accessibility_STATE_LAST_DEFINED; i++)
> - state_table[i] = SPI_STATE_INVALID;
> -
> - state_table[SPI_STATE_ACTIVE] = Accessibility_STATE_ACTIVE;
> - state_table[SPI_STATE_ARMED] = Accessibility_STATE_ARMED;
> - state_table[SPI_STATE_BUSY] = Accessibility_STATE_BUSY;
> - state_table[SPI_STATE_CHECKED] = Accessibility_STATE_CHECKED;
> - state_table[SPI_STATE_DEFUNCT] = Accessibility_STATE_DEFUNCT;
> - state_table[SPI_STATE_EDITABLE] = Accessibility_STATE_EDITABLE;
> - state_table[SPI_STATE_ENABLED] = Accessibility_STATE_ENABLED;
> - state_table[SPI_STATE_EXPANDABLE] = Accessibility_STATE_EXPANDABLE;
> - state_table[SPI_STATE_EXPANDED] = Accessibility_STATE_EXPANDED;
> - state_table[SPI_STATE_FOCUSABLE] = Accessibility_STATE_FOCUSABLE;
> - state_table[SPI_STATE_FOCUSED] = Accessibility_STATE_FOCUSED;
> - state_table[SPI_STATE_HORIZONTAL] = Accessibility_STATE_HORIZONTAL;
> - state_table[SPI_STATE_ICONIFIED] = Accessibility_STATE_ICONIFIED;
> - state_table[SPI_STATE_MODAL] = Accessibility_STATE_MODAL;
> - state_table[SPI_STATE_MULTI_LINE] = Accessibility_STATE_MULTI_LINE;
> - state_table[SPI_STATE_MULTISELECTABLE] =
> Accessibility_STATE_MULTISELECTABLE;
> - state_table[SPI_STATE_OPAQUE] = Accessibility_STATE_OPAQUE;
> - state_table[SPI_STATE_PRESSED] = Accessibility_STATE_PRESSED;
> - state_table[SPI_STATE_RESIZABLE] = Accessibility_STATE_RESIZABLE;
> - state_table[SPI_STATE_SELECTABLE] = Accessibility_STATE_SELECTABLE;
> - state_table[SPI_STATE_SELECTED] = Accessibility_STATE_SELECTED;
> - state_table[SPI_STATE_SENSITIVE] = Accessibility_STATE_SENSITIVE;
> - state_table[SPI_STATE_SHOWING] = Accessibility_STATE_SHOWING;
> - state_table[SPI_STATE_SINGLE_LINE] = Accessibility_STATE_SINGLE_LINE;
> - state_table[SPI_STATE_STALE] = Accessibility_STATE_STALE;
> - state_table[SPI_STATE_TRANSIENT] = Accessibility_STATE_TRANSIENT;
> - state_table[SPI_STATE_VERTICAL] = Accessibility_STATE_VERTICAL;
> - state_table[SPI_STATE_VISIBLE] = Accessibility_STATE_VISIBLE;
> - state_table[SPI_STATE_MANAGES_DESCENDANTS] =
> Accessibility_STATE_MANAGES_DESCENDANTS;
> -
> - return TRUE;
> -}
> -
> -
> -
> -static Accessibility_StateType
> -spi_state_type_from_accessible_state (AccessibleState type)
> -{
> - static Accessibility_StateType
> state_table[Accessibility_STATE_LAST_DEFINED];
> - static SPIBoolean table_initialized = FALSE;
> - Accessibility_StateType rv;
> -
> - if (!table_initialized)
> - table_initialized = init_state_table (state_table);
> - if (type > SPI_STATE_INVALID && type < SPI_STATE_LAST_DEFINED)
> - rv = state_table[type];
> - else
> - rv = Accessibility_STATE_INVALID;
> - return rv;
> -}
> -
> -
> -
> -
> /**
> * AccessibleRole_getName:
> * @role: an #AccessibleRole object to query.
> @@ -570,14 +512,23 @@ AccessibleStateSet *
> Accessible_getStateSet (Accessible *obj)
> {
> AccessibleStateSet *retval;
> + Accessibility_StateSet corba_stateset;
> + Accessibility_StateSeq *corba_seq;
>
> cspi_return_val_if_fail (obj != NULL, NULL);
>
> - retval = cspi_object_add (
> - Accessibility_Accessible_getState (CSPI_OBJREF (obj),
> - cspi_ev ()));
> + corba_stateset = Accessibility_Accessible_getState (
> + CSPI_OBJREF (obj), cspi_ev ());
> + cspi_return_val_if_ev ("getState", NULL);
>
> + corba_seq = Accessibility_StateSet_getStates (corba_stateset, cspi_ev
> ());
> cspi_return_val_if_ev ("getState", NULL);
> +
> + retval = (AccessibleStateSet *) spi_atk_state_set_from_sequence
> (corba_seq);
> +
> + CORBA_free (corba_seq);
> + cspi_release_unref (corba_stateset);
> +
> return retval;
> }
>
> @@ -1097,7 +1048,7 @@ AccessibleRelation_getTarget (Accessible
> void
> AccessibleStateSet_ref (AccessibleStateSet *obj)
> {
> - cspi_object_ref (obj);
> + g_object_ref (obj);
> }
>
> /**
> @@ -1110,9 +1061,54 @@ AccessibleStateSet_ref (AccessibleStateS
> void
> AccessibleStateSet_unref (AccessibleStateSet *obj)
> {
> - cspi_object_unref (obj);
> + g_object_unref (obj);
> }
>
> +static AtkState
> +spi_state_to_atk (AccessibleState state)
> +{
> +#define MAP_STATE(a) \
> + case SPI_STATE_##a: \
> + return ATK_STATE_##a
> +
> + switch (state)
> + {
> + MAP_STATE (INVALID);
> + MAP_STATE (ACTIVE);
> + MAP_STATE (ARMED);
> + MAP_STATE (BUSY);
> + MAP_STATE (CHECKED);
> + MAP_STATE (DEFUNCT);
> + MAP_STATE (EDITABLE);
> + MAP_STATE (ENABLED);
> + MAP_STATE (EXPANDABLE);
> + MAP_STATE (EXPANDED);
> + MAP_STATE (FOCUSABLE);
> + MAP_STATE (FOCUSED);
> + MAP_STATE (HORIZONTAL);
> + MAP_STATE (ICONIFIED);
> + MAP_STATE (MODAL);
> + MAP_STATE (MULTI_LINE);
> + MAP_STATE (MULTISELECTABLE);
> + MAP_STATE (OPAQUE);
> + MAP_STATE (PRESSED);
> + MAP_STATE (RESIZABLE);
> + MAP_STATE (SELECTABLE);
> + MAP_STATE (SELECTED);
> + MAP_STATE (SENSITIVE);
> + MAP_STATE (SHOWING);
> + MAP_STATE (SINGLE_LINE);
> + MAP_STATE (STALE);
> + MAP_STATE (TRANSIENT);
> + MAP_STATE (VERTICAL);
> + MAP_STATE (VISIBLE);
> + MAP_STATE (MANAGES_DESCENDANTS);
> + default:
> + return ATK_STATE_INVALID;
> + }
> +#undef MAP_STATE
> +}
> +
> /**
> * AccessibleStateSet_contains:
> * @obj: a pointer to the #AccessibleStateSet object on which to
> operate.
> @@ -1130,18 +1126,8 @@ SPIBoolean
> AccessibleStateSet_contains (AccessibleStateSet *obj,
> AccessibleState state)
> {
> - CORBA_boolean retval;
> - Accessibility_StateType spi_state;
> -
> - cspi_return_val_if_fail (obj != NULL, FALSE);
> -
> - spi_state = spi_state_type_from_accessible_state (state);
> - retval = Accessibility_StateSet_contains (CSPI_OBJREF (obj),
> - spi_state, cspi_ev ());
> -
> - cspi_return_val_if_ev ("contains", FALSE);
> -
> - return retval;
> + return atk_state_set_contains_state (ATK_STATE_SET (obj),
> + spi_state_to_atk (state));
> }
>
> /**
> @@ -1157,13 +1143,8 @@ void
> AccessibleStateSet_add (AccessibleStateSet *obj,
> AccessibleState state)
> {
> - Accessibility_StateType spi_state;
> -
> - cspi_return_if_fail (obj != NULL);
> -
> - spi_state = spi_state_type_from_accessible_state (state);
> - Accessibility_StateSet_add (CSPI_OBJREF (obj), spi_state, cspi_ev
> ());
> - cspi_check_ev ("StateSet_add");
> + atk_state_set_add_state (ATK_STATE_SET (obj),
> + spi_state_to_atk (state));
> }
>
> /**
> @@ -1179,13 +1160,8 @@ void
> AccessibleStateSet_remove (AccessibleStateSet *obj,
> AccessibleState state)
> {
> - Accessibility_StateType spi_state;
> -
> - cspi_return_if_fail (obj != NULL);
> -
> - spi_state = spi_state_type_from_accessible_state (state);
> - Accessibility_StateSet_remove (CSPI_OBJREF (obj), spi_state, cspi_ev
> ());
> - cspi_check_ev ("StateSet_remove");
> + atk_state_set_remove_state (ATK_STATE_SET (obj),
> + spi_state_to_atk (state));
> }
>
> /**
> @@ -1207,16 +1183,20 @@ SPIBoolean
> AccessibleStateSet_equals (AccessibleStateSet *obj,
> AccessibleStateSet *obj2)
> {
> + SPIBoolean eq;
> + AtkStateSet *cmp;
> +
> if (obj == obj2)
> {
> return TRUE;
> }
>
> - cspi_return_val_if_fail (obj != NULL, FALSE);
> - cspi_return_val_if_fail (obj2 != NULL, FALSE);
> + cmp = atk_state_set_xor_sets (ATK_STATE_SET (obj),
> + ATK_STATE_SET (obj2));
> + eq = atk_state_set_is_empty (cmp);
> + g_object_unref (cmp);
>
> - return Accessibility_StateSet_equals (CSPI_OBJREF (obj),
> - CSPI_OBJREF (obj2), cspi_ev ());
> + return eq;
> }
>
> /**
> @@ -1237,15 +1217,9 @@ AccessibleStateSet *
> AccessibleStateSet_compare (AccessibleStateSet *obj,
> AccessibleStateSet *obj2)
> {
> - AccessibleStateSet *retval;
> -
> - cspi_return_val_if_fail (obj != NULL, NULL);
> - cspi_return_val_if_fail (obj2 != NULL, NULL);
> - retval = cspi_object_add (
> - Accessibility_StateSet_compare (CSPI_OBJREF(obj),
> CSPI_OBJREF(obj2), cspi_ev ()));
> -
> - cspi_return_val_if_ev ("compare", NULL);
> - return retval;
> + return (AccessibleStateSet *)
> + atk_state_set_xor_sets (ATK_STATE_SET (obj),
> + ATK_STATE_SET (obj2));
> }
>
> /**
> @@ -1261,13 +1235,7 @@ AccessibleStateSet_compare (AccessibleSt
> SPIBoolean
> AccessibleStateSet_isEmpty (AccessibleStateSet *obj)
> {
> - CORBA_boolean retval;
> -
> - cspi_return_val_if_fail (obj != NULL, FALSE);
> - retval = Accessibility_StateSet_isEmpty (CSPI_OBJREF (obj), cspi_ev
> ());
> -
> - cspi_return_val_if_ev ("isEmpty", TRUE);
> - return retval;
> + return atk_state_set_is_empty (ATK_STATE_SET (obj));
> }
>
>
> Index: cspi/spi_event.c
> ===================================================================
> RCS file: /cvs/gnome/at-spi/cspi/spi_event.c,v
> retrieving revision 1.27
> diff -u -p -u -r1.27 spi_event.c
> --- cspi/spi_event.c 10 Dec 2002 11:45:46 -0000 1.27
> +++ cspi/spi_event.c 14 Dec 2002 23:22:28 -0000
> @@ -354,9 +354,10 @@ static Accessible *
> cspi_internal_event_get_object (const InternalEvent *e)
> {
> CORBA_any *any;
> - Accessible *accessible;
> +
> g_return_val_if_fail (e, NULL);
> g_return_val_if_fail (e->data, NULL);
> +
> any = (CORBA_any *) e->data;
> if (CORBA_TypeCode_equal (any->_type, TC_CORBA_Object, cspi_ev()))
> return cspi_object_take (* (CORBA_Object *) any->_value);
> Index: cspi/spi_main.c
> ===================================================================
> RCS file: /cvs/gnome/at-spi/cspi/spi_main.c,v
> retrieving revision 1.30
> diff -u -p -u -r1.30 spi_main.c
> --- cspi/spi_main.c 6 Dec 2002 17:33:32 -0000 1.30
> +++ cspi/spi_main.c 14 Dec 2002 23:22:28 -0000
> @@ -126,6 +126,7 @@ cspi_get_live_refs (void)
> CORBA_Environment *
> cspi_ev (void)
> {
> + CORBA_exception_init (&ev);
> return &ev;
> }
>
> @@ -248,15 +249,17 @@ cspi_object_take (CORBA_Object corba_obj
> {
> Accessible *accessible;
> accessible = cspi_object_borrow (corba_object);
> - cspi_object_ref (accessible->objref);
> +
> + cspi_object_ref (accessible);
> /*
> * if the remote object is dead,
> * cspi_object_return will throw an exception.
> + * FIXME: what clears that exception context ever ?
> */
> - cspi_object_return (accessible->objref);
> + cspi_object_return (accessible);
> if (cspi_exception ())
> {
> - cspi_object_unref (accessible->objref);
> + cspi_object_unref (accessible);
> accessible = NULL;
> }
> return accessible;
> Index: cspi/spi_registry.c
> ===================================================================
> RCS file: /cvs/gnome/at-spi/cspi/spi_registry.c,v
> retrieving revision 1.43
> diff -u -p -u -r1.43 spi_registry.c
> --- cspi/spi_registry.c 19 Nov 2002 20:04:17 -0000 1.43
> +++ cspi/spi_registry.c 14 Dec 2002 23:22:29 -0000
> @@ -332,7 +332,7 @@ SPI_registerAccessibleKeystrokeListener
> AccessibleKeyEventMask eventmask,
> AccessibleKeyListenerSyncType sync_type)
> {
> - gint i, mask;
> + gint i;
> Accessibility_KeySet key_set;
> Accessibility_KeyEventTypeSeq key_events;
> Accessibility_ControllerEventMask controller_event_mask;
> @@ -488,7 +488,7 @@ SPI_registerDeviceEventListener (Accessi
> SPIBoolean retval = FALSE;
> Accessibility_EventTypeSeq event_types;
> Accessibility_EventType event_type_buffer[2];
> - gint i, mask;
> + gint i;
>
> if (!listener)
> {
> @@ -543,7 +543,6 @@ SPIBoolean
> SPI_deregisterDeviceEventListener (AccessibleDeviceListener *listener,
> void *filter)
> {
> - Accessibility_ControllerEventMask controller_event_mask;
> Accessibility_DeviceEventController device_event_controller;
> Accessibility_EventTypeSeq event_types;
> Accessibility_EventType event_type_buff[2];
> Index: cspi/spi_text.c
> ===================================================================
> RCS file: /cvs/gnome/at-spi/cspi/spi_text.c,v
> retrieving revision 1.21
> diff -u -p -u -r1.21 spi_text.c
> --- cspi/spi_text.c 17 Nov 2002 13:53:54 -0000 1.21
> +++ cspi/spi_text.c 14 Dec 2002 23:22:29 -0000
> @@ -58,6 +58,8 @@ get_accessible_text_boundary_type (Acces
> return Accessibility_TEXT_BOUNDARY_CHAR;
> break;
> }
> + /* FIXME */
> + return Accessibility_TEXT_BOUNDARY_CHAR;
> }
>
>
> Index: libspi/stateset.c
> ===================================================================
> RCS file: /cvs/gnome/at-spi/libspi/stateset.c,v
> retrieving revision 1.8
> diff -u -p -u -r1.8 stateset.c
> --- libspi/stateset.c 19 Nov 2002 13:48:56 -0000 1.8
> +++ libspi/stateset.c 14 Dec 2002 23:22:29 -0000
> @@ -129,29 +129,43 @@ atk_state_set_from_servant (PortableServ
> return ATK_STATE_SET(base->gobj);
> }
>
> +/* internal for spi_accessible.c */
> +extern AtkStateSet *
> +spi_atk_state_set_from_sequence (const Accessibility_StateSeq *seq);
> +
> +AtkStateSet *
> +spi_atk_state_set_from_sequence (const Accessibility_StateSeq *seq)
> +{
> + int i;
> + AtkStateSet *set;
> + AtkStateType *states;
>
> + spi_init_state_type_tables ();
> +
> + states = g_newa (AtkStateType, seq->_length);
> + for (i = 0; i < seq->_length; i++)
> + states [i] = atk_state_types[seq->_buffer[i]];
> +
> + set = atk_state_set_new ();
> + atk_state_set_add_states (set, states, seq->_length);
> +
> + return set;
> +}
>
> static AtkStateSet *
> atk_state_set_from_accessibility_state_set (Accessibility_StateSet set,
> CORBA_Environment *ev)
> {
> - AtkStateType *states, *tmp;
> AtkStateSet *rv;
> - gint i;
> Accessibility_StateSeq *seq;
>
> seq = Accessibility_StateSet_getStates (set, ev);
> - states = tmp = g_new (AtkStateType, seq->_length);
> - for (i = 0; i < seq->_length; i++)
> - *tmp++ = atk_state_types[seq->_buffer[i]];
> - rv = atk_state_set_new ();
> - atk_state_set_add_states (rv, states, seq->_length);
> + rv = spi_atk_state_set_from_sequence (seq);
> CORBA_free (seq);
> - g_free (states);
> +
> return rv;
> }
>
>
> -
> SpiStateSet *
> spi_state_set_new (AtkStateSet *obj)
> {
> @@ -161,7 +175,6 @@ spi_state_set_new (AtkStateSet *obj)
> }
>
>
> -
> static CORBA_boolean
> impl_contains (PortableServer_Servant servant,
> const Accessibility_StateType state,
> @@ -174,7 +187,6 @@ impl_contains (PortableServer_Servant se
> }
>
>
> -
> static void
> impl_add(PortableServer_Servant servant,
> const Accessibility_StateType state,
> @@ -187,7 +199,6 @@ impl_add(PortableServer_Servant servant,
> }
>
>
> -
> static void
> impl_remove (PortableServer_Servant servant,
> const Accessibility_StateType state,
> @@ -200,7 +211,6 @@ impl_remove (PortableServer_Servant serv
> }
>
>
> -
> static CORBA_boolean
> impl_equals (PortableServer_Servant servant,
> const Accessibility_StateSet stateSet,
> @@ -228,7 +238,6 @@ impl_equals (PortableServer_Servant serv
> }
>
>
> -
> static Accessibility_StateSet
> impl_compare (PortableServer_Servant servant,
> const Accessibility_StateSet compareState,
> @@ -250,7 +259,6 @@ impl_compare (PortableServer_Servant ser
> }
>
>
> -
> static CORBA_boolean
> impl_isEmpty (PortableServer_Servant servant,
> CORBA_Environment * ev)
> @@ -262,7 +270,6 @@ impl_isEmpty (PortableServer_Servant ser
> }
>
>
> -
> static Accessibility_StateSeq *
> impl_getStates (PortableServer_Servant servant,
> CORBA_Environment * ev)
> @@ -348,7 +355,6 @@ impl_getStates (PortableServer_Servant s
> g_slist_free (states);
> return rv;
> }
> -
>
>
> static void
> Index: registryd/registry.c
> ===================================================================
> RCS file: /cvs/gnome/at-spi/registryd/registry.c,v
> retrieving revision 1.57
> diff -u -p -u -r1.57 registry.c
> --- registryd/registry.c 22 Nov 2002 14:07:56 -0000 1.57
> +++ registryd/registry.c 14 Dec 2002 23:22:29 -0000
> @@ -580,9 +580,6 @@ notify_listeners_cb (GList * const *list
> {
> SpiListenerStruct *ls;
> NotifyContext *ctx = user_data;
> -#ifdef SPI_DEBUG
> - CORBA_string s;
> -#endif
>
> ls = (*list)->data;
>
> @@ -590,23 +587,24 @@ notify_listeners_cb (GList * const *list
> fprintf (stderr, "event quarks: %lx %lx %lx\n", ls->event_type_quark,
> ctx->etype.major, ctx->etype.minor);
> fprintf (stderr, "event name: %s\n", ctx->etype.event_name);
> #endif
> -
> if ((ls->event_type_quark == ctx->etype.major) ||
> (ls->event_type_quark == ctx->etype.minor))
> {
> #ifdef SPI_DEBUG
> + CORBA_string s;
> fprintf (stderr, "notifying listener %d\n", 0);
> /* g_list_index (list, l->data)); */
> s = Accessibility_Accessible__get_name (ctx->source, ctx->ev);
> fprintf (stderr, "event source name %s\n", s);
> CORBA_free (s);
> -#endif
> -
> - ctx->e_out.source = CORBA_Object_duplicate (ctx->source,
> ctx->ev);
> if (BONOBO_EX (ctx->ev))
> {
> + CORBA_exception_free (ctx->ev);
> return SPI_RE_ENTRANT_CONTINUE;
> }
> +#endif
> +
> + ctx->e_out.source = ctx->source;
>
> if ((*list) && (*list)->data == ls)
> {
> @@ -617,16 +615,11 @@ notify_listeners_cb (GList * const *list
> DBG (1, g_warning ("Accessibility app error: exception
> during "
> "event notification: %s\n",
> CORBA_exception_id (ctx->ev)));
> - if (ctx->ev->_major == CORBA_SYSTEM_EXCEPTION)
> - CORBA_exception_init (ctx->ev);
> - /* clear system exception on notify, it means listener is dead
> but
> - * that's no concern of the event source :-) */
> + CORBA_exception_free (ctx->ev);
> + /* FIXME: check that this item is removed from the list
> + * on system exception by a 'broken' listener */
> }
> }
> - else /* dup re-entered */
> - {
> - CORBA_Object_release (ctx->e_out.source, ctx->ev);
> - }
> }
>
> return SPI_RE_ENTRANT_CONTINUE;
> @@ -651,7 +644,6 @@ impl_registry_notify_event (PortableServ
> {
> ctx.ev = ev;
> ctx.e_out = *e;
> - CORBA_any__copy (&ctx.e_out.any_data, &e->any_data);
> ctx.source = e->source;
> spi_re_entrant_list_foreach (list, notify_listeners_cb, &ctx);
> }
--
Bill Haneman <bill haneman sun com>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]