diff options
Diffstat (limited to 'testing/python-pyspi')
-rw-r--r-- | testing/python-pyspi/PKGBUILD | 32 | ||||
-rw-r--r-- | testing/python-pyspi/pyspi-build.patch | 1693 |
2 files changed, 0 insertions, 1725 deletions
diff --git a/testing/python-pyspi/PKGBUILD b/testing/python-pyspi/PKGBUILD deleted file mode 100644 index 0fb75b940..000000000 --- a/testing/python-pyspi/PKGBUILD +++ /dev/null @@ -1,32 +0,0 @@ -# $Id: PKGBUILD 168874 2012-10-16 11:55:20Z allan $ -# Maintainer: Jan de Groot <jgc@archlinux.org> -# Contributor: William Rea <sillywilly@gmail.com> - -pkgbase=python-pyspi -pkgname=python2-pyspi -pkgver=0.6.1 -pkgrel=1 -pkgdesc="Python AT-SPI bindings" -arch=('i686' 'x86_64') -url="http://people.redhat.com/zcerza/dogtail" -license=('LGPL') -depends=('python2' 'at-spi') -makedepends=('pyrex') -conflicts=('python-pyspi<=0.6.1-5') -conflicts=('python-pyspi<=0.6.1-5') -source=("http://dlc.sun.com/osol/jds/downloads/sources/pyspi-${pkgver}.tar.gz" - 'pyspi-build.patch') -md5sums=('def336bd566ea688a06ec03db7ccf1f4' - '721f74cbae653a258c00b83acf7dd1da') - -build() { - cd ${srcdir}/pyspi-${pkgver} - patch -Np1 -i ${srcdir}/pyspi-build.patch - # Pyrex tells us to use __cinit__ instead of __new__ - sed -i 's/__new__/__cinit__/' pyspi.pyx -} - -package_python2-pyspi() { - cd ${srcdir}/pyspi-${pkgver} - python2 setup.py install --root=${pkgdir} -} diff --git a/testing/python-pyspi/pyspi-build.patch b/testing/python-pyspi/pyspi-build.patch deleted file mode 100644 index 3d12c5ed5..000000000 --- a/testing/python-pyspi/pyspi-build.patch +++ /dev/null @@ -1,1693 +0,0 @@ -diff -Naur pyspi-0.6.1-old/cspi.pxd pyspi-0.6.1/cspi.pxd ---- pyspi-0.6.1-old/cspi.pxd 2006-08-04 06:27:10.000000000 +1000 -+++ pyspi-0.6.1/cspi.pxd 2009-05-09 15:24:31.000000000 +1000 -@@ -14,9 +14,7 @@ - - ctypedef struct AccessibleTextRange - ctypedef struct AccessibleKeySet -- ctypedef enum SPIBoolean: -- FALSE = 0, -- TRUE -+ ctypedef unsigned int SPIBoolean - - ctypedef struct AccessibleEvent: - char *type -diff -Naur pyspi-0.6.1-old/pyspi.pyx pyspi-0.6.1/pyspi.pyx ---- pyspi-0.6.1-old/pyspi.pyx 2006-10-03 02:46:41.000000000 +1000 -+++ pyspi-0.6.1/pyspi.pyx 2009-05-09 15:24:31.000000000 +1000 -@@ -25,9 +25,15 @@ - cdef class Event (EventBase) - cdef class DeviceEvent - --ctypedef enum bool: -+ctypedef unsigned int bool -+ -+import __builtin__ -+try: -+ False = __builtin__.False -+ True = __builtin__.True -+except AttributeError: - False = 0 -- True -+ True = 1 - - # SPIExceptionCode values: - (SPI_EXCEPTION_UNSPECIFIED, SPI_EXCEPTION_DISCONNECT, SPI_EXCEPTION_NO_IMPL, SPI_EXCEPTION_IO, SPI_EXCEPTION_BAD_DATA)=range(5) -@@ -731,7 +737,7 @@ - Wrapper around the low-level cspi.AccessibleComponent_ functions, - giving an OO-style API. - """ -- def getExtents (self, type=0): -+ def getExtents (self, key_type=0): - """ - Wraps cspi.AccessibleComponent_getExtents, returning an - (x,y,w,h) tuple. -@@ -741,7 +747,7 @@ - cspi.AccessibleComponent_getExtents (self.__item, &x, &y, &w, &h, type) - return (x, y, w, h) - -- def getPosition (self, type = 0): -+ def getPosition (self, key_type = 0): - """ - Wraps cspi.AccessibleComponent_getPosition, returning an - (x,y) tuple. -@@ -991,11 +997,11 @@ - Wraps cspi.AccessibleHyperlink_getObject - """ - self.__checkSelf () -- cdef Accessible object -- object = Accessible () -- object.__setItem (cspi.AccessibleHyperlink_getObject (self.__item, i)) -- object.__checkSelf () -- return object -+ cdef Accessible obj -+ obj = Accessible () -+ obj.__setItem (cspi.AccessibleHyperlink_getObject (self.__item, i)) -+ obj.__checkSelf () -+ return obj - - def getURI (self, i): - """ -@@ -1032,7 +1038,7 @@ - cspi.AccessibleImage_getImageSize(self.__item, &w, &h); - return [w, h] - -- def getImagePosition (self, type=0): -+ def getImagePosition (self, key_type=0): - """ - Wraps cspi.AccessibleImage_getImagePosition, returning a (x,y) - pair -@@ -1042,7 +1048,7 @@ - cspi.AccessibleImage_getImagePosition(self.__item, &x, &y, type) - return [x, y] - -- def getImageExtents (self, type=0): -+ def getImageExtents (self, key_type=0): - """ - Wraps cspi.AccessibleImage_getImageExtents, returning a - (x,y,w,h) tuple -@@ -1551,7 +1557,7 @@ - cdef cspi.AccessibleDeviceListener *__item - cdef public object modMasks - -- def __init__ (self, callback, eventMask = cspi.SPI_KEY_PRESSED | cspi.SPI_KEY_RELEASED): -+ def __init__ (self, callback, eventMask = <int> cspi.SPI_KEY_PRESSED | <int> cspi.SPI_KEY_RELEASED): - """ - Registers a python callback function to be called. - -diff -Naur pyspi-0.6.1-old/pyspi.pyx.orig pyspi-0.6.1/pyspi.pyx.orig ---- pyspi-0.6.1-old/pyspi.pyx.orig 1970-01-01 10:00:00.000000000 +1000 -+++ pyspi-0.6.1/pyspi.pyx.orig 2006-10-03 02:46:41.000000000 +1000 -@@ -0,0 +1,1592 @@ -+# Authors: -+# Zack Cerza <zcerza@redhat.com> -+# Chris Lee <clee@redhat.com> -+# Lawrence Lim <llim@redhat.com> -+# David Malcolm <dmalcolm@redhat.com> -+ -+cdef class Registry -+ -+cdef class Base -+cdef class EventBase -+cdef class StateSet -+cdef class Accessible (Base) -+cdef class Desktop (Accessible) -+cdef class Application (Accessible) -+cdef class Component (Accessible) -+cdef class Action (Base) -+cdef class Text (Base) -+cdef class EditableText (Text) -+cdef class Hypertext (Text) -+cdef class Hyperlink (Base) -+cdef class Image (Base) -+cdef class Value (Base) -+cdef class Selection (Base) -+cdef class Table (Base) -+cdef class Event (EventBase) -+cdef class DeviceEvent -+ -+ctypedef enum bool: -+ False = 0 -+ True -+ -+# SPIExceptionCode values: -+(SPI_EXCEPTION_UNSPECIFIED, SPI_EXCEPTION_DISCONNECT, SPI_EXCEPTION_NO_IMPL, SPI_EXCEPTION_IO, SPI_EXCEPTION_BAD_DATA)=range(5) -+ -+# SPIExceptionType values: -+(SPI_EXCEPTION_SOURCE_UNSPECIFIED, SPI_EXCEPTION_SOURCE_ACCESSIBLE, SPI_EXCEPTION_SOURCE_REGISTRY, SPI_EXCEPTION_SOURCE_DEVICE)=range(4) -+ -+# Accessible roles -+(SPI_ROLE_INVALID, SPI_ROLE_ACCEL_LABEL, SPI_ROLE_ALERT, SPI_ROLE_ANIMATION, SPI_ROLE_ARROW, SPI_ROLE_CALENDAR, SPI_ROLE_CANVAS, SPI_ROLE_CHECK_BOX, SPI_ROLE_CHECK_MENU_ITEM, SPI_ROLE_COLOR_CHOOSER, SPI_ROLE_COLUMN_HEADER, SPI_ROLE_COMBO_BOX, SPI_ROLE_DATE_EDITOR, SPI_ROLE_DESKTOP_ICON, SPI_ROLE_DESKTOP_FRAME, SPI_ROLE_DIAL, SPI_ROLE_DIALOG, SPI_ROLE_DIRECTORY_PANE, SPI_ROLE_DRAWING_AREA, SPI_ROLE_FILE_CHOOSER, SPI_ROLE_FILLER, SPI_ROLE_FONT_CHOOSER, SPI_ROLE_FRAME, SPI_ROLE_GLASS_PANE, SPI_ROLE_HTML_CONTAINER, SPI_ROLE_ICON, SPI_ROLE_IMAGE, SPI_ROLE_INTERNAL_FRAME, SPI_ROLE_LABEL, SPI_ROLE_LAYERED_PANE, SPI_ROLE_LIST, SPI_ROLE_LIST_ITEM, SPI_ROLE_MENU, SPI_ROLE_MENU_BAR, SPI_ROLE_MENU_ITEM, SPI_ROLE_OPTION_PANE, SPI_ROLE_PAGE_TAB, SPI_ROLE_PAGE_TAB_LIST, SPI_ROLE_PANEL, SPI_ROLE_PASSWORD_TEXT, SPI_ROLE_POPUP_MENU, SPI_ROLE_PROGRESS_BAR, SPI_ROLE_PUSH_BUTTON, SPI_ROLE_RADIO_BUTTON, SPI_ROLE_RADIO_MENU_ITEM, SPI_ROLE_ROOT_PANE, SPI_ROLE_ROW_HEADER, SPI_ROLE_SCROLL_BAR, SPI_ROLE_SCROLL_PANE, SPI_ROLE_SEPARATOR, SPI_ROLE_SLIDER, SPI_ROLE_SPIN_BUTTON, SPI_ROLE_SPLIT_PANE, SPI_ROLE_STATUS_BAR, SPI_ROLE_TABLE, SPI_ROLE_TABLE_CELL, SPI_ROLE_TABLE_COLUMN_HEADER, SPI_ROLE_TABLE_ROW_HEADER, SPI_ROLE_TEAROFF_MENU_ITEM, SPI_ROLE_TERMINAL, SPI_ROLE_TEXT, SPI_ROLE_TOGGLE_BUTTON, SPI_ROLE_TOOL_BAR, SPI_ROLE_TOOL_TIP, SPI_ROLE_TREE, SPI_ROLE_TREE_TABLE, SPI_ROLE_UNKNOWN, SPI_ROLE_VIEWPORT, SPI_ROLE_WINDOW, SPI_ROLE_EXTENDED, SPI_ROLE_HEADER, SPI_ROLE_FOOTER, SPI_ROLE_PARAGRAPH, SPI_ROLE_RULER, SPI_ROLE_APPLICATION, SPI_ROLE_AUTOCOMPLETE, SPI_ROLE_EDITBAR, SPI_ROLE_EMBEDDED, SPI_ROLE_LAST_DEFINED)=range(79) -+ -+# Accessible states -+(SPI_STATE_INVALID, SPI_STATE_ACTIVE, SPI_STATE_ARMED, SPI_STATE_BUSY, SPI_STATE_CHECKED, SPI_STATE_COLLAPSED, SPI_STATE_DEFUNCT, SPI_STATE_EDITABLE, SPI_STATE_ENABLED, SPI_STATE_EXPANDABLE, SPI_STATE_EXPANDED, SPI_STATE_FOCUSABLE, SPI_STATE_FOCUSED, SPI_STATE_HORIZONTAL, SPI_STATE_ICONIFIED, SPI_STATE_MODAL, SPI_STATE_MULTI_LINE, SPI_STATE_MULTISELECTABLE, SPI_STATE_OPAQUE, SPI_STATE_PRESSED, SPI_STATE_RESIZABLE, SPI_STATE_SELECTABLE, SPI_STATE_SELECTED, SPI_STATE_SENSITIVE, SPI_STATE_SHOWING, SPI_STATE_SINGLE_LINE, SPI_STATE_STALE, SPI_STATE_TRANSIENT, SPI_STATE_VERTICAL, SPI_STATE_VISIBLE, SPI_STATE_MANAGES_DESCENDANTS, SPI_STATE_INDETERMINATE) = range(32); -+ -+# Accessible relation types -+(SPI_RELATION_NULL, SPI_RELATION_LABEL_FOR, SPI_RELATION_LABELED_BY, SPI_RELATION_CONTROLLER_FOR, SPI_RELATION_CONTROLLED_BY, SPI_RELATION_MEMBER_OF, SPI_RELATION_NODE_CHILD_OF, SPI_RELATION_EXTENDED, SPI_RELATION_FLOWS_TO, SPI_RELATION_FLOWS_FROM, SPI_RELATION_SUBWINDOW_OF, SPI_RELATION_EMBEDS, SPI_RELATION_EMBEDDED_BY, SPI_RELATION_POPUP_FOR, SPI_RELATION_LAST_DEFINED) = range (15); -+ -+# AccessibleComponent layers -+(SPI_LAYER_INVALID, SPI_LAYER_BACKGROUND, SPI_LAYER_CANVAS, SPI_LAYER_WIDGET, SPI_LAYER_MDI, SPI_LAYER_POPUP, SPI_LAYER_OVERLAY, SPI_LAYER_WINDOW, SPI_LAYER_LAST_DEFINED) = range(9) -+ -+#AccessibleKeySynthType -+(SPI_KEY_PRESS, SPI_KEY_RELEASE, SPI_KEY_PRESSRELEASE, SPI_KEY_SYM, SPI_KEY_STRING) = range(5) -+ -+# AccessibleKeyListenerSyncType -+(SPI_KEYLISTENER_NOSYNC, SPI_KEYLISTENER_SYNCHRONOUS, SPI_KEYLISTENER_CANCONSUME, SPI_KEYLISTENER_ALL_WINDOWS) = range(4) -+ -+# AccessibleDeviceEventType -+SPI_KEY_PRESSED = 1<<0 -+SPI_KEY_RELEASED = 1<<1 -+SPI_BUTTON_PRESSED = 1<<2 -+SPI_BUTTON_RELEASED = 1<<3 -+ -+cdef cspi.AccessibleKeySet *SPI_KEYSET_ALL_KEYS -+SPI_KEYSET_ALL_KEYS = NULL -+ -+Accessibility_MODIFIER_SHIFT = 1 << 0 -+Accessibility_MODIFIER_SHIFTLOCK = 1 << 1 -+Accessibility_MODIFIER_CONTROL = 1 << 2 -+Accessibility_MODIFIER_ALT = 1 << 3 -+Accessibility_MODIFIER_META = 1 << 4 -+Accessibility_MODIFIER_META2 = 1 << 5 -+Accessibility_MODIFIER_META3 = 1 << 6 -+Accessibility_MODIFIER_NUMLOCK = 1 << 7 -+ -+ -+cdef object string(char * string): -+ cdef object pyString -+ pyString = string -+ cspi.SPI_freeString(string) -+ return pyString -+ -+import os -+class X11Exception(Exception): -+ def __init__(self, display = os.environ.get('DISPLAY', None)): -+ self.display = display -+ def __str__(self): -+ msg = "Cannot open display" -+ if self.display: return msg + ': ' + self.display -+ else: return msg -+ -+class AtspiException(Exception): -+ """ -+ Exceptions raised when calls to the AT-SPI C bindings return FALSE to -+ indicate failure. -+ """ -+ def __init__(self, message): -+ self.message = message -+ -+ def __str__(self): -+ return "AtspiException: %s"%self.message -+ -+class SpiException(Exception): -+ """ -+ Exceptions to be raised in response to an installed -+ SPIExceptionHandler, corresponding to a SPIException. These appear to -+ be short-lived structs, so we gather all applicable data immediately -+ """ -+ def __init__(self, is_fatal, sourceType, exceptionCode, description): -+ # print "got to __init__" -+ self.fatal = is_fatal -+ self.sourceType = sourceType -+ self.exceptionCode = exceptionCode -+ self.description = description -+ -+ # print "leaving __init__" -+ # print self.fatal -+ # print self.sourceType -+ # print self.exceptionCode -+ # print self.description -+ -+ def __str__(self): -+ if self.fatal: -+ fatalStr = "Fatal" -+ else: -+ fatalStr = "Non-fatal" -+ result = '%s SPIException: type:%s source:%s "%s"'%(fatalStr, self.sourceType, self.exceptionCode, self.description) -+ return result -+ -+cdef make_exception(cspi.SPIException *err, cspi.SPIBoolean is_fatal): -+ # Don't attempt to use SPIAccessibleException_getSource; this is error -+ # handling code, we don't want to introduce further complications -+ return SpiException(is_fatal, -+ cspi.SPIException_getSourceType (err), -+ cspi.SPIException_getExceptionCode (err), -+ cspi.SPIException_getDescription (err)) -+ -+ -+def event_main(): -+ cspi.SPI_event_main() -+ -+def event_quit(): -+ cspi.SPI_event_quit() -+ -+cdef cspi.SPIBoolean exception_handler (cspi.SPIException *err, cspi.SPIBoolean is_fatal) except *: -+ # print "got exception!!!" -+ e = make_exception(err, is_fatal) -+ raise e -+ -+# at-spi-<version>/cpsi.h contains: -+# typedef SPIBoolean (*SPIExceptionHandler) (SPIException *err, SPIBoolean is_fatal); -+# and -+# SPIBoolean SPI_exceptionHandlerPush (SPIExceptionHandler *handler); -+# There's thus an extra unnecessary level of indirection. -+# We have to jump through the following hoops to get pyrex to deal with this: -+cdef cspi.SPIExceptionHandler exception_handler_as_type -+cdef cspi.SPIExceptionHandler* exception_handler_ptr -+exception_handler_as_type = exception_handler -+exception_handler_ptr = &exception_handler_as_type -+ -+global_exception = None -+ -+cdef class Registry: -+ def __init__ (self): -+ cdef Xlib.Display *display -+ display = Xlib.XOpenDisplay(NULL) -+ if display == NULL: -+ raise X11Exception -+ else: -+ Xlib.XCloseDisplay(display) -+ -+ result = cspi.SPI_init () -+ #if result!=0: -+ # raise AtspiException("SPI_init: exit code %s" % str(result)) -+ -+ result = cspi.SPI_exceptionHandlerPush (exception_handler_ptr) -+ if not result: -+ raise AtspiException("Unable to install SPI exception handler") -+ -+ def __dealloc (self): -+ result = cspi.SPI_exit () -+ if result!=0: -+ raise AtspiException("SPI_init: exit code %s" % str(result)) -+ -+ def getDesktopCount (self): -+ return cspi.SPI_getDesktopCount() -+ -+ def getDesktop (self, index = 0): -+ cdef Desktop desktop -+ desktop = Desktop () -+ if not desktop.__setItem (cspi.SPI_getDesktop (index)): -+ return False -+ return desktop -+ -+ def getDesktopList (self): -+ # Using the bonobo.activation bindings, getDesktopList() returns a -+ # Python list of Desktop objects. The C bindings seem to do it differently, -+ # and Pyrex doesn't like that method. So we're re-implementing the function -+ # using getDesktopCount() and getDesktop() to work around that. -+ # Yay for Zack! -+ # -+ # -Zack -+ cdef Desktop desktop -+ desktops = [] -+ desktop = Desktop () -+ for i in xrange (cspi.SPI_getDesktopCount ()): -+ desktop.__setItem (cspi.SPI_getDesktop (i)) -+ desktops = desktops + [desktop] -+ return desktops -+ -+registry = Registry() -+ -+cdef class Base: -+ """ -+ Wrapper around a cspi.Accessible -+ """ -+ -+ cdef cspi.Accessible *__item -+ -+ def __new__ (self): -+ self.__item = NULL -+ -+ def __dealloc__ (self): -+ if self.__item != NULL: -+ cspi.Accessible_unref (self.__item) -+ -+ cdef bool __setItem (self, cspi.Accessible *obj): -+ if self.__item != NULL: -+ cspi.Accessible_unref (self.__item) -+ if obj != NULL: -+ self.__item = obj -+ cspi.Accessible_ref (self.__item) -+ return True -+ else: -+ return False -+ -+ def __checkSelf (self): -+ assert self.__item != NULL -+ -+# WHY OH WHY won't this work? :( -+# I need to be able to find out of two Accessible classes contain -+# the same cspi.Accessible objects. -+# -+# def isSameAs (self, base): -+# cdef bool foo -+# foo = self.__item == base.__item -+# return foo -+ -+cdef class EventBase: -+ """ -+ Wrapper around a cspi.AccessibleEvent -+ """ -+ cdef cspi.AccessibleEvent *__item -+ -+ def __new__ (self): -+ self.__item = NULL -+ -+ def __dealloc__ (self): -+ if self.__item != NULL: -+ cspi.AccessibleEvent_unref (self.__item) -+ -+ cdef bool __setItem (self, cspi.AccessibleEvent *obj): -+ if self.__item != NULL: -+ cspi.AccessibleEvent_unref (self.__item) -+ if obj != NULL: -+ self.__item = obj -+ cspi.AccessibleEvent_ref (self.__item) -+ return True -+ else: -+ return False -+ -+ def __checkSelf (self): -+ if self.__item == NULL: -+ raise AttributeError, "__item must not be NULL" -+ -+ def __getattr__ (self, attrName): -+ cdef cspi.Accessible* acc -+ cdef Accessible result -+ if attrName == "source": -+ acc = self.__item.source -+ if acc!=NULL: -+ result = Accessible () -+ result.__setItem (acc) -+ return result -+ elif attrName == "detail1": -+ detail1 = self.__item.detail1 -+ return detail1 -+ elif attrName == "detail2": -+ detail1 = self.__item.detail2 -+ return detail1 -+ elif attrName == "type": -+ return self.__item.type -+ -+cdef class StateSet: -+ """ -+ Wrapper around a cspi.AccessibleStateSet -+ """ -+ cdef cspi.AccessibleStateSet *__item -+ -+ def __new__ (self): -+ self.__item = NULL -+ -+ def __dealloc__ (self): -+ if self.__item != NULL: -+ cspi.AccessibleStateSet_unref (self.__item) -+ -+ def __checkSelf (self): -+ if self.__item == NULL: -+ raise AttributeError, "__item must not be NULL" -+ -+ cdef bool __setItem (self, cspi.AccessibleStateSet *obj): -+ if self.__item != NULL: -+ cspi.AccessibleStateSet_unref (self.__item) -+ if obj != NULL: -+ self.__item = obj -+ cspi.AccessibleStateSet_ref (self.__item) -+ return True -+ else: -+ return False -+ -+ cdef bool __contains (self, cspi.AccessibleState s): -+ self.__checkSelf () -+ return cspi.AccessibleStateSet_contains (self.__item, s) -+ -+ def contains (self, state): -+ self.__checkSelf () -+ return self.__contains(state) -+ -+ cdef void __add (self, cspi.AccessibleState s): -+ self.__checkSelf () -+ cspi.AccessibleStateSet_add(self.__item, s) -+ -+ def add (self, state): -+ self.__checkSelf () -+ self.__add (state) -+ -+ cdef void __remove (self, cspi.AccessibleState s): -+ self.__checkSelf () -+ cspi.AccessibleStateSet_remove (self.__item, s) -+ -+ def remove (self, state): -+ self.__checkSelf () -+ self.__remove (state) -+ -+ def __str__ (self): -+ self.__checkSelf () -+ return str(self.states) -+ -+ def __getattr__(self, name): -+ if name == "states": -+ result = [] -+ for state in range(SPI_STATE_INVALID, SPI_STATE_INDETERMINATE): -+ if self.contains(state): -+ result.append(state) -+ return result -+ else: -+ raise AttributeError, name -+ -+cdef class Relation: -+ """ -+ Wrapper around a cspi.AccessibleRelation -+ """ -+ cdef cspi.AccessibleRelation *__item -+ -+ def __new__ (self): -+ self.__item = NULL -+ -+ def __dealloc__ (self): -+ if self.__item != NULL: -+ cspi.AccessibleRelation_unref (self.__item) -+ -+ def __checkSelf (self): -+ if self.__item == NULL: -+ raise AttributeError, "__item must not be NULL" -+ -+ def __str__ (self): -+ self.__checkSelf () -+ return "relation %s -> %s"%(self.getRelationType (), self.getTargets()) -+ -+ def __repr__ (self): -+ self.__checkSelf () -+ return "relation %s -> %s"%(self.getRelationType (), self.getTargets()) -+ -+ cdef bool __setItem (self, cspi.AccessibleRelation *obj): -+ if self.__item != NULL: -+ cspi.AccessibleRelation_unref (self.__item) -+ if obj != NULL: -+ self.__item = obj -+ cspi.AccessibleRelation_ref (self.__item) -+ return True -+ else: -+ return False -+ -+ def getNTargets (self): -+ """ -+ Wrapper around cspi.AccessibleRelation_getNTargets -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleRelation_getNTargets (self.__item) -+ -+ def getTarget (self, i): -+ """ -+ Wrapper around cspi.AccessibleRelation_getTarget -+ """ -+ self.__checkSelf () -+ cdef Accessible target -+ target = Accessible () -+ target.__setItem (cspi.AccessibleRelation_getTarget (self.__item, i)) -+ target.__checkSelf () -+ return target -+ -+ def getTargets (self): -+ """ -+ Gets the targets of this AccessibleRelation as a list of atspi.Accessible -+ """ -+ self.__checkSelf () -+ result = [] -+ count = self.getNTargets() -+ for i in range(count): -+ result.append(self.getTarget(i)) -+ return result -+ -+ def getRelationType (self): -+ """ -+ Wrapper around cspi.AccessibleRelation_getRelationType -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleRelation_getRelationType (self.__item) -+ -+cdef class Accessible (Base): -+ """ -+ Wrapper around cspi.Accessible -+ """ -+ def __getattr__ (self, name): -+ if name == "name": -+ return self.getName () -+ elif name == "role": -+ return self.getRole () -+ elif name == "roleName": -+ return self.getRoleName () -+ elif name == "description": -+ return self.getDescription () -+ elif name == "parent": -+ return self.getParent () -+ elif name == "childCount": -+ return self.getChildCount () -+ elif name == "indexInParent": -+ return self.getIndexInParent () -+ elif name == "stateSet": -+ return self.getStateSet () -+ else: -+ raise AttributeError, name -+ -+ def getName (self): -+ """ -+ Wrapper around cspi.Accessible_getName -+ """ -+ self.__checkSelf() -+ return string(cspi.Accessible_getName(self.__item)) -+ -+ def getDescription (self): -+ """ -+ Wrapper around cspi.Accessible_getDescription -+ """ -+ self.__checkSelf() -+ return string(cspi.Accessible_getDescription(self.__item)) -+ -+ def getParent (self): -+ """ -+ Wrapper around cspi.Accessible_getParent, returning an -+ atspi.Accessible or None -+ """ -+ self.__checkSelf() -+ cdef Accessible parent -+ cdef cspi.Accessible* spiParent -+ -+ spiParent = cspi.Accessible_getParent (self.__item) -+ if spiParent!=NULL: -+ parent = Accessible () -+ parent.__setItem (spiParent) -+ parent.__checkSelf () -+ return parent -+ else: -+ return None -+ -+ def getChildAtIndex (self, index): -+ """ -+ Wrapper around cspi.Accessible_getChildAtIndex, returning an -+ atspi.Accessible, atspi.Application, or None -+ """ -+ self.__checkSelf() -+ cdef int i -+ i = index -+ -+ # This hairiness is due to the fact that Pyrex doesn't allow cdefs -+ # inside if blocks. -+ -+ cdef cspi.Accessible* spiChild -+ spiChild = cspi.Accessible_getChildAtIndex (self.__item, i) -+ # Workaround for GNOME bug #321273 -+ # http://bugzilla.gnome.org/show_bug.cgi?id=321273 -+ if spiChild == NULL: return None -+ -+ cdef object child -+ cdef Application app -+ cdef Accessible acc -+ cdef Text text -+ -+ if cspi.Accessible_isApplication (spiChild): -+ app = Application () -+ app.__setItem (spiChild) -+ child = app -+ else: -+ acc = Accessible () -+ acc.__setItem (spiChild) -+ child = acc -+ -+ return child -+ -+ def getIndexInParent (self): -+ """ -+ Wrapper around cspi.Accessible_getIndexInParent -+ """ -+ self.__checkSelf() -+ return cspi.Accessible_getIndexInParent (self.__item) -+ -+ def getRole (self): -+ """ -+ Wrapper around cspi.Accessible_getRole -+ """ -+ self.__checkSelf() -+ return cspi.Accessible_getRole (self.__item) -+ -+ def getRoleName (self): -+ """ -+ Wrapper around cspi.Accessible_getRoleName -+ """ -+ self.__checkSelf() -+ return string(cspi.Accessible_getRoleName (self.__item)) -+ -+ def getChildCount (self): -+ """ -+ Wrapper around cspi.Accessible_getChildCount -+ """ -+ self.__checkSelf() -+ return cspi.Accessible_getChildCount (self.__item) -+ -+ def getStateSet (self): -+ """ -+ Wrapper around cspi.Accessible_getStateSet, returning an -+ atspi.StateSet -+ """ -+ self.__checkSelf() -+ cdef StateSet set -+ set = StateSet() -+ set.__setItem (cspi.Accessible_getStateSet (self.__item)) -+ return set -+ -+ def getInterface (self, interface): -+ """ -+ This is NOT part of cspi, it is just for compatibility with -+ the bonobo bindings and will probably go away soon. -+ """ -+ self.__checkSelf() -+ return getattr(self, "get%s" % interface) () -+ -+ def getAction (self): -+ """ -+ Wrapper around cspi.Accessible_getAction, returning -+ an atspi.Action or None -+ """ -+ self.__checkSelf() -+ cdef Action action -+ action = Action () -+ action.__setItem (cspi.Accessible_getAction (self.__item)) -+ if action.__item != NULL: -+ return action -+ -+ def getText (self): -+ """ -+ Wrapper around cspi.Accessible_getText, returning an atspi.Text -+ or None -+ """ -+ self.__checkSelf () -+ cdef Text text -+ text = Text () -+ text.__setItem (cspi.Accessible_getText (self.__item)) -+ if text.__item != NULL: -+ return text -+ -+ def getEditableText (self): -+ """ -+ Wrapper around cspi.Accessible_getText, returning an -+ atspi.EditableText or None -+ """ -+ self.__checkSelf () -+ cdef EditableText etext -+ etext = EditableText () -+ etext.__setItem (cspi.Accessible_getEditableText (self.__item)) -+ if etext.__item != NULL: -+ return etext -+ -+ def getHypertext (self): -+ """ -+ Wrapper around cspi.Accessible_getHypertext, returning an -+ atspi.Hypertext or None -+ """ -+ self.__checkSelf () -+ cdef Hypertext hypertext -+ hypertext = Hypertext () -+ hypertext.__setItem (cspi.Accessible_getHypertext (self.__item)) -+ if hypertext.__item != NULL: -+ return hypertext -+ -+ def getImage (self): -+ """ -+ Wrapper around cspi.Accessible_getImage, returning an -+ atspi.Image or None -+ """ -+ self.__checkSelf () -+ cdef Image image -+ image = Image () -+ image.__setItem (cspi.Accessible_getImage (self.__item)) -+ if image.__item != NULL: -+ return image -+ -+ def getValue (self): -+ """ -+ Wrapper around cspi.Accessible_getValue, returning an -+ atspi.Value or None -+ """ -+ self.__checkSelf () -+ cdef Value value -+ value = Value () -+ value.__setItem (cspi.Accessible_getValue (self.__item)) -+ if value.__item != NULL: -+ return value -+ -+ def getSelection (self): -+ """ -+ Wrapper around cspi.Accessible_getSelection, returning an -+ atspi.Selection or None -+ """ -+ self.__checkSelf () -+ cdef Selection selection -+ selection = Selection () -+ selection.__setItem (cspi.Accessible_getSelection (self.__item)) -+ if selection.__item != NULL: -+ return selection -+ -+ def getComponent (self): -+ """ -+ Wrapper around cspi.Accessible_getComponent, returning an -+ atspi.Component or None -+ """ -+ self.__checkSelf () -+ cdef Component component -+ component = Component () -+ component.__setItem (cspi.Accessible_getComponent (self.__item)) -+ if component.__item != NULL: -+ return component -+ -+ def getRelationSet (self): -+ """ -+ Wraps Accessible_getRelationSet, returning a list -+ of atspi.Relation -+ """ -+ # looking at at-poke, result from C API appears to be a NULL-terminated list of pointers, and that we should free the buffer -+ self.__checkSelf () -+ cdef Relation relation -+ -+ relations = [] -+ cdef cspi.AccessibleRelation **relationSet -+ relationSet = cspi.Accessible_getRelationSet (self.__item) -+ -+ i=0 -+ while relationSet[i]: -+ relation = Relation () -+ relation.__setItem (relationSet[i]) -+ relations.append(relation) -+ i=i+1 -+ cspi.free (relationSet) -+ -+ return relations -+ -+ -+cdef class Desktop (Accessible): -+ pass -+ -+ -+cdef class Application (Accessible): -+ """ -+ Wrapper around the low-level cspi.AccessibleApplication_ functions, -+ giving an OO-style API. -+ """ -+ def getToolkit (self): -+ """ -+ Wraps AccessibleApplication_getToolkitName, returning a string -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleApplication_getToolkitName (self.__item) -+ -+ def getVersion (self): -+ """ -+ Wraps AccessibleApplication_getVersion, returning a string -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleApplication_getVersion(self.__item) -+ -+ def getID (self): -+ """ -+ Wraps AccessibleApplication_getID, returning a string -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleApplication_getID (self.__item) -+ -+ def pause (self): -+ """ -+ Wraps AccessibleApplication_pause -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleApplication_pause (self.__item) -+ -+ def resume (self): -+ """ -+ Wraps AccessibleApplication_resume -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleApplication_resume (self.__item) -+ -+cdef class Component (Accessible): -+ """ -+ Wrapper around the low-level cspi.AccessibleComponent_ functions, -+ giving an OO-style API. -+ """ -+ def getExtents (self, type=0): -+ """ -+ Wraps cspi.AccessibleComponent_getExtents, returning an -+ (x,y,w,h) tuple. -+ """ -+ self.__checkSelf () -+ cdef long x, y, w, h -+ cspi.AccessibleComponent_getExtents (self.__item, &x, &y, &w, &h, type) -+ return (x, y, w, h) -+ -+ def getPosition (self, type = 0): -+ """ -+ Wraps cspi.AccessibleComponent_getPosition, returning an -+ (x,y) tuple. -+ """ -+ self.__checkSelf () -+ cdef long x, y -+ cspi.AccessibleComponent_getPosition (self.__item, &x, &y, type) -+ return (x, y) -+ -+ def getSize (self): -+ """ -+ Wraps cspi.AccessibleComponent_getSize, returning a -+ (w,h) tuple. -+ """ -+ self.__checkSelf () -+ cdef long w, h -+ cspi.AccessibleComponent_getSize (self.__item, &w, &h) -+ return (w, h) -+ -+ def getLayer (self): -+ """ -+ Wraps cspi.AccessibleComponent_getLayer, returning an -+ AccessibleComponentLayer. -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleComponent_getLayer (self.__item) -+ -+ def grabFocus (self): -+ """ -+ Wraps cspi.AccessibleComponent_grabFocus, raising AtspiException -+ if it fails -+ """ -+ self.__checkSelf () -+ if not cspi.AccessibleComponent_grabFocus (self.__item): -+ raise AtspiException("AccessibleComponent_grabFocus") -+ -+ def getMDIZOrder (self): -+ """ -+ Wraps cspi.AccessibleComponent_getMDIZOrder, returning an integer. -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleComponent_getMDIZOrder(self.__item) -+ -+cdef class Action (Base): -+ """ -+ Wrapper around the low-level cspi.AccessibleAction_ functions, -+ giving an OO-style API. -+ """ -+ def __getattr__ (self, name): -+ if name == "nActions": -+ return self.getNActions () -+ else: -+ raise AttributeError, name -+ -+ def getNActions (self): -+ """ -+ Wraps cspi.AccessibleAction_getNActions -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleAction_getNActions (self.__item) -+ -+ def doAction (self, index): -+ """ -+ Wraps cspi.AccessibleAction_doAction -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleAction_doAction (self.__item, index) -+ -+ def getKeyBinding (self, index): -+ """ -+ Wraps cspi.AccessibleAction_getKeyBinding -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleAction_getKeyBinding (self.__item, index) -+ -+ def getName (self, index): -+ """ -+ Wraps cspi.AccessibleAction_getName -+ """ -+ self.__checkSelf () -+ return string(cspi.AccessibleAction_getName (self.__item, index)) -+ -+ def getDescription (self, index): -+ """ -+ Wraps cspi.AccessibleAction_getDescription -+ """ -+ self.__checkSelf () -+ return string(cspi.AccessibleAction_getDescription (self.__item, index)) -+ -+ -+cdef class Text (Base): -+ """ -+ Wrapper around the low-level cspi.AccessibleText_ functions, -+ giving an OO-style API. -+ """ -+ def addSelection (self, startOffset, endOffset): -+ """ -+ Wraps cspi.AccessibleText_addSelection -+ """ -+ self.__checkSelf () -+ if not cspi.AccessibleText_addSelection (self.__item, startOffset, endOffset): -+ raise AtspiException("AccessibleText_addSelection") -+ -+ -+ #def getAttributes (self, offset, startOffset, endOffset): -+ # self.__checkSelf () -+ # return cspi.AccessibleText_getAttributes (self.__item, offset, startOffset, endOffset) -+ def getCaretOffset (self): -+ """ -+ Wraps cspi.AccessibleText_getCaretOffset -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleText_getCaretOffset (self.__item) -+ -+ def getCharacterCount (self): -+ """ -+ Wraps cspi.AccessibleText_getCharacterCount -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleText_getCharacterCount (self.__item) -+ -+ def getNSelections (self): -+ """ -+ Wraps cspi.AccessibleText_getNSelections -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleText_getNSelections (self.__item) -+ -+ #def getSelection (self, selectionNum, startOffset, endOffset): -+ # self.__checkSelf () -+ # return cspi.AccessibleText_getSelection (self.__item, selectionNum, startOffset, endOffset) -+ -+ def getText (self, startOffset, endOffset): -+ """ -+ Wraps cspi.AccessibleText_getText -+ """ -+ self.__checkSelf () -+ return string(cspi.AccessibleText_getText (self.__item, startOffset, endOffset)) -+ -+ def removeSelection (self, selectionNum): -+ """ -+ Wraps cspi.AccessibleText_removeSelection, raising AtspiException if it fails -+ """ -+ self.__checkSelf () -+ if not cspi.AccessibleText_removeSelection (self.__item, selectionNum): -+ raise AtspiException("AccessibleText_removeSelection") -+ -+ def setSelection (self, selectionNum, startOffset, endOffset): -+ """ -+ Wraps cspi.AccessibleText_setSelection, raising AtspiException if it fails -+ """ -+ self.__checkSelf () -+ if not cspi.AccessibleText_setSelection (self.__item, selectionNum, startOffset, endOffset): -+ raise AtspiException("AccessibleText_setSelection") -+ -+ def setCaretOffset (self, position): -+ """ -+ Wraps cspi.AccessibleText_setCaretOffset, raising AtspiException if it fails -+ """ -+ self.__checkSelf () -+ if not cspi.AccessibleText_setCaretOffset (self.__item, position): -+ raise AtspiException("AccessibleText_setCaretOffset") -+ -+cdef class EditableText (Text): -+ """ -+ Wrapper around the low-level cspi.AccessibleEditableText_ functions, -+ giving an OO-style API. -+ """ -+ def setTextContents (self, newContents): -+ """ -+ Wraps cspi.AccessibleEditableText_setTextContents, raising AtspiException if it fails -+ """ -+ self.__checkSelf () -+ if not cspi.AccessibleEditableText_setTextContents (self.__item, newContents): -+ raise AtspiException("AccessibleEditableText_setTextContents") -+ -+ def setAttributes (self, attributes, startOffset, endOffset): -+ """ -+ Wraps cspi.AccessibleEditableText_setAttributes, raising AtspiException if it fails -+ """ -+ self.__checkSelf () -+ if not cspi.AccessibleEditableText_setAttributes (self.__item, attributes, startOffset, endOffset): -+ raise AtspiException("AccessibleEditableText_setAttributes") -+ -+ def insertText (self, position, text): -+ """ -+ Wraps cspi.AccessibleEditableText_insertText, raising AtspiException if it fails -+ """ -+ self.__checkSelf () -+ if not cspi.AccessibleEditableText_insertText (self.__item, position, text, cspi.strlen(text)): -+ raise AtspiException("AccessibleEditableText_insertText") -+ -+cdef class Hypertext (Text): -+ """ -+ Wrapper around the low-level cspi.AccessibleHypertext_ functions, -+ giving an OO-style API. -+ """ -+ def getNLinks (self): -+ """ -+ Wraps cspi.AccessibleHypertext_getNLinks, raising AtspiException if it fails -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleHypertext_getNLinks (self.__item) -+ -+ def getLink (self, linkIndex): -+ """ -+ Wraps cspi.AccessibleHypertext_getLink, raising AtspiException if it fails -+ """ -+ self.__checkSelf () -+ cdef Hyperlink hyperlink -+ hyperlink = Hyperlink () -+ hyperlink.__setItem (cspi.AccessibleHypertext_getLink (self.__item, linkIndex)) -+ if hyperlink.__item != NULL: -+ return hyperlink -+ -+ def getLinkIndex (self, characterOffset): -+ """ -+ Wraps cspi.AccessibleHypertext_getLinkIndex, raising AtspiException if it fails -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleHypertext_getLinkIndex (self.__item, characterOffset) -+ -+cdef class Hyperlink (Base): -+ """ -+ Wrapper around the low-level cspi.AccessibleHyperlink_ functions, -+ giving an OO-style API. -+ """ -+ def getNAnchors (self): -+ """ -+ Wraps cspi.AccessibleHyperlink_getNAnchors, raising AtspiException if it fails -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleHyperlink_getNAnchors (self.__item) -+ -+ def getIndexRange (self): -+ """ -+ Wraps cspi.AccessibleHyperlink_getIndexRange, returning [startIndex, endIndex] pair -+ """ -+ self.__checkSelf () -+ cdef long startIndex, endIndex -+ cspi.AccessibleHyperlink_getIndexRange(self.__item, &startIndex, &endIndex) -+ return [startIndex, endIndex] -+ -+ -+ def getObject (self, i): -+ """ -+ Wraps cspi.AccessibleHyperlink_getObject -+ """ -+ self.__checkSelf () -+ cdef Accessible object -+ object = Accessible () -+ object.__setItem (cspi.AccessibleHyperlink_getObject (self.__item, i)) -+ object.__checkSelf () -+ return object -+ -+ def getURI (self, i): -+ """ -+ Wraps cspi.AccessibleHyperlink_getURI, raising AtspiException if it fails -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleHyperlink_getURI (self.__item, i) -+ -+ def isValid (self): -+ """ -+ Wraps cspi.AccessibleHyperlink_isValid, raising AtspiException if it fails -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleHyperlink_isValid (self.__item) -+ -+cdef class Image (Base): -+ """ -+ Wrapper around the low-level cspi.AccessibleImage_ functions, -+ giving an OO-style API. -+ """ -+ def getImageDescription (self): -+ """ -+ Wraps cspi.AccessibleImage_getImageDescription -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleImage_getImageDescription (self.__item) -+ -+ def getImageSize (self): -+ """ -+ Wraps cspi.AccessibleImage_getImageSize, returning a (w,h) pair -+ """ -+ self.__checkSelf () -+ cdef long w, h -+ cspi.AccessibleImage_getImageSize(self.__item, &w, &h); -+ return [w, h] -+ -+ def getImagePosition (self, type=0): -+ """ -+ Wraps cspi.AccessibleImage_getImagePosition, returning a (x,y) -+ pair -+ """ -+ self.__checkSelf () -+ cdef long x, y -+ cspi.AccessibleImage_getImagePosition(self.__item, &x, &y, type) -+ return [x, y] -+ -+ def getImageExtents (self, type=0): -+ """ -+ Wraps cspi.AccessibleImage_getImageExtents, returning a -+ (x,y,w,h) tuple -+ """ -+ self.__checkSelf () -+ cdef long x, y, w, h -+ cspi.AccessibleImage_getImageExtents(self.__item, &x, &y, &w, &h, type) -+ return [x, y, w, h] -+ -+cdef class Value (Base): -+ """ -+ Wrapper around the low-level cspi.AccessibleValue_ functions, -+ giving an OO-style API. -+ """ -+ def getMinimumValue (self): -+ """ -+ Wraps cspi.AccessibleValue_getMinimumValue -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleValue_getMinimumValue(self.__item) -+ -+ def getCurrentValue (self): -+ """ -+ Wraps cspi.AccessibleValue_getMinimumValue -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleValue_getCurrentValue(self.__item) -+ -+ def getMaximumValue (self): -+ """ -+ Wraps cspi.AccessibleValue_getMinimumValue -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleValue_getMaximumValue(self.__item) -+ -+ def setCurrentValue (self, newValue): -+ """ -+ Wraps cspi.AccessibleValue_setCurrentValue -+ """ -+ self.__checkSelf () -+ if not cspi.AccessibleValue_setCurrentValue (self.__item, newValue): -+ raise AtspiException("AccessibleValue_setCurrentValue") -+ -+cdef class Selection (Base): -+ """ -+ Wrapper around the low-level cspi.AccessibleSelection_ functions, -+ giving an OO-style API. -+ """ -+ -+ def getNSelectedChildren (self): -+ """ -+ Wraps cspi.AccessibleSelection_getNSelectedChildren -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleSelection_getNSelectedChildren (self.__item) -+ -+ def getSelectedChild (self, index): -+ """ -+ Wraps cspi.AccessibleSelection_getSelectedChild -+ """ -+ self.__checkSelf () -+ -+ cdef cspi.Accessible* spiChild -+ spiChild = cspi.AccessibleSelection_getSelectedChild (self.__item, index) -+ -+ assert spiChild != NULL -+ -+ cdef object child -+ cdef Application app -+ cdef Accessible acc -+ cdef Text text -+ -+ if cspi.Accessible_isApplication (spiChild): -+ app = Application () -+ app.__setItem (spiChild) -+ child = app -+ else: -+ acc = Accessible () -+ acc.__setItem (spiChild) -+ child = acc -+ -+ return child -+ -+ def selectChild (self, index): -+ """ -+ Wraps cspi.AccessibleSelection_selectChild -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleSelection_selectChild (self.__item, index) -+ -+ def deselectSelectedChild (self, index): -+ """ -+ Wraps cspi.AccessibleSelection_deselectSelectedChild -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleSelection_deselectSelectedChild (self.__item, index) -+ -+ def isChildSelected (self, index): -+ """ -+ Wraps cspi.AccessibleSelection_isChildSelected -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleSelection_isChildSelected (self.__item, index) -+ -+ def selectAll (self): -+ """ -+ Wraps cspi.AccessibleSelection_selectAll -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleSelection_selectAll( self.__item) -+ -+ def clearSelection (self): -+ """ -+ Wraps cspi.AccessibleSelection_clearSelection -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleSelection_clearSelection (self.__item) -+ -+cdef class Table (Base): -+ """ -+ Wrapper around the low-level cspi.AccessibleTable_ functions, -+ giving an OO-style API. -+ """ -+ -+ # def getTableAccessibleAt (self, row, column): -+ # def getTableCaption (self): -+ -+ def getTableColumnAtIndex (self, index): -+ """ -+ Wraps cspi.AccessibleTable_getColumnAtIndex -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleTable_getColumnAtIndex(self.__item, index) -+ -+ def getTableColumnDescription (self, column): -+ """ -+ Wraps cspi.AccessibleTable_getColumnDescription -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleTable_getColumnDescription(self.__item, column) -+ -+ def getTableColumnExtentAt (self, row, column): -+ """ -+ Wraps cspi.AccessibleTable_getColumnExtentAt -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleTable_getColumnExtentAt(self.__item, row, column) -+ -+ # def getTableColumnHeader (self, column): -+ -+ def getTableIndexAt (self, row, column): -+ """ -+ Wraps cspi.AccessibleTable_getIndexAt -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleTable_getIndexAt(self.__item, row, column) -+ -+ def getTableNColumns (self): -+ """ -+ Wraps cspi.AccessibleTable_getNColumns -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleTable_getNColumns(self.__item) -+ -+ def getTableNRows (self): -+ """ -+ Wraps cspi.AccessibleTable_getNRows -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleTable_getNRows(self.__item) -+ -+ def getTableNSelectedColumns (self): -+ """ -+ Wraps cspi.AccessibleTable_getNSelectedColumns -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleTable_getNSelectedColumns(self.__item) -+ -+ def getTableNSelectedRows (self): -+ """ -+x Wraps cspi.AccessibleTable_getNSelectedRows -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleTable_getNSelectedRows(self.__item) -+ -+ def getTableRowAtIndex (self, index): -+ """ -+ Wraps cspi.AccessibleTable_getRowAtIndex -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleTable_getRowAtIndex(self.__item, index) -+ -+ def getTableRowDescription (self, row): -+ """ -+ Wraps cspi.AccessibleTable_getRowDescription -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleTable_getRowDescription(self.__item, row) -+ -+ def getTableRowExtentAt (self, row, column): -+ """ -+ Wraps cspi.AccessibleTable_getRowExtentAt -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleTable_getRowExtentAt(self.__item, row, column) -+ -+ # def getTableRowHeader (self, row): -+ # def getTableSelectedRows (self, **selectedRows): - Not sure if the variable which is a pointer to a pointer is acceptable -+ # def getTableSelectedColumns (self, **selectedColumns): - Same issue as above -+ # def getTableSummary (self): -+ -+ def isTableColumnSelected (self, column): -+ """ -+ Wraps cspi.AccessibleTable_isColumnSelected -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleTable_isColumnSelected(self.__item, column) -+ -+ def isTableRowSelected (self, row): -+ """ -+ Wraps cspi.AccessibleTable_isRowSelected -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleTable_isRowSelected(self.__item, row) -+ -+ def isTableSelected (self, row, column): -+ """ -+ Wraps cspi.AccessibleTable_isSelected -+ """ -+ self.__checkSelf () -+ return cspi.AccessibleTable_isSelected(self.__item, row, column) -+ -+ -+cdef class Event (EventBase): -+ #def AccessibleEventListener* SPI_createAccessibleEventListener (AccessibleEventListenerCB callback, void *user_data) -+ #void AccessibleEventListener_unref (AccessibleEventListener *listener) -+ #SPIBoolean AccessibleEventListener_addCallback (AccessibleEventListener *listener, AccessibleEventListenerCB callback, void *user_data) -+ #SPIBoolean AccessibleEventListener_removeCallback (AccessibleEventListener *listener, AccessibleEventListenerCB callback) -+ -+ #Accessible* AccessibleActiveDescendantChangedEvent_getActiveDescendant (AccessibleEvent *event) -+ #Accessible* AccessibleChildChangedEvent_getChildAccessible (AccessibleEvent *event) -+ -+ def getDescriptionChangedEventDescriptionString (self): -+ self.__checkSelf() -+ return string(cspi.AccessibleDescriptionChangedEvent_getDescriptionString(self.__item)) -+ -+ def getNameChangedEventNameString (self): -+ self.__checkSelf() -+ return string(cspi.AccessibleNameChangedEvent_getNameString(self.__item)) -+ -+ # Accessible* AccessibleParentChangedEvent_getParentAccessible (AccessibleEvent *event) -+ -+ def getTableCaptionChangedEventCaptionString(self): -+ self.__checkSelf() -+ return string(cspi.AccessibleTableCaptionChangedEvent_getCaptionString(self.__item)) -+ -+ def getTableColumnDescriptionChangedEventDescriptionString(self): -+ self.__checkSelf () -+ return string(cspi.AccessibleTableColumnDescriptionChangedEvent_getDescriptionString(self.__item)) -+ -+ # Accessible* AccessibleTableHeaderChangedEvent_getHeaderAccessible (AccessibleEvent *event) -+ -+ def getTableRowDescriptionChangedEventDescriptionString(self): -+ self.__checkSelf () -+ return string(cspi.AccessibleTableRowDescriptionChangedEvent_getDescriptionString(self.__item)) -+ -+ #Accessible* AccessibleTableSummaryChangedEvent_getSummaryAccessible (AccessibleEvent *event) -+ -+ def getTextChangedEventChangeString (self): -+ self.__checkSelf () -+ return string(cspi.AccessibleTextChangedEvent_getChangeString(self.__item)) -+ -+ def getTextSelectionChangedEventSelectionString (self): -+ self.__checkSelf () -+ return string(cspi.AccessibleTextSelectionChangedEvent_getSelectionString(self.__item)) -+ -+ def getWindowEventTitleString (self): -+ self.__checkSelf () -+ return string(cspi.AccessibleWindowEvent_getTitleString(self.__item)) -+ -+class EventGenerator: -+ """ -+ Wrapper layer around SPI_generateKeyboardEvent and -+ SPI_generateMouseEvent, used for generating input events. -+ -+ Use AccessibleAction in preference to this. -+ """ -+ def injectKeyboardString (self, string): -+ """ -+ Inject a string as if it had been typed using an input method. -+ """ -+ # Seems to only work if you do it one character at a time... -+ for char in string: -+ self.__generateKeystringEvent (str(char), cspi.SPI_KEY_STRING) -+ -+ def __keyStringToKeyCode(self, keyString): -+ cdef Xlib.Display *display -+ display = Xlib.XOpenDisplay(NULL) -+ -+ cdef Xlib.KeySym sym -+ sym = Xlib.XStringToKeysym(keyString) -+ cdef Xlib.KeyCode code -+ code = Xlib.XKeysymToKeycode(display, sym) -+ -+ #print str(keyString), str(int(sym)), code -+ -+ Xlib.XCloseDisplay(display) -+ return int(code) -+ -+ def generateKeyCombo (self, keyStrings): -+ modifiers = keyStrings[:-1] -+ finalKey = keyStrings[-1] -+ -+ for modifier in modifiers: -+ code = self.__keyStringToKeyCode(modifier) -+ self.generateKeyboardEvent(code, '', cspi.SPI_KEY_PRESS) -+ -+ code = self.__keyStringToKeyCode(finalKey) -+ self.generateKeyboardEvent(code, '', cspi.SPI_KEY_PRESSRELEASE) -+ -+ for modifier in modifiers: -+ code = self.__keyStringToKeyCode(modifier) -+ self.generateKeyboardEvent(code, '', cspi.SPI_KEY_RELEASE) -+ -+ -+ def __generateKeyvalEvent (self, keyval, synthType): -+ self.generateKeyboardEvent (keyval, None, synthType) -+ -+ def __generateKeystringEvent (self, keystring, synthType): -+ self.generateKeyboardEvent (0, keystring, synthType) -+ -+ def generateKeyboardEvent (self, keyval, keystring, synthType): -+ if not cspi.SPI_generateKeyboardEvent (keyval, keystring, synthType): -+ raise AtspiException("SPI_generateKeyboardEvent") -+ -+ def click (self, x, y, button): -+ """ -+ Synthesize a mouse button click at (x,y) -+ """ -+ self.__generateButtonEvent (x, y, button, "c") -+ -+ def doubleClick (self, x, y, button): -+ """ -+ Synthesize a mouse button double-click at (x,y) -+ """ -+ self.__generateButtonEvent (x, y, button, "d") -+ -+ def press (self, x, y, button): -+ """ -+ Synthesize a mouse button press at (x,y) -+ """ -+ self.__generateButtonEvent (x, y, button, "p") -+ -+ def release (self, x, y, button): -+ """ -+ Synthesize a mouse button release at (x,y) -+ """ -+ self.__generateButtonEvent (x, y, button, "r") -+ -+ def absoluteMotion (self, x, y): -+ """ -+ Synthesize mouse absolute motion to (x,y) -+ """ -+ self.__generateEvent (x, y, "abs") -+ -+ def relativeMotion (self, x, y): -+ """ -+ Synthesize mouse relative motion of (x,y) -+ """ -+ self.__generateEvent (x, y, "rel") -+ -+ def drag (self, fromXY, toXY, button): -+ """ -+ Synthesize a drag (press, move and release) from (x,y) to (x,y). -+ -+ These are absolute screen coordinates -+ """ -+ (x,y) = fromXY -+ self.press (x, y, button) -+ -+ (x,y) = toXY -+ self.absoluteMotion(x,y) -+ -+ self.release (x, y, button) -+ -+ def __generateEvent (self, x, y, name): -+ """ -+ Thin wrapper around SPI_generateMouseEvent. -+ -+ Event names: b1p = button 1 press; b2r = button 2 release; -+ b3c = button 3 click; b2d = button 2 double-click; -+ abs = absolute motion; rel = relative motion. -+ """ -+ if not cspi.SPI_generateMouseEvent (x, y, name): -+ raise AtspiException("Error generating mouse event") -+ -+ def __generateButtonEvent (self, x, y, button, suffix): -+ self.__generateEvent (x, y, self.__generateButtonName(button)+suffix) -+ -+ def __generateButtonName(self, button): -+ if button==1: -+ return "b1" -+ elif button==2: -+ return "b2" -+ elif button==3: -+ return "b3" -+ else: raise ValueError, "Unknown button" -+ -+# We use this C function to marshal a call to a python function. The Python callback -+# function is installed as the userdata of this C callback function. See the -+# "cheesefinder" demo in the Pyrex sources. -+# We ignore the "const"ness of the AccessibleEvent -+cdef void marshalAccessibleEventCallback (cspi.AccessibleEvent *event, void *python_fn) except *: -+ e = Event() -+ EventBase.__setItem(e, event) -+ (<object>python_fn) (e) -+ -+cdef class EventListener: -+ """ -+ Wrapper around the low-level cspi.AccessibleEventListener_ functions, -+ giving an OO-style API. -+ """ -+ cdef cspi.AccessibleEventListener *__item -+ cdef public object eventTypes -+ -+ def __init__ (self, callback, eventTypes): -+ """ -+ Registers a python callback function to be called. -+ The callback is expected to have one input, of type atspi.Event, and no return value. -+ See documentation of SPI_registerGlobalEventListener for the event names -+ """ -+ self.eventTypes = eventTypes -+ self.__item = cspi.SPI_createAccessibleEventListener (marshalAccessibleEventCallback, <void*>callback) -+ for eventType in self.eventTypes: -+ #char *e -+ e = eventType -+ if not cspi.SPI_registerGlobalEventListener (self.__item, e): -+ raise AtspiException("Unable to register event listener") -+ -+ def deregister(self): -+ for eventType in self.eventTypes: -+ cspi.SPI_deregisterGlobalEventListener(self.__item, eventType) -+ -+ def __dealloc__ (self): -+ if self.__item != NULL: -+ self.deregister() -+ cspi.AccessibleEventListener_unref (self.__item) -+ -+ def __checkSelf (self): -+ if self.__item == NULL: -+ raise AttributeError, "__item must not be NULL" -+ -+cdef class DeviceEvent: -+ """ -+ Wrapper around a cspi.AccessibleDeviceEvent -+ """ -+ cdef cspi.AccessibleDeviceEvent *__item -+ cdef public object keyID -+ cdef public object keyCode -+ cdef public object keyString -+ cdef public object timeStamp -+ cdef public object type -+ cdef public object modifiers -+ cdef public object isText -+ -+ def __new__ (self): -+ self.__item = NULL -+ -+ cdef bool __setItem (self, cspi.AccessibleDeviceEvent *obj): -+ if obj != NULL: -+ self.__item = obj -+ self.keyID = self.__item.keyID -+ self.keyCode = self.__item.keycode -+ self.keyString = self.__item.keystring -+ self.timeStamp = self.__item.timestamp -+ self.type = self.__item.type -+ self.modifiers = self.__item.modifiers -+ if self.__item.is_text: self.isText = True -+ else: self.isText = False -+ return True -+ else: -+ return False -+ -+ def __checkSelf (self): -+ if self.__item == NULL: -+ raise AttributeError, "__item must not be NULL" -+ -+# def __dealloc__ (self): -+# if self.__item != NULL: -+# cspi.AccessibleDeviceEvent_unref (self.__item) -+ -+ -+cdef cspi.SPIBoolean marshalAccessibleDeviceEventCallback (cspi.AccessibleDeviceEvent *event, void *python_fn) except 1: -+ k = DeviceEvent() -+ #k.__setItem(event) -+ DeviceEvent.__setItem(k, event) -+ k.__checkSelf() -+ (<object>python_fn) (k) -+ return False -+ -+cdef class DeviceListener: -+ """ -+ Wrapper around the low-level cspi.AccessibleDeviceListener_ functions, -+ giving an OO-style API. -+ """ -+ cdef cspi.AccessibleDeviceListener *__item -+ cdef public object modMasks -+ -+ def __init__ (self, callback, eventMask = cspi.SPI_KEY_PRESSED | cspi.SPI_KEY_RELEASED): -+ """ -+ Registers a python callback function to be called. -+ -+ eventMask may be one of the following: -+ key pressed: 1 -+ key released: 2 -+ key pressed or released (default): 3 -+ """ -+ self.__item = cspi.SPI_createAccessibleDeviceListener (marshalAccessibleDeviceEventCallback, <void*>callback) -+ cdef cspi.AccessibleKeySet *keySet -+ keySet = SPI_KEYSET_ALL_KEYS -+ self.modMasks = [] -+ cdef short int modMask -+ syncType = SPI_KEYLISTENER_SYNCHRONOUS | SPI_KEYLISTENER_CANCONSUME -+ #syncType = SPI_KEYLISTENER_NOSYNC -+ for modMask from 0 <= modMask < (1 << 8): -+ self.modMasks.append(modMask) -+ desc = "keySet "+str(<int> keySet)+" modMask "+str(modMask)+" eventMask "+str(eventMask)+" syncType "+str(syncType) -+ desc = str(desc) -+ if not cspi.SPI_registerAccessibleKeystrokeListener (self.__item, keySet, modMask, eventMask, syncType): -+ raise AtspiException("Unable to register keystroke listener", desc) -+ -+ def deregister(self): -+ if self.__item != NULL: -+ for modMask in self.modMasks: -+ cspi.SPI_deregisterAccessibleKeystrokeListener(self.__item, modMask) -+ -+ def __dealloc__ (self): -+ if self.__item != NULL: -+ self.deregister() -+ cspi.AccessibleDeviceListener_unref (self.__item) -+ -+ def __checkSelf (self): -+ if self.__item == NULL: -+ raise AttributeError, "__item must not be NULL" -+ -+ -+# vim: sw=4 ts=4 sts=4 noet ai |