#include <bonobo/bonobo-exception.h>
#include <atk/atk.h>
#include <libspi/libspi.h>
+#include "spi-private.h"
/* Our parent Gtk object type */
#define PARENT_TYPE SPI_TYPE_BASE
static gboolean spi_init_role_lookup_table (Accessibility_Role *role_table);
-static Accessibility_Role spi_role_from_atk_role (AtkRole role);
+Accessibility_Role spi_accessible_role_from_atk_role (AtkRole role);
static gboolean
spi_init_role_lookup_table (Accessibility_Role *role_table)
role_table [ATK_ROLE_FOOTER] = Accessibility_ROLE_FOOTER;
role_table [ATK_ROLE_PARAGRAPH] = Accessibility_ROLE_PARAGRAPH;
role_table [ATK_ROLE_RULER] = Accessibility_ROLE_RULER;
-
+ role_table [ATK_ROLE_APPLICATION] = Accessibility_ROLE_APPLICATION;
+ role_table [ATK_ROLE_AUTOCOMPLETE] = Accessibility_ROLE_AUTOCOMPLETE;
+ role_table [ATK_ROLE_EDITBAR] = Accessibility_ROLE_EDITBAR;
+ role_table [ATK_ROLE_EMBEDDED] = Accessibility_ROLE_EMBEDDED;
+ role_table [ATK_ROLE_ENTRY] = Accessibility_ROLE_ENTRY;
+ role_table [ATK_ROLE_CHART] = Accessibility_ROLE_CHART;
+ role_table [ATK_ROLE_CAPTION] = Accessibility_ROLE_CAPTION;
+ role_table [ATK_ROLE_DOCUMENT_FRAME] = Accessibility_ROLE_DOCUMENT_FRAME;
+ role_table [ATK_ROLE_HEADING] = Accessibility_ROLE_HEADING;
+ role_table [ATK_ROLE_PAGE] = Accessibility_ROLE_PAGE;
+ role_table [ATK_ROLE_SECTION] = Accessibility_ROLE_SECTION;
+ role_table [ATK_ROLE_FORM] = Accessibility_ROLE_FORM;
+ role_table [ATK_ROLE_REDUNDANT_OBJECT] = Accessibility_ROLE_REDUNDANT_OBJECT;
+ role_table [ATK_ROLE_LINK] = Accessibility_ROLE_LINK;
+ role_table [ATK_ROLE_INPUT_METHOD_WINDOW] = Accessibility_ROLE_INPUT_METHOD_WINDOW;
return TRUE;
}
-static Accessibility_Role
-spi_role_from_atk_role (AtkRole role)
+Accessibility_Role
+spi_accessible_role_from_atk_role (AtkRole role)
{
static gboolean is_initialized = FALSE;
static Accessibility_Role spi_role_table [ATK_ROLE_LAST_DEFINED];
atk_set = atk_object_ref_state_set (object);
set = spi_state_set_new (atk_set);
- retval = bonobo_object_dup_ref (
+ retval = CORBA_Object_duplicate (
BONOBO_OBJREF(set),
- ev);
+ NULL);
+
+ g_object_unref (atk_set);
return retval;
}
CORBA_Environment *ev)
{
Accessibility_RelationSet *retval;
- gint n_relations;
+ gint n_relations = 0;
gint i;
AtkRelationSet *relation_set;
AtkObject *object = get_atkobject_from_servant (servant);
relation_set = atk_object_ref_relation_set (object);
- n_relations = atk_relation_set_get_n_relations (relation_set);
+ if (relation_set)
+ n_relations = atk_relation_set_get_n_relations (relation_set);
retval = CORBA_sequence_Accessibility_Relation__alloc ();
retval->_length = retval->_maximum = n_relations;
for (i = 0; i < n_relations; ++i)
{
retval->_buffer[i] =
- bonobo_object_dup_ref (
+ CORBA_Object_duplicate (
BONOBO_OBJREF (
spi_relation_new (atk_relation_set_get_relation (relation_set, i))),
- ev);
+ NULL);
}
return retval;
AtkRole role;
AtkObject *object = get_atkobject_from_servant (servant);
- g_return_val_if_fail (object != NULL, 0);
+ g_return_val_if_fail (object != NULL, NULL);
role = atk_object_get_role (object);
return CORBA_string_dup ("");
}
+/*
+ * CORBA Accessibility::Accessible::getLocalizedRole method implementation
+ */
+static CORBA_char *
+impl_accessibility_accessible_get_local_role_name (PortableServer_Servant servant,
+ CORBA_Environment *ev)
+{
+ const gchar *role_name;
+ AtkRole role;
+ AtkObject *object = get_atkobject_from_servant (servant);
+
+ g_return_val_if_fail (object != NULL, NULL);
+
+ role = atk_object_get_role (object);
+
+ role_name = atk_role_get_localized_name (role);
+ if (role_name)
+ return CORBA_string_dup (role_name);
+ else
+ return CORBA_string_dup ("");
+}
+
+static Accessibility_Accessible
+impl_accessibility_accessible_get_application (PortableServer_Servant servant,
+ CORBA_Environment *ev)
+{
+ return spi_accessible_new_return (atk_get_root (), FALSE, ev);
+}
+
+static Accessibility_AttributeSet*
+impl_accessibility_accessible_get_attributes (PortableServer_Servant servant,
+ CORBA_Environment *ev)
+{
+ Accessibility_AttributeSet *retval;
+ AtkAttributeSet *attributes = NULL;
+ AtkAttribute *attr = NULL;
+ gint n_attributes = 0;
+ gint i;
+
+ AtkObject *object = get_atkobject_from_servant (servant);
+
+ g_return_val_if_fail (object != NULL, NULL);
+ attributes = atk_object_get_attributes (object);
+
+ if (attributes)
+ n_attributes = g_slist_length (attributes);
+
+ retval = CORBA_sequence_CORBA_string__alloc ();
+ retval->_length = retval->_maximum = n_attributes;
+ retval->_buffer = CORBA_sequence_CORBA_string_allocbuf (n_attributes);
+ CORBA_sequence_set_release (retval, CORBA_TRUE);
+
+ for (i = 0; i < n_attributes; ++i)
+ {
+ attr = g_slist_nth_data (attributes, i);
+ retval->_buffer[i] = CORBA_string_dup (g_strconcat (attr->name, ":", attr->value, NULL));
+ }
+
+ atk_attribute_set_free (attributes);
+
+ return retval;
+}
+
static void
spi_accessible_class_init (SpiAccessibleClass *klass)
{
epv->getState = impl_accessibility_accessible_get_state;
epv->getRole = impl_accessibility_accessible_get_role;
epv->getRoleName = impl_accessibility_accessible_get_role_name;
+ epv->getLocalizedRoleName = impl_accessibility_accessible_get_local_role_name;
+ epv->getApplication = impl_accessibility_accessible_get_application;
+ epv->getAttributes = impl_accessibility_accessible_get_attributes;
}
static void
BONOBO_TYPE_FUNC_FULL (SpiAccessible,
Accessibility_Accessible,
PARENT_TYPE,
- spi_accessible);
+ spi_accessible)
static GHashTable *public_corba_refs = NULL;
BONOBO_OBJECT (spi_value_interface_new (o)));
}
+ if (ATK_IS_STREAMABLE_CONTENT (o))
+ {
+ bonobo_object_add_interface (bonobo_object (retval),
+ BONOBO_OBJECT (spi_streamable_interface_new (o)));
+ }
+ if (ATK_IS_DOCUMENT (o)) /* We add collection interface to document */
+ {
+
+
+ SpiDocument *doc = spi_document_interface_new (o);
+ bonobo_object_add_interface (BONOBO_OBJECT (doc),
+ BONOBO_OBJECT (spi_collection_interface_new (o)));
+
+ bonobo_object_add_interface (bonobo_object (retval),
+ BONOBO_OBJECT (doc));
+ }
+ if (ATK_IS_HYPERLINK_IMPL (o))
+ {
+ /* !!! the cast below is used instead of the ATK_HYPERLINK macro, since
+ the object 'o' is not really a hyperlink, but is in fact an AtkHyperlinkImpl.
+ Ouch. This works since it gets cast back to GObject, but it's nasty and needs
+ to be cleaned up.
+ */
+ bonobo_object_add_interface (bonobo_object (retval),
+ BONOBO_OBJECT (spi_hyperlink_new ((AtkHyperlink*)o)));
+ }
+
return retval;
}