X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=libspi%2Fstateset.c;h=d022d055e6da43cfd3d8f7a7ed52af27fd087e17;hb=03f79d95800447521c74a6963b2a4f07edb1adf6;hp=8728ee5e135b82ca25f142c30a2469a584f6558d;hpb=600e6bc608b7fa42eda6ded92cd49bcb021edecf;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/libspi/stateset.c b/libspi/stateset.c index 8728ee5..d022d05 100644 --- a/libspi/stateset.c +++ b/libspi/stateset.c @@ -114,11 +114,38 @@ spi_init_state_type_tables (void) atk_state_types[Accessibility_STATE_VISIBLE] = ATK_STATE_VISIBLE; accessible_state_types[ATK_STATE_MANAGES_DESCENDANTS] = Accessibility_STATE_MANAGES_DESCENDANTS; atk_state_types[Accessibility_STATE_MANAGES_DESCENDANTS] = ATK_STATE_MANAGES_DESCENDANTS; + accessible_state_types[ATK_STATE_INDETERMINATE] = Accessibility_STATE_INDETERMINATE; + atk_state_types[Accessibility_STATE_INDETERMINATE] = ATK_STATE_INDETERMINATE; + accessible_state_types[ATK_STATE_TRUNCATED] = Accessibility_STATE_TRUNCATED; + atk_state_types[Accessibility_STATE_TRUNCATED] = ATK_STATE_TRUNCATED; + accessible_state_types[ATK_STATE_REQUIRED] = Accessibility_STATE_REQUIRED; + atk_state_types[Accessibility_STATE_REQUIRED] = ATK_STATE_REQUIRED; + accessible_state_types[ATK_STATE_INVALID_ENTRY] = Accessibility_STATE_INVALID_ENTRY; + atk_state_types[Accessibility_STATE_INVALID_ENTRY] = ATK_STATE_INVALID_ENTRY; + accessible_state_types[ATK_STATE_SUPPORTS_AUTOCOMPLETION] = Accessibility_STATE_SUPPORTS_AUTOCOMPLETION; + atk_state_types[Accessibility_STATE_SUPPORTS_AUTOCOMPLETION] = ATK_STATE_SUPPORTS_AUTOCOMPLETION; + accessible_state_types[ATK_STATE_SELECTABLE_TEXT] = Accessibility_STATE_SELECTABLE_TEXT; + atk_state_types[Accessibility_STATE_SELECTABLE_TEXT] = ATK_STATE_SELECTABLE_TEXT; return TRUE; } +static inline AtkState +state_spi_to_atk (Accessibility_StateType state) +{ + guint idx = state; + if (idx < Accessibility_STATE_LAST_DEFINED) + return atk_state_types [idx]; + else + return ATK_STATE_INVALID; +} +AtkState +spi_atk_state_from_spi_state (Accessibility_StateType state) +{ + spi_init_state_type_tables (); + return state_spi_to_atk (state); +} static AtkStateSet * atk_state_set_from_servant (PortableServer_Servant servant) @@ -129,29 +156,39 @@ atk_state_set_from_servant (PortableServer_Servant servant) return ATK_STATE_SET(base->gobj); } +AtkStateSet * +spi_state_set_cache_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] = state_spi_to_atk (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_state_set_cache_from_sequence (seq); CORBA_free (seq); - g_free (states); + return rv; } - SpiStateSet * spi_state_set_new (AtkStateSet *obj) { @@ -161,7 +198,6 @@ spi_state_set_new (AtkStateSet *obj) } - static CORBA_boolean impl_contains (PortableServer_Servant servant, const Accessibility_StateType state, @@ -170,24 +206,22 @@ impl_contains (PortableServer_Servant servant, AtkStateSet *set = atk_state_set_from_servant (servant); g_return_val_if_fail (set, FALSE); - return atk_state_set_contains_state (set, atk_state_types[state]); + return atk_state_set_contains_state (set, state_spi_to_atk (state)); } - static void -impl_add(PortableServer_Servant servant, - const Accessibility_StateType state, - CORBA_Environment * ev) +impl_add (PortableServer_Servant servant, + const Accessibility_StateType state, + CORBA_Environment * ev) { AtkStateSet *set = atk_state_set_from_servant (servant); g_return_if_fail (set); - atk_state_set_add_state (set, atk_state_types[state]); + atk_state_set_add_state (set, state_spi_to_atk (state)); } - static void impl_remove (PortableServer_Servant servant, const Accessibility_StateType state, @@ -196,11 +230,10 @@ impl_remove (PortableServer_Servant servant, AtkStateSet *set = atk_state_set_from_servant (servant); g_return_if_fail (set); - atk_state_set_remove_state (set, atk_state_types[state]); + atk_state_set_remove_state (set, state_spi_to_atk (state)); } - static CORBA_boolean impl_equals (PortableServer_Servant servant, const Accessibility_StateSet stateSet, @@ -228,7 +261,6 @@ impl_equals (PortableServer_Servant servant, } - static Accessibility_StateSet impl_compare (PortableServer_Servant servant, const Accessibility_StateSet compareState, @@ -238,7 +270,7 @@ impl_compare (PortableServer_Servant servant, AtkStateSet *set2, *return_set; SpiStateSet *spi_set; - g_return_val_if_fail (set, FALSE); + g_return_val_if_fail (set, NULL); set2 = atk_state_set_from_accessibility_state_set (compareState, ev); g_return_val_if_fail (set2, CORBA_OBJECT_NIL); @@ -250,7 +282,6 @@ impl_compare (PortableServer_Servant servant, } - static CORBA_boolean impl_isEmpty (PortableServer_Servant servant, CORBA_Environment * ev) @@ -262,7 +293,6 @@ impl_isEmpty (PortableServer_Servant servant, } - static Accessibility_StateSeq * impl_getStates (PortableServer_Servant servant, CORBA_Environment * ev) @@ -335,6 +365,8 @@ impl_getStates (PortableServer_Servant servant, states = g_slist_append (states, (gpointer) Accessibility_STATE_VISIBLE); if (atk_state_set_contains_state (set, ATK_STATE_MANAGES_DESCENDANTS)) states = g_slist_append (states, (gpointer) Accessibility_STATE_MANAGES_DESCENDANTS); + if (atk_state_set_contains_state (set, ATK_STATE_INDETERMINATE)) + states = g_slist_append (states, (gpointer) Accessibility_STATE_INDETERMINATE); rv = Accessibility_StateSeq__alloc (); rv->_length = rv->_maximum = g_slist_length (states); @@ -350,7 +382,6 @@ impl_getStates (PortableServer_Servant servant, } - static void spi_state_set_class_init (SpiStateSetClass *klass) { @@ -376,4 +407,4 @@ spi_state_set_init (SpiStateSet *set) BONOBO_TYPE_FUNC_FULL (SpiStateSet, Accessibility_StateSet, SPI_TYPE_BASE, - spi_state_set); + spi_state_set)