[Ocemp-CVS] ocempgui/ocempgui/access/papi papi.c, 1.13.2.2, 1.13.2.3 papi.h, 1.6.2.2, 1.6.2.3 papi_
Status: Beta
Brought to you by:
marcusva
Update of /cvsroot/ocemp/ocempgui/ocempgui/access/papi In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv20874/ocempgui/access/papi Modified Files: Tag: rel_0_2 papi.c papi.h papi_atkactioniface.c papi_atkattribute.c papi_atkbridge.c papi_atkcomponentiface.c papi_atkdocumentiface.c papi_atkeditableiface.c papi_atkhyperlink.c papi_atkhyperlinkimpliface.c papi_atkhypertextiface.c papi_atkimageiface.c papi_atkobject.c papi_atkrelation.c papi_atkrelationset.c papi_atkrelationtype.c papi_atkrole.c papi_atkselectioniface.c papi_atkstateset.c papi_atkstatetype.c papi_atkstreamableiface.c papi_atktableiface.c papi_atktextattribute.c papi_atktextiface.c papi_atktextrange.c papi_atktextrectangle.c papi_atktype.c papi_atkutil.c papi_atkvalueiface.c papi_constants.c papi_private.h Log Message: Merged from HEAD: Added new drops attribute to Renderer. Merged papi 0.0.4. Index: papi_atktextrectangle.c =================================================================== RCS file: /cvsroot/ocemp/ocempgui/ocempgui/access/papi/papi_atktextrectangle.c,v retrieving revision 1.4.2.2 retrieving revision 1.4.2.3 diff -u -d -r1.4.2.2 -r1.4.2.3 --- papi_atktextrectangle.c 25 Dec 2006 13:05:45 -0000 1.4.2.2 +++ papi_atktextrectangle.c 23 Mar 2007 06:02:21 -0000 1.4.2.3 @@ -132,7 +132,7 @@ debug ("_atktextrextangle_new\n"); self = (PyAtkTextRectangle *) type->tp_alloc (type, 0); - self->obj = PyMem_New (AtkTextRectangle, 1); + self->obj = g_new (AtkTextRectangle, 1); if (!self->obj) { PyErr_SetNone (PyExc_MemoryError); @@ -175,7 +175,7 @@ debug ("_atktextrectangle_dealloc\n"); if (self->obj) - PyMem_Free (self->obj); + g_free (self->obj); self->ob_type->tp_free ((PyObject *) self); } Index: papi_atktableiface.c =================================================================== RCS file: /cvsroot/ocemp/ocempgui/ocempgui/access/papi/papi_atktableiface.c,v retrieving revision 1.10.2.2 retrieving revision 1.10.2.3 diff -u -d -r1.10.2.2 -r1.10.2.3 --- papi_atktableiface.c 25 Dec 2006 13:05:45 -0000 1.10.2.2 +++ papi_atktableiface.c 23 Mar 2007 06:02:20 -0000 1.10.2.3 @@ -493,7 +493,7 @@ } /** - * Wrapper for atk_table_ref_at(). + * Wrapper for atk_table_get_row_header(). */ static AtkObject* _table_get_row_header (AtkTable *table, gint row) Index: papi_atkobject.c =================================================================== RCS file: /cvsroot/ocemp/ocempgui/ocempgui/access/papi/papi_atkobject.c,v retrieving revision 1.19.2.2 retrieving revision 1.19.2.3 diff -u -d -r1.19.2.2 -r1.19.2.3 --- papi_atkobject.c 25 Dec 2006 13:05:45 -0000 1.19.2.2 +++ papi_atkobject.c 23 Mar 2007 06:02:20 -0000 1.19.2.3 @@ -28,6 +28,7 @@ #include "papi_private.h" /* Forward declarations for AtkObject bindings. */ +static PyObject* _not_implemented_noargs (PyObject *self); static PyObject* _atkobject_new (PyTypeObject *type, PyObject *args, PyObject *kwds); static int _atkobject_init (PyAtkObject *self, PyObject *args, PyObject *kwds); @@ -36,7 +37,6 @@ static PyObject* _atkobject_ref_accessible_child (PyAtkObject *self, PyObject *args); static PyObject* _atkobject_ref_relation_set (PyAtkObject *self); -static PyObject* _atkobject_ref_state_set (PyAtkObject *self); static PyObject* _atkobject_connect_property_change_handler (PyAtkObject *self, PyObject *args); static PyObject* _atkobject_remove_property_change_handler (PyAtkObject *self, @@ -94,7 +94,7 @@ METH_NOARGS, "O.ref_relation_set () -> AtkRelationSet\n\n" "Gets the AtkRelationSet associated with the object." }, - { "ref_state_set", (PyCFunction) _atkobject_ref_state_set, METH_NOARGS, + { "ref_state_set", (PyCFunction) _not_implemented_noargs, METH_NOARGS, "O.ref_state_set () -> AtkStateSet\n\n" "Gets a reference to the state set of the accessible." }, { "connect_property_change_handler", @@ -211,6 +211,41 @@ 0 /* tp_del */ }; +static inline PyObject* +_construct_object (AtkObject *val) +{ + PyObject *retval; + + debug ("Constructing object...\n"); + + if (val) + { + retval = g_object_get_data (G_OBJECT (val), PAPI_PYOBJECT); + if (!retval) /* Not constructed by Papi. */ + { + AtkInterfaceType ifaces; + GType *types; + + retval = PyAtkObject_Type.tp_new (&PyAtkObject_Type, NULL, NULL); + ((PyAtkObject *) retval)->obj = g_object_ref (val); + + /* Prepare some data slots for the references. */ + g_object_set_data (G_OBJECT (val), PAPI_CHILDREN, NULL); + g_object_set_data (G_OBJECT (val), PAPI_PYOBJECT, retval); + + /* Set up the interfaces for the type. */ + types = g_type_interfaces (G_TYPE_FROM_INSTANCE (val), NULL); + ifaces = atktype_get_num (types); + g_free (types); + atktype_add_interface_methods (retval, ifaces); + } + else + Py_INCREF (retval); + return retval; + } + Py_RETURN_NONE; +} + /** * Creates a new PyAtkObject. */ @@ -244,10 +279,11 @@ /* Prepare some data slots for the references. */ g_object_set_data (G_OBJECT (self->obj), PAPI_CHILDREN, NULL); g_object_set_data (G_OBJECT (self->obj), PAPI_PYOBJECT, self); + + atktype_add_interface_methods ((PyObject *) self, ifaces); } /* Update the interface bindings. */ - atktype_add_interface_methods ((PyObject *) self, ifaces); return 0; } @@ -290,6 +326,16 @@ } /** + * Default implementation for the interfaces. + */ +static PyObject* +_not_implemented_noargs (PyObject *self) +{ + PyErr_SetString (PyExc_NotImplementedError, "method not implemented"); + return NULL; +} + +/** * Wrapper for atk_object_get_name(). */ static PyObject* @@ -379,14 +425,7 @@ debug ("_atkobject_get_parent\n"); val = atk_object_get_parent (ATKOBJECT (self)); - if (val) - { - PyAtkObject *obj = (PyAtkObject *) - PyAtkObject_Type.tp_new (&PyAtkObject_Type, NULL, NULL); - obj->obj = g_object_ref (val); - return (PyObject *) obj; - } - Py_RETURN_NONE; + return _construct_object (val); } /** @@ -455,7 +494,6 @@ static PyObject* _atkobject_ref_accessible_child (PyAtkObject *self, PyObject *args) { - PyAtkObject *obj; AtkObject *val; int i; @@ -465,10 +503,7 @@ return NULL; val = atk_object_ref_accessible_child (ATKOBJECT (self), i); - obj = (PyAtkObject *) - PyAtkObject_Type.tp_new (&PyAtkObject_Type, NULL, NULL); - obj->obj = val; - return (PyObject *) obj; + return _construct_object (val); } /** @@ -551,23 +586,6 @@ } /** - * Wrapper for atk_object_ref_state_set(). - */ -static PyObject* -_atkobject_ref_state_set (PyAtkObject *self) -{ - PyAtkStateSet *retval; - AtkStateSet *set; - - debug ("_atkobject_ref_state_set\n"); - - set = atk_object_ref_state_set (ATKOBJECT (self)); - retval = PyObject_New (PyAtkStateSet, &PyAtkStateSet_Type); - retval->obj = set; - return (PyObject *) retval; -} - -/** * Wrapper for atk_object_get_index_in_parent(). */ static PyObject* @@ -876,6 +894,30 @@ } /** + * Interface for AtkObjectClass->ref_state_set. + */ +static AtkStateSet* +_class_ref_state_set (AtkObject *obj) +{ + PyObject *pyobj; + PyObject *result; + AtkStateSet *retval = NULL; + + debug ("_class_ref_state_set\n"); + + pyobj = g_object_get_data (G_OBJECT (obj), PAPI_PYOBJECT); + result = PyObject_CallMethod (pyobj, "ref_state_set", NULL); + if (!result) + return atk_state_set_new (); /* Returning NULL crashes A11Y apps. */ + + if (PyObject_TypeCheck (result, &PyAtkStateSet_Type)) + retval = ATKSTATESET (result); + g_object_ref (retval); + Py_DECREF (result); + return retval; +} + +/** * Generic callback handler for property changes, which invokes the * user-defined python handlers. */ @@ -918,4 +960,5 @@ class->get_n_children = _class_get_n_children; class->ref_child = _class_ref_child; class->get_index_in_parent = _class_get_index_in_parent; + class->ref_state_set = _class_ref_state_set; } Index: papi_atktype.c =================================================================== RCS file: /cvsroot/ocemp/ocempgui/ocempgui/access/papi/papi_atktype.c,v retrieving revision 1.7.2.2 retrieving revision 1.7.2.3 diff -u -d -r1.7.2.2 -r1.7.2.3 --- papi_atktype.c 25 Dec 2006 13:05:45 -0000 1.7.2.2 +++ papi_atktype.c 23 Mar 2007 06:02:21 -0000 1.7.2.3 @@ -35,7 +35,7 @@ */ #define MAX_NAME_LEN (24) -static inline char*_get_type_name (AtkInterfaceType ifacenum); +static inline char* _get_type_name (AtkInterfaceType ifacenum); /** * Generates an unique type name for the GType system, so that a new @@ -53,6 +53,44 @@ return name; } +AtkInterfaceType +atktype_get_num (GType *types) +{ + int i = 0; + AtkInterfaceType retval = 0; + + while (types[i] != 0) + { + if (types[i] == ATK_TYPE_ACTION) + retval |= IFACE_ACTION; + else if (types[i] == ATK_TYPE_COMPONENT) + retval |= IFACE_COMPONENT; + else if (types[i] == ATK_TYPE_DOCUMENT) + retval |= IFACE_DOCUMENT; + else if (types[i] == ATK_TYPE_EDITABLE_TEXT) + retval |= IFACE_EDITABLE_TEXT; + else if (types[i] == ATK_TYPE_HYPERTEXT) + retval |= IFACE_HYPERTEXT; + else if (types[i] == ATK_TYPE_IMAGE) + retval |= IFACE_IMAGE; + else if (types[i] == ATK_TYPE_SELECTION) + retval |= IFACE_SELECTION; + else if (types[i] == ATK_TYPE_STREAMABLE_CONTENT) + retval |= IFACE_STREAMABLE; + else if (types[i] == ATK_TYPE_TABLE) + retval |= IFACE_TABLE; + else if (types[i] == ATK_TYPE_TEXT) + retval |= IFACE_TEXT; + else if (types[i] == ATK_TYPE_VALUE) + retval |= IFACE_VALUE; + else if (types[i] == ATK_TYPE_HYPERLINK_IMPL) + retval |= IFACE_HYPERLINK_IMPL; + i++; + } + return retval; +} + + /* GType system. */ GType atktype_get_type (AtkInterfaceType ifacenum) Index: papi_atktextiface.c =================================================================== RCS file: /cvsroot/ocemp/ocempgui/ocempgui/access/papi/papi_atktextiface.c,v retrieving revision 1.11.2.2 retrieving revision 1.11.2.3 diff -u -d -r1.11.2.2 -r1.11.2.3 --- papi_atktextiface.c 25 Dec 2006 13:05:45 -0000 1.11.2.2 +++ papi_atktextiface.c 23 Mar 2007 06:02:21 -0000 1.11.2.3 @@ -1,6 +1,6 @@ /* $Id$ * - * Copyright (c) 2006, Marcus von Appen + * Copyright (c) 2006-2007, Marcus von Appen * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -309,7 +309,7 @@ retval = PyString_AsString (result); Py_DECREF (result); - return retval; + return g_strdup (retval); } /** @@ -358,7 +358,7 @@ retval = PyString_AsString (result); Py_DECREF (result); - return retval; + return g_strdup (retval); } /** @@ -383,7 +383,7 @@ retval = PyString_AsString (result); Py_DECREF (result); - return retval; + return g_strdup (retval); } /** @@ -409,7 +409,7 @@ retval = PyString_AsString (result); Py_DECREF (result); - return retval; + return g_strdup (retval); } /** @@ -693,7 +693,7 @@ Py_DECREF (val); } Py_DECREF (result); - return retval; + return g_strdup (retval); } /** Index: papi_private.h =================================================================== RCS file: /cvsroot/ocemp/ocempgui/ocempgui/access/papi/papi_private.h,v retrieving revision 1.15.2.2 retrieving revision 1.15.2.3 diff -u -d -r1.15.2.2 -r1.15.2.3 --- papi_private.h 25 Dec 2006 13:05:45 -0000 1.15.2.2 +++ papi_private.h 23 Mar 2007 06:02:21 -0000 1.15.2.3 @@ -134,6 +134,7 @@ * Functions to add the different available ATK interfaces to the * underlying AtkObject instances and to the Python object wrapper. */ +AtkInterfaceType atktype_get_num (GType *types); GType atktype_get_type (AtkInterfaceType ifacenum); void atktype_add_interface_methods (PyObject *self, AtkInterfaceType ifacenum); Index: papi_atktextrange.c =================================================================== RCS file: /cvsroot/ocemp/ocempgui/ocempgui/access/papi/papi_atktextrange.c,v retrieving revision 1.3.2.2 retrieving revision 1.3.2.3 diff -u -d -r1.3.2.2 -r1.3.2.3 --- papi_atktextrange.c 25 Dec 2006 13:05:45 -0000 1.3.2.2 +++ papi_atktextrange.c 23 Mar 2007 06:02:21 -0000 1.3.2.3 @@ -134,7 +134,7 @@ debug ("_atktextrange_new\n"); self = (PyAtkTextRange *) type->tp_alloc (type, 0); - self->obj = PyMem_New (AtkTextRange, 1); + self->obj = g_new (AtkTextRange, 1); if (!self->obj) { PyErr_SetNone (PyExc_MemoryError); @@ -189,7 +189,7 @@ debug ("_atktextrange_dealloc\n"); if (self->obj) - PyMem_Free (self->obj); + g_free (self->obj); self->ob_type->tp_free ((PyObject *) self); } |