* AT-SPI - Assistive Technology Service Provider Interface
* (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
*
- * Copyright 2001 Sun Microsystems Inc.
+ * Copyright 2001, 2002 Sun Microsystems Inc.,
+ * Copyright 2001, 2002 Ximian, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
#include <libspi/component.h>
/* Our parent Gtk object type */
-#define PARENT_TYPE BONOBO_TYPE_OBJECT
+#define PARENT_TYPE SPI_TYPE_BASE
/* A pointer to our parent object class */
static GObjectClass *spi_component_parent_class;
-/*
- * Implemented GObject::finalize
- */
-static void
-accessibility_component_object_finalize (GObject *object)
+static AtkComponent *
+get_component_from_servant (PortableServer_Servant servant)
{
- SpiComponent *component = SPI_COMPONENT (object);
-
- printf("spi_accessible_component_object_finalize called\n");
- g_object_unref (component->atko);
- component->atko = NULL;
-
- printf("component atko freed, calling parent finalize\n");
- spi_component_parent_class->finalize (object);
+ SpiBase *object = SPI_BASE (bonobo_object_from_servant (servant));
+ g_return_val_if_fail (object != NULL, NULL);
+ g_return_val_if_fail (ATK_IS_OBJECT(object->gobj), NULL);
+ return ATK_COMPONENT (object->gobj);
}
/*
CORBA_Environment *ev)
{
CORBA_boolean retval;
- BonoboObject *obj;
- SpiComponent *component;
-
- obj = bonobo_object_from_servant (servant);
- g_return_val_if_fail (IS_SPI_COMPONENT(obj), FALSE);
- component = SPI_COMPONENT (obj);
- g_return_val_if_fail (ATK_IS_COMPONENT(component->atko), FALSE);
- retval = atk_component_contains (ATK_COMPONENT (component->atko), (gint) x, (gint) y,
+ AtkComponent *component = get_component_from_servant (servant);
+
+ g_return_val_if_fail (component != NULL, FALSE);
+
+ retval = atk_component_contains (component, x, y,
(AtkCoordType) coord_type);
return retval;
}
CORBA_short coord_type,
CORBA_Environment *ev)
{
- BonoboObject *obj;
- SpiComponent *component;
- Accessibility_Accessible retval;
- AtkObject *child;
-
- obj = bonobo_object_from_servant (servant);
- g_return_val_if_fail (IS_SPI_COMPONENT(obj), CORBA_OBJECT_NIL);
- component = SPI_COMPONENT (obj);
- g_return_val_if_fail (ATK_IS_COMPONENT(component->atko), CORBA_OBJECT_NIL);
-
- child = atk_component_ref_accessible_at_point (ATK_COMPONENT (component->atko),
- (gint) x, (gint) y,
- (AtkCoordType) coord_type);
- retval = bonobo_object_corba_objref (bonobo_object (spi_accessible_new (child)));
- return CORBA_Object_duplicate (retval, ev);
+ AtkObject *child;
+ AtkComponent *component = get_component_from_servant (servant);
+
+ g_return_val_if_fail (component != NULL, NULL);
+
+ child = atk_component_ref_accessible_at_point (component,
+ x, y,
+ (AtkCoordType) coord_type);
+ return spi_accessible_new_return (child, TRUE, ev);
}
/*
* CORBA Accessibility::Component::getExtents method implementation
*/
-static void
+static Accessibility_BoundingBox
impl_accessibility_component_get_extents (PortableServer_Servant servant,
- CORBA_long * x,
- CORBA_long * y,
- CORBA_long * width,
- CORBA_long * height,
- const CORBA_short coord_type,
+ const CORBA_short coord_type,
CORBA_Environment *ev)
{
- BonoboObject *obj;
- SpiComponent *component;
gint ix, iy, iw, ih;
+ Accessibility_BoundingBox retval;
+ AtkComponent *component = get_component_from_servant (servant);
- obj = bonobo_object_from_servant (servant);
- g_return_if_fail (IS_SPI_COMPONENT(obj));
- component = SPI_COMPONENT (obj);
- g_return_if_fail (ATK_IS_COMPONENT (component->atko));
+ atk_component_get_extents (component, &ix, &iy, &iw, &ih,
+ (AtkCoordType) coord_type);
- atk_component_get_extents (ATK_COMPONENT (component->atko), &ix, &iy, &iw, &ih,
- (AtkCoordType) coord_type);
- *x = (CORBA_long) ix;
- *y = (CORBA_long) iy;
- *width = (CORBA_long) iw;
- *height = (CORBA_long) ih;
+ retval.x = ix;
+ retval.y = iy;
+ retval.width = iw;
+ retval.height = ih;
+
+ return retval;
}
/*
const CORBA_short coord_type,
CORBA_Environment *ev)
{
- BonoboObject *obj = bonobo_object_from_servant (servant);
- SpiComponent *component;
gint ix, iy;
+ AtkComponent *component = get_component_from_servant (servant);
- g_return_if_fail (IS_SPI_COMPONENT(obj));
- component = SPI_COMPONENT(obj);
- g_return_if_fail (ATK_IS_COMPONENT(component->atko));
+ g_return_if_fail (component != NULL);
- atk_component_get_position (ATK_COMPONENT (component->atko), &ix, &iy,
+ atk_component_get_position (component, &ix, &iy,
(AtkCoordType) coord_type);
- *x = (CORBA_long) ix;
- *y = (CORBA_long) iy;
+ *x = ix;
+ *y = iy;
}
/*
CORBA_long * height,
CORBA_Environment *ev)
{
- SpiComponent *component;
- BonoboObject *obj = bonobo_object_from_servant (servant);
gint iw, ih;
+ AtkComponent *component = get_component_from_servant (servant);
+
+ g_return_if_fail (component != NULL);
+
+ atk_component_get_size (component, &iw, &ih);
+ *width = iw;
+ *height = ih;
+}
+
+static Accessibility_ComponentLayer
+impl_accessibility_component_get_layer (PortableServer_Servant servant,
+ CORBA_Environment *ev)
+{
+ AtkLayer atklayer;
+ AtkComponent *component = get_component_from_servant (servant);
+
+ g_return_val_if_fail (component != NULL, Accessibility_LAYER_INVALID);
+
+ atklayer = atk_component_get_layer (component);
+ switch (atklayer)
+ {
+ case ATK_LAYER_BACKGROUND:
+ return Accessibility_LAYER_BACKGROUND;
+ case ATK_LAYER_CANVAS:
+ return Accessibility_LAYER_CANVAS;
+ case ATK_LAYER_WIDGET:
+ return Accessibility_LAYER_WIDGET;
+ case ATK_LAYER_MDI:
+ return Accessibility_LAYER_MDI;
+ case ATK_LAYER_POPUP:
+ return Accessibility_LAYER_POPUP;
+ case ATK_LAYER_OVERLAY:
+ return Accessibility_LAYER_OVERLAY;
+ case ATK_LAYER_WINDOW:
+ return Accessibility_LAYER_WINDOW;
+ default:
+ break;
+ }
+ return Accessibility_LAYER_INVALID;
+}
+
+static CORBA_short
+impl_accessibility_component_get_mdi_z_order (PortableServer_Servant servant,
+ CORBA_Environment *ev)
+{
+ AtkComponent *component = get_component_from_servant (servant);
+
+ g_return_val_if_fail (component != NULL, -1);
+
+ return atk_component_get_mdi_zorder (component);
+}
+
+static CORBA_boolean
+impl_accessibility_component_grab_focus (PortableServer_Servant servant,
+ CORBA_Environment *ev)
+{
+ AtkComponent *component = get_component_from_servant (servant);
- g_return_if_fail (IS_SPI_COMPONENT(obj));
- component = SPI_COMPONENT(obj);
- g_return_if_fail (ATK_IS_COMPONENT(component->atko));
- atk_component_get_size (ATK_COMPONENT (component->atko), &iw, &ih);
- *width = (CORBA_long) iw;
- *height = (CORBA_long) ih;
+ g_return_val_if_fail (component != NULL, FALSE);
+
+ return atk_component_grab_focus (component);
+}
+
+static double
+impl_accessibility_component_get_alpha (PortableServer_Servant servant,
+ CORBA_Environment *ev)
+{
+ AtkComponent *component = get_component_from_servant (servant);
+
+ g_return_val_if_fail (component != NULL, FALSE);
+
+ return atk_component_get_alpha (component);
}
static void
spi_component_class_init (SpiComponentClass *klass)
{
- GObjectClass * object_class = (GObjectClass *) klass;
POA_Accessibility_Component__epv *epv = &klass->epv;
spi_component_parent_class = g_type_class_peek_parent (klass);
- object_class->finalize = accessibility_component_object_finalize;
-
epv->contains = impl_accessibility_component_contains;
epv->getAccessibleAtPoint = impl_accessibility_component_get_accessible_at_point;
epv->getExtents = impl_accessibility_component_get_extents;
epv->getPosition = impl_accessibility_component_get_position;
epv->getSize = impl_accessibility_component_get_size;
+ epv->getLayer = impl_accessibility_component_get_layer;
+ epv->getMDIZOrder = impl_accessibility_component_get_mdi_z_order;
+ epv->grabFocus = impl_accessibility_component_grab_focus;
+ epv->getAlpha = impl_accessibility_component_get_alpha;
}
static void
BONOBO_TYPE_FUNC_FULL (SpiComponent,
Accessibility_Component,
PARENT_TYPE,
- spi_component);
+ spi_component)
SpiComponent *
spi_component_interface_new (AtkObject *o)
{
- SpiComponent *retval =
- SPI_COMPONENT (g_object_new (SPI_COMPONENT_TYPE, NULL));
- retval->atko = o;
- g_object_ref (o);
+ SpiComponent *retval = g_object_new (SPI_COMPONENT_TYPE, NULL);
+
+ spi_base_construct (SPI_BASE (retval), G_OBJECT(o));
+
return retval;
}