+ return (iface->set_size) (component, x, y);
+ else
+ return FALSE;
+}
+
+static gboolean
+atk_component_real_contains (AtkComponent *component,
+ gint x,
+ gint y,
+ AtkCoordType coord_type)
+{
+ gint real_x, real_y, width, height;
+
+ real_x = real_y = width = height = 0;
+
+ atk_component_get_extents (component, &real_x, &real_y, &width, &height, coord_type);
+
+ if ((x >= real_x) &&
+ (x < real_x + width) &&
+ (y >= real_y) &&
+ (y < real_y + height))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static AtkObject*
+atk_component_real_ref_accessible_at_point (AtkComponent *component,
+ gint x,
+ gint y,
+ AtkCoordType coord_type)
+{
+ gint count, i;
+
+ count = atk_object_get_n_accessible_children (ATK_OBJECT (component));
+
+ for (i = 0; i < count; i++)
+ {
+ AtkObject *obj;
+
+ obj = atk_object_ref_accessible_child (ATK_OBJECT (component), i);
+
+ if (obj != NULL)
+ {
+ if (atk_component_contains (ATK_COMPONENT (obj), x, y, coord_type))
+ {
+ return obj;
+ }
+ else
+ {
+ g_object_unref (obj);
+ }
+ }
+ }
+ return NULL;
+}
+
+static void
+atk_component_real_get_position (AtkComponent *component,
+ gint *x,
+ gint *y,
+ AtkCoordType coord_type)
+{
+ gint width, height;
+
+ atk_component_get_extents (component, x, y, &width, &height, coord_type);
+}
+
+static void
+atk_component_real_get_size (AtkComponent *component,
+ gint *width,
+ gint *height)
+{
+ gint x, y;
+ AtkCoordType coord_type;
+
+ /*
+ * Pick one coordinate type; it does not matter for size
+ */
+ coord_type = ATK_XY_WINDOW;
+
+ atk_component_get_extents (component, &x, &y, width, height, coord_type);
+}
+
+static AtkRectangle *
+atk_rectangle_copy (const AtkRectangle *rectangle)
+{
+ AtkRectangle *result = g_new (AtkRectangle, 1);
+ *result = *rectangle;
+
+ return result;