*/
#include <stdlib.h> /* for malloc */
+#include <libspi/stateset.h>
#include <cspi/spi-private.h>
static const char *role_names [] =
"fooler",
"paragraph",
"ruler",
- "application"
+ "application",
+ "autocomplete",
+ "editbar",
+ "embedded",
+ "entry",
+ "chart",
+ "caption",
+ "document_frame",
+ "heading",
+ "page",
+ "section",
+ "form",
+ "redundant object",
+ "link",
+ "input method window"
};
#define MAX_ROLES (sizeof (role_names) / sizeof (char *))
role_table [Accessibility_ROLE_PARAGRAPH] = SPI_ROLE_PARAGRAPH;
role_table [Accessibility_ROLE_RULER] = SPI_ROLE_RULER;
role_table [Accessibility_ROLE_APPLICATION] = SPI_ROLE_APPLICATION;
+ role_table [Accessibility_ROLE_AUTOCOMPLETE] = SPI_ROLE_AUTOCOMPLETE;
+ role_table [Accessibility_ROLE_EDITBAR] = SPI_ROLE_EDITBAR;
+ role_table [Accessibility_ROLE_EMBEDDED] = SPI_ROLE_EMBEDDED;
+ role_table [Accessibility_ROLE_ENTRY] = SPI_ROLE_ENTRY;
+ role_table [Accessibility_ROLE_CHART] = SPI_ROLE_CHART;
+ role_table [Accessibility_ROLE_CAPTION] = SPI_ROLE_CAPTION;
+ role_table [Accessibility_ROLE_DOCUMENT_FRAME] = SPI_ROLE_DOCUMENT_FRAME;
+ role_table [Accessibility_ROLE_HEADING] = SPI_ROLE_HEADING;
+ role_table [Accessibility_ROLE_PAGE] = SPI_ROLE_PAGE;
+ role_table [Accessibility_ROLE_SECTION] = SPI_ROLE_SECTION;
+ role_table [Accessibility_ROLE_FORM] = SPI_ROLE_FORM;
+ role_table [Accessibility_ROLE_REDUNDANT_OBJECT] = SPI_ROLE_REDUNDANT_OBJECT;
+ role_table [Accessibility_ROLE_LINK] = SPI_ROLE_LINK;
+ role_table [Accessibility_ROLE_INPUT_METHOD_WINDOW] = SPI_ROLE_INPUT_METHOD_WINDOW;
return TRUE;
}
-static AccessibleRole
+AccessibleRole
cspi_role_from_spi_role (Accessibility_Role role)
{
/* array is sized according to IDL roles because IDL roles are the index */
return cspi_role;
}
-static SPIBoolean
-init_state_table (Accessibility_StateType *state_table)
+AccessibleAttributeSet *
+_cspi_attribute_set_from_sequence (const Accessibility_AttributeSet *seq)
{
- 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;
-}
-
-
+ AccessibleAttributeSet *set = g_new0 (AccessibleAttributeSet, 1);
+ int i;
-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;
+ set->len = seq->_length;
+ set->attributes = g_new0 (char *, set->len);
+ for (i = 0; i < set->len; ++i)
+ {
+ set->attributes[i] = g_strdup (seq->_buffer [i]);
+ }
+ return set;
}
-
-
-
/**
* AccessibleRole_getName:
* @role: an #AccessibleRole object to query.
}
else
{
- return g_strdup ("");
+ return CORBA_string_dup ("");
}
}
cspi_return_val_if_fail (obj != NULL, NULL);
+ g_assert (!cspi_exception ());
+
relation_set =
Accessibility_Accessible_getRelationSet (CSPI_OBJREF (obj), cspi_ev ());
}
/**
+ * Accessible_getLocalizedRoleName:
+ * @obj: a pointer to the #Accessible object on which to operate.
+ *
+ * Get a UTF-8 string describing the (localized) role this object plays in the UI.
+ * This method will return useful values for roles that fall outside the
+ * enumeration used in Accessible_getRole ().
+ *
+ * @Since: AT-SPI 1.4
+ *
+ * Returns: a UTF-8 string specifying the role of this #Accessible object.
+ *
+ **/
+char *
+Accessible_getLocalizedRoleName (Accessible *obj)
+{
+ char *retval;
+
+ cspi_return_val_if_fail (obj != NULL, CORBA_string_dup ("invalid"));
+
+ retval =
+ Accessibility_Accessible_getLocalizedRoleName (CSPI_OBJREF (obj), cspi_ev ());
+
+ cspi_return_val_if_ev ("getLocalizedRoleName", CORBA_string_dup ("invalid"));
+
+ return retval;
+}
+
+/**
* Accessible_getStateSet:
* @obj: a pointer to the #Accessible object on which to operate.
*
- * Not Yet Implemented.
+ * Gets the current state of an object.
*
* Returns: a pointer to an #AccessibleStateSet representing the object's current state.
**/
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);
+ cspi_return_val_if_fail (corba_stateset != CORBA_OBJECT_NIL, NULL);
+ cspi_return_val_if_fail (cspi_ping (corba_stateset), NULL);
+ corba_seq = Accessibility_StateSet_getStates (corba_stateset, cspi_ev ());
cspi_return_val_if_ev ("getState", NULL);
+
+ retval = spi_state_set_cache_new (corba_seq);
+
+ CORBA_free (corba_seq);
+ cspi_release_unref (corba_stateset);
+
return retval;
}
+/**
+ * Accessible_getAttributes:
+ * @obj: The #Accessible being queried.
+ *
+ * Get the #AttributeSet representing any assigned
+ * name-value pair attributes or annotations for this object.
+ * For typographic, textual, or textually-semantic attributes, see
+ * AccessibleText_getAttributes instead.
+ *
+ * Returns: The name-value-pair attributes assigned to this object.
+ */
+AccessibleAttributeSet *
+Accessible_getAttributes (Accessible *obj)
+{
+ AccessibleAttributeSet *retval;
+ Accessibility_AttributeSet *corba_seq;
+
+ cspi_return_val_if_fail (obj != NULL, NULL);
+
+ corba_seq = Accessibility_Accessible_getAttributes (
+ CSPI_OBJREF (obj), cspi_ev ());
+ cspi_return_val_if_ev ("getAttributes", NULL);
+
+ retval = _cspi_attribute_set_from_sequence (corba_seq);
+ CORBA_free (corba_seq);
+
+ return retval;
+}
+
+/**
+ * Accessible_getHostApplication:
+ * @obj: The #Accessible being queried.
+ *
+ * Get the containing #AccessibleApplication for an object.
+ *
+ * Returns: the containing AccessibleApplication instance for this object.
+ */
+AccessibleApplication *
+Accessible_getHostApplication (Accessible *obj)
+{
+ AccessibleApplication *retval;
+
+ cspi_return_val_if_fail (obj != NULL, NULL);
+
+ retval = Accessible_getApplication (cspi_object_add (
+ Accessibility_Accessible_getApplication (CSPI_OBJREF (obj),
+ cspi_ev ())));
+ cspi_return_val_if_ev ("getApplication", NULL);
+
+ return retval;
+}
+
/* Interface query methods */
/**
}
/**
+ * Accessible_isDocument:
+ * @obj: a pointer to the #Accessible instance to query.
+ *
+ * Query whether the specified #Accessible implements #AccessibleDocument.
+ *
+ * Returns: #TRUE if @obj implements the #AccessibleDocument interface,
+ * #FALSE otherwise.
+ **/
+SPIBoolean
+Accessible_isDocument (Accessible *obj)
+{
+ return cspi_accessible_is_a (obj,
+ "IDL:Accessibility/Document:1.0");
+}
+
+/**
* Accessible_isEditableText:
* @obj: a pointer to the #Accessible instance to query.
*
return (AccessibleComponent *) Accessible_queryInterface (
obj, "IDL:Accessibility/Component:1.0");
}
+/**
+ * Accessible_getDocument:
+ * @obj: a pointer to the #Accessible instance to query.
+ *
+ * Get the #AccessibleDocument interface for an #Accessible.
+ *
+ * Returns: a pointer to an #AccessibleDocument interface instance, or
+ * NULL if @obj does not implement #AccessibleDocument.
+ **/
+AccessibleDocument *
+Accessible_getDocument (Accessible *obj)
+{
+ return (AccessibleDocument *) Accessible_queryInterface (
+ obj, "IDL:Accessibility/Document:1.0");
+}
/**
* Accessible_getEditableText:
cspi_object_unref (obj);
}
+static SPIBoolean
+cspi_init_relation_type_table (AccessibleRelationType *relation_type_table)
+{
+ int i;
+ for (i = 0; i < Accessibility_RELATION_LAST_DEFINED; ++i)
+ {
+ relation_type_table [i] = SPI_RELATION_NULL;
+ }
+ relation_type_table [Accessibility_RELATION_NULL] = SPI_RELATION_NULL;
+ relation_type_table [Accessibility_RELATION_LABEL_FOR] = SPI_RELATION_LABEL_FOR;
+ relation_type_table [Accessibility_RELATION_LABELLED_BY] = SPI_RELATION_LABELED_BY;
+ relation_type_table [Accessibility_RELATION_CONTROLLER_FOR] = SPI_RELATION_CONTROLLER_FOR;
+ relation_type_table [Accessibility_RELATION_CONTROLLED_BY] = SPI_RELATION_CONTROLLED_BY;
+ relation_type_table [Accessibility_RELATION_MEMBER_OF] = SPI_RELATION_MEMBER_OF;
+ relation_type_table [Accessibility_RELATION_TOOLTIP_FOR] = SPI_RELATION_NULL;
+ relation_type_table [Accessibility_RELATION_NODE_CHILD_OF] = SPI_RELATION_NODE_CHILD_OF;
+ relation_type_table [Accessibility_RELATION_EXTENDED] = SPI_RELATION_EXTENDED;
+ relation_type_table [Accessibility_RELATION_FLOWS_TO] = SPI_RELATION_FLOWS_TO;
+ relation_type_table [Accessibility_RELATION_FLOWS_FROM] = SPI_RELATION_FLOWS_FROM;
+ relation_type_table [Accessibility_RELATION_SUBWINDOW_OF] = SPI_RELATION_SUBWINDOW_OF;
+ relation_type_table [Accessibility_RELATION_EMBEDS] = SPI_RELATION_EMBEDS;
+ relation_type_table [Accessibility_RELATION_EMBEDDED_BY] = SPI_RELATION_EMBEDDED_BY;
+ relation_type_table [Accessibility_RELATION_POPUP_FOR] = SPI_RELATION_POPUP_FOR;
+ relation_type_table [Accessibility_RELATION_PARENT_WINDOW_OF] = SPI_RELATION_PARENT_WINDOW_OF;
+ relation_type_table [Accessibility_RELATION_DESCRIBED_BY] = SPI_RELATION_DESCRIBED_BY;
+ relation_type_table [Accessibility_RELATION_DESCRIPTION_FOR] = SPI_RELATION_DESCRIPTION_FOR;
+ return TRUE;
+}
+
+static AccessibleRelationType
+cspi_relation_type_from_spi_relation_type (Accessibility_RelationType type)
+{
+ /* array is sized according to IDL RelationType because IDL RelationTypes are the index */
+ static AccessibleRelationType cspi_relation_type_table [Accessibility_RELATION_LAST_DEFINED];
+ static SPIBoolean is_initialized = FALSE;
+ AccessibleRelationType cspi_type;
+ if (!is_initialized)
+ {
+ is_initialized = cspi_init_relation_type_table (cspi_relation_type_table);
+ }
+ if (type >= 0 && type < Accessibility_RELATION_LAST_DEFINED)
+ {
+ cspi_type = cspi_relation_type_table [type];
+ }
+ else
+ {
+ cspi_type = SPI_RELATION_NULL;
+ }
+ return cspi_type;
+}
/**
* AccessibleRelation_getRelationType:
* @obj: a pointer to the #AccessibleRelation object to query.
AccessibleRelationType
AccessibleRelation_getRelationType (AccessibleRelation *obj)
{
- AccessibleRelationType retval;
+ Accessibility_RelationType retval;
cspi_return_val_if_fail (obj, SPI_RELATION_NULL);
retval =
Accessibility_Relation_getRelationType (CSPI_OBJREF (obj), cspi_ev());
cspi_return_val_if_ev ("getRelationType", SPI_RELATION_NULL);
- return retval;
+ return cspi_relation_type_from_spi_relation_type (retval);
}
/**
void
AccessibleStateSet_ref (AccessibleStateSet *obj)
{
- cspi_object_ref (obj);
+ spi_state_set_cache_ref (obj);
}
/**
void
AccessibleStateSet_unref (AccessibleStateSet *obj)
{
- cspi_object_unref (obj);
+ spi_state_set_cache_unref (obj);
}
+static Accessibility_StateType
+spi_state_to_corba (AccessibleState state)
+{
+#define MAP_STATE(a) \
+ case SPI_STATE_##a: \
+ return Accessibility_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);
+ MAP_STATE (INDETERMINATE);
+ MAP_STATE (TRUNCATED);
+ MAP_STATE (REQUIRED);
+ MAP_STATE (INVALID_ENTRY);
+ MAP_STATE (SUPPORTS_AUTOCOMPLETION);
+ MAP_STATE (SELECTABLE_TEXT);
+ MAP_STATE (IS_DEFAULT);
+ MAP_STATE (VISITED);
+ default:
+ return Accessibility_STATE_INVALID;
+ }
+#undef MAP_STATE
+}
+
/**
* AccessibleStateSet_contains:
* @obj: a pointer to the #AccessibleStateSet object on which to operate.
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 spi_state_set_cache_contains (obj, spi_state_to_corba (state));
}
/**
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");
+ spi_state_set_cache_add (obj, spi_state_to_corba (state));
}
/**
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");
+ spi_state_set_cache_remove (obj, spi_state_to_corba (state));
}
/**
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 = spi_state_set_cache_xor (obj, obj2);
+ eq = spi_state_set_cache_is_empty (cmp);
+ spi_state_set_cache_unref (cmp);
- return Accessibility_StateSet_equals (CSPI_OBJREF (obj),
- CSPI_OBJREF (obj2), cspi_ev ());
+ return eq;
}
/**
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 spi_state_set_cache_xor (obj, obj2);
}
/**
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 spi_state_set_cache_is_empty (obj);
}