summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Doffman <mdoff@altair-voyager.(none)>2009-10-07 09:40:11 +0100
committerMark Doffman <mdoff@altair-voyager.(none)>2009-10-07 09:40:11 +0100
commit590c185517181d7efc05875084fc8454cc539ee1 (patch)
tree865483949db0005367fed7704c3c8cd21064a926
parent9eb5bf8c3ebea61c1b1907738bc6cc193839326c (diff)
downloadat-spi2-atk-590c185517181d7efc05875084fc8454cc539ee1.tar.gz
2009-07-10 Mark Doffman <mark.doffman@codethink.co.uk>
Remove pyatspi and the pyatspi tests that have been moved out into a separate repository.
-rw-r--r--Makefile.am2
-rw-r--r--configure.ac8
-rw-r--r--pyatspi/Accessibility.py41
-rw-r--r--pyatspi/Makefile.am35
-rw-r--r--pyatspi/__init__.py30
-rw-r--r--pyatspi/accessible.py283
-rw-r--r--pyatspi/accessiblecache.py196
-rw-r--r--pyatspi/action.py111
-rw-r--r--pyatspi/application.py68
-rw-r--r--pyatspi/applicationcache.py248
-rw-r--r--pyatspi/base.py203
-rw-r--r--pyatspi/collection.py110
-rw-r--r--pyatspi/component.py189
-rw-r--r--pyatspi/constants.py144
-rw-r--r--pyatspi/desktop.py364
-rw-r--r--pyatspi/deviceevent.py549
-rw-r--r--pyatspi/document.py74
-rw-r--r--pyatspi/editabletext.py124
-rw-r--r--pyatspi/event.py262
-rw-r--r--pyatspi/factory.py28
-rw-r--r--pyatspi/hyperlink.py109
-rw-r--r--pyatspi/hypertext.py71
-rw-r--r--pyatspi/image.py110
-rw-r--r--pyatspi/interfaces.py40
-rw-r--r--pyatspi/loginhelper.py147
-rw-r--r--pyatspi/registry.py482
-rw-r--r--pyatspi/relation.py137
-rw-r--r--pyatspi/role.py297
-rw-r--r--pyatspi/selection.py136
-rw-r--r--pyatspi/state.py256
-rw-r--r--pyatspi/table.py376
-rw-r--r--pyatspi/text.py592
-rw-r--r--pyatspi/utils.py331
-rw-r--r--pyatspi/value.py74
-rw-r--r--tests/Makefile.am11
-rw-r--r--tests/apps/Makefile.am47
-rw-r--r--tests/apps/accessible-app.c57
-rw-r--r--tests/apps/action-app.c29
-rw-r--r--tests/apps/atk-object-xml-loader.c95
-rw-r--r--tests/apps/atk-object-xml-loader.h29
-rw-r--r--tests/apps/component-app.c55
-rw-r--r--tests/apps/noop-app.c26
-rw-r--r--tests/apps/relation-app.c90
-rw-r--r--tests/apps/test-application.c286
-rw-r--r--tests/cspi/Makefile.am19
-rw-r--r--tests/cspi/accessible-test.c37
-rw-r--r--tests/cspi/classy-test-suite.c211
-rw-r--r--tests/cspi/classy-test-suite.h76
-rw-r--r--tests/cspi/classy-test.c145
-rw-r--r--tests/cspi/classy-test.h99
-rw-r--r--tests/cspi/key-listener-test.c201
-rw-r--r--tests/cspi/keysynth-test.c65
-rw-r--r--tests/cspi/simple-at.c615
-rw-r--r--tests/cspi/simple-test.c46
-rw-r--r--tests/cspi/test-simple.c816
-rw-r--r--tests/data/Makefile.am3
-rw-r--r--tests/data/accessible-test-results.xml136
-rw-r--r--tests/data/accessible-test.xml136
-rw-r--r--tests/dummyatk/Makefile.am38
-rw-r--r--tests/dummyatk/my-atk-action.c222
-rw-r--r--tests/dummyatk/my-atk-action.h58
-rw-r--r--tests/dummyatk/my-atk-component.c403
-rw-r--r--tests/dummyatk/my-atk-component.h41
-rw-r--r--tests/dummyatk/my-atk-hyperlink.c137
-rw-r--r--tests/dummyatk/my-atk-hyperlink.h35
-rw-r--r--tests/dummyatk/my-atk-hypertext.c172
-rw-r--r--tests/dummyatk/my-atk-hypertext.h33
-rw-r--r--tests/dummyatk/my-atk-object.c186
-rw-r--r--tests/dummyatk/my-atk-object.h37
-rw-r--r--tests/dummyatk/my-atk-selection.c332
-rw-r--r--tests/dummyatk/my-atk-selection.h55
-rw-r--r--tests/dummyatk/my-atk-streamable-content.c96
-rw-r--r--tests/dummyatk/my-atk-streamable-content.h35
-rw-r--r--tests/dummyatk/my-atk-table.c177
-rw-r--r--tests/dummyatk/my-atk-table.h86
-rw-r--r--tests/dummyatk/my-atk-text.c1290
-rw-r--r--tests/dummyatk/my-atk-text.h60
-rw-r--r--tests/dummyatk/my-atk-value.c113
-rw-r--r--tests/dummyatk/my-atk-value.h34
-rw-r--r--tests/dummyatk/my-atk.h14
-rw-r--r--tests/dummyatk/resources_storage.c34
-rw-r--r--tests/dummyatk/resources_storage.h16
-rw-r--r--tests/dummyatk/useful_functions.c29
-rw-r--r--tests/dummyatk/useful_functions.h30
-rw-r--r--tests/dummyatk/user_marshal.c41
-rw-r--r--tests/dummyatk/user_marshal.h60
-rw-r--r--tests/pyatspi/Makefile.am20
-rw-r--r--tests/pyatspi/accessibletest.py219
-rw-r--r--tests/pyatspi/actiontest.py73
-rw-r--r--tests/pyatspi/componenttest.py145
-rw-r--r--tests/pyatspi/desktoptest.py184
-rw-r--r--tests/pyatspi/pasytest/Events.py78
-rw-r--r--tests/pyatspi/pasytest/Makefile.am6
-rw-r--r--tests/pyatspi/pasytest/Pasy.py146
-rw-r--r--tests/pyatspi/pasytest/__init__.py16
-rw-r--r--tests/pyatspi/relationtest.py70
-rwxr-xr-xtests/pyatspi/runtests.sh12
-rw-r--r--tests/pyatspi/setvars.sh6
-rw-r--r--tests/pyatspi/statetest.py101
-rwxr-xr-xtests/pyatspi/testrunner94
100 files changed, 1 insertions, 14590 deletions
diff --git a/Makefile.am b/Makefile.am
index 99b87a8..131502a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1 +1 @@
-SUBDIRS=common atk-adaptor cspi pyatspi tests
+SUBDIRS=common atk-adaptor cspi
diff --git a/configure.ac b/configure.ac
index 4656a11..7a193c0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -24,7 +24,6 @@ AC_SUBST(LT_AGE)
AM_INIT_AUTOMAKE([-Wall foreign])
AC_PROG_CC
-AM_PATH_PYTHON(2.4)
AM_DISABLE_STATIC
AM_PROG_LIBTOOL
PKG_PROG_PKG_CONFIG
@@ -96,14 +95,7 @@ AC_CONFIG_FILES([Makefile
tests/Makefile
common/Makefile
atk-adaptor/Makefile
- tests/dummyatk/Makefile
- tests/data/Makefile
- tests/pyatspi/Makefile
- tests/pyatspi/pasytest/Makefile
- tests/apps/Makefile
- tests/cspi/Makefile
cspi/Makefile
- pyatspi/Makefile
])
AC_OUTPUT
diff --git a/pyatspi/Accessibility.py b/pyatspi/Accessibility.py
deleted file mode 100644
index cf4df5b..0000000
--- a/pyatspi/Accessibility.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from constants import *
-
-from registry import*
-from accessible import *
-from action import *
-from application import *
-from collection import *
-from component import *
-from constants import *
-from desktop import *
-from deviceevent import *
-from document import *
-from editabletext import *
-from event import *
-from hyperlink import *
-from hypertext import *
-from image import *
-from interfaces import *
-from loginhelper import *
-from relation import *
-from role import *
-from selection import *
-from state import *
-from table import *
-from text import *
-from utils import *
-from value import *
diff --git a/pyatspi/Makefile.am b/pyatspi/Makefile.am
deleted file mode 100644
index cd4e6f8..0000000
--- a/pyatspi/Makefile.am
+++ /dev/null
@@ -1,35 +0,0 @@
-pyatspidir = $(pythondir)/pyatspi
-pyatspi_PYTHON = \
- Accessibility.py \
- accessible.py \
- accessiblecache.py \
- action.py \
- application.py \
- applicationcache.py \
- base.py \
- collection.py \
- component.py \
- constants.py \
- desktop.py \
- deviceevent.py \
- document.py \
- editabletext.py \
- event.py \
- factory.py \
- hyperlink.py \
- hypertext.py \
- image.py \
- __init__.py \
- interfaces.py \
- loginhelper.py \
- registry.py \
- relation.py \
- role.py \
- selection.py \
- state.py \
- table.py \
- text.py \
- utils.py \
- value.py
-
-CLEANFILES = *.pyc
diff --git a/pyatspi/__init__.py b/pyatspi/__init__.py
deleted file mode 100644
index 3ad8476..0000000
--- a/pyatspi/__init__.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-__version__ = (1, 9, 0)
-
-import registry
-Registry = registry._Registry()
-registry._Registry = Registry
-del registry
-
-import constants
-from Accessibility import *
-
-#This is a re-creation of the namespace pollution implemented
-#by PyORBit.
-import sys
-import Accessibility
-sys.modules['Accessibility'] = Accessibility
-del sys
diff --git a/pyatspi/accessible.py b/pyatspi/accessible.py
deleted file mode 100644
index 8bbe9b2..0000000
--- a/pyatspi/accessible.py
+++ /dev/null
@@ -1,283 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from interfaces import ATSPI_ACCESSIBLE, ATSPI_APPLICATION
-from base import BaseProxy, Enum
-from factory import accessible_factory
-from state import StateSet, _marshal_state_set
-from relation import _marshal_relation_set
-from role import Role, ROLE_NAMES
-
-__all__ = [
- "LOCALE_TYPE",
- "LOCALE_TYPE_COLLATE",
- "LOCALE_TYPE_CTYPE",
- "LOCALE_TYPE_MESSAGES",
- "LOCALE_TYPE_MONETARY",
- "LOCALE_TYPE_NUMERIC",
- "LOCALE_TYPE_TIME",
- "BoundingBox",
- "Accessible",
- ]
-
-#------------------------------------------------------------------------------
-
-class LOCALE_TYPE(Enum):
- _enum_lookup = {
- 0:'LOCALE_TYPE_MESSAGES',
- 1:'LOCALE_TYPE_COLLATE',
- 2:'LOCALE_TYPE_CTYPE',
- 3:'LOCALE_TYPE_MONETARY',
- 4:'LOCALE_TYPE_NUMERIC',
- 5:'LOCALE_TYPE_TIME',
- }
-
-LOCALE_TYPE_COLLATE = LOCALE_TYPE(1)
-LOCALE_TYPE_CTYPE = LOCALE_TYPE(2)
-LOCALE_TYPE_MESSAGES = LOCALE_TYPE(0)
-LOCALE_TYPE_MONETARY = LOCALE_TYPE(3)
-LOCALE_TYPE_NUMERIC = LOCALE_TYPE(4)
-LOCALE_TYPE_TIME = LOCALE_TYPE(5)
-
-#------------------------------------------------------------------------------
-
-class BoundingBox(list):
- def __new__(cls, x, y, width, height):
- return list.__new__(cls, (x, y, width, height))
- def __init__(self, x, y, width, height):
- list.__init__(self, (x, y, width, height))
-
- def __str__(self):
- return ("(%d, %d, %d, %d)" % (self.x, self.y, self.width, self.height))
-
- def _get_x(self):
- return self[0]
- def _set_x(self, val):
- self[0] = val
- x = property(fget=_get_x, fset=_set_x)
- def _get_y(self):
- return self[1]
- def _set_y(self, val):
- self[1] = val
- y = property(fget=_get_y, fset=_set_y)
- def _get_width(self):
- return self[2]
- def _set_width(self, val):
- self[2] = val
- width = property(fget=_get_width, fset=_set_width)
- def _get_height(self):
- return self[3]
- def _set_height(self, val):
- self[3] = val
- height = property(fget=_get_height, fset=_set_height)
-
-#------------------------------------------------------------------------------
-
-class Accessible(BaseProxy):
- """
- The base interface which is implemented by all accessible objects.
- All objects support interfaces for querying their contained
- 'children' and position in the accessible-object hierarchy,
- whether or not they actually have children.
- """
-
- _relation_set = None
-
- def __nonzero__(self):
- return True
-
- def __len__(self):
- return self.getChildCount()
-
- def __getitem__(self, index):
- return self.getChildAtIndex(index)
-
- def getApplication(self):
- """
- Get the containing Application for this object.
- @return the Application instance to which this object belongs.
- """
- return self._cache.create_application(self._app_name)
-
- def getAttributes(self):
- """
- Get a list of properties applied to this object as a whole, as
- an AttributeSet consisting of name-value pairs. As such these
- attributes may be considered weakly-typed properties or annotations,
- as distinct from the strongly-typed interface instance data declared
- using the IDL "attribute" keyword.
- Not all objects have explicit "name-value pair" AttributeSet
- properties.
- Attribute names and values may have any UTF-8 string value, however
- where possible, in order to facilitate consistent use and exposure
- of "attribute" properties by applications and AT clients, attribute
- names and values should chosen from a publicly-specified namespace
- where appropriate.
- Where possible, the names and values in the name-value pairs
- should be chosen from well-established attribute namespaces using
- standard semantics. For example, attributes of Accessible objects
- corresponding to XHTML content elements should correspond to
- attribute names and values specified in the w3c XHTML specification,
- at http://www.w3.org/TR/xhtml2, where such values are not already
- exposed via a more strongly-typed aspect of the AT-SPI API. Metadata
- names and values should be chosen from the 'Dublin Core' Metadata
- namespace using Dublin Core semantics: http://dublincore.org/dcregistry/
- Similarly, relevant structural metadata should be exposed using
- attribute names and values chosen from the CSS2 and WICD specification:
- http://www.w3.org/TR/1998/REC-CSS2-19980512 WICD (http://www.w3.org/TR/2005/WD-WICD-20051121/).
-
- @return : An AttributeSet encapsulating any "attribute values"
- currently defined for the object. An attribute set is a list of strings
- with each string comprising an name-value pair format 'name:value'.
- """
- func = self.get_dbus_method("getAttributes", dbus_interface=ATSPI_ACCESSIBLE)
- return [key + ':' + value for key, value in func().iteritems()]
-
- def getChildAtIndex(self, index):
- """
- Get the accessible child of this object at index.
- @param : index
- an in parameter indicating which child is requested (zero-indexed).
- @return : the 'nth' Accessible child of this object.
- """
- path = self.cached_data.children[index]
- return self._cache.create_accessible(self._app_name, path, ATSPI_ACCESSIBLE)
-
- def getIndexInParent(self):
- """
- Get the index of this object in its parent's child list.
- @return : a long integer indicating this object's index in the
- parent's list.
- """
- if self.parent == None:
- return -1
- for i in range(0, self.parent.childCount):
- child = self.parent.getChildAtIndex(i)
- if self.isEqual(child):
- return i
- raise AccessibleObjectNoLongerExists("Child not found within parent")
-
- def getLocalizedRoleName(self):
- """
- Get a string indicating the type of UI role played by this object,
- translated to the current locale.
- @return : a UTF-8 string indicating the type of UI role played
- by this object.
- """
- func = self.get_dbus_method("getLocalizedRoleName", dbus_interface=ATSPI_ACCESSIBLE)
- return func()
-
- def getRelationSet(self):
- """
- Get a set defining this object's relationship to other accessible
- objects.
- @return : a RelationSet defining this object's relationships.
- """
- if self._relation_set:
- return self._relation_set
- else:
- func = self.get_dbus_method("getRelationSet", dbus_interface=ATSPI_ACCESSIBLE)
- relation_set = func()
- self._relation_set = _marshal_relation_set(self._cache, self._app_name, relation_set)
- return self._relation_set
-
- def getRole(self):
- """
- Get the Role indicating the type of UI role played by this object.
- @return : a Role indicating the type of UI role played by this
- object.
- """
- return Role(self.cached_data.role)
-
- def getRoleName(self):
- """
- Get a string indicating the type of UI role played by this object.
- @return : a UTF-8 string indicating the type of UI role played
- by this object.
- """
- """
- func = self.get_dbus_method("getRoleName", dbus_interface=ATSPI_ACCESSIBLE)
- return func()
- """
- return ROLE_NAMES[self.cached_data.role]
-
- def getState(self):
- """
- Get the current state of the object as a StateSet.
- @return : a StateSet encapsulating the currently true states
- of the object.
- """
- return _marshal_state_set(self.cached_data.state)
-
- def isEqual(self, accessible):
- """
- Determine whether an Accessible refers to the same object as
- another. This method should be used rather than brute-force comparison
- of object references (i.e. "by-value" comparison), as two object
- references may have different apparent values yet refer to the
- same object.
- @param : obj
- an Accessible object reference to compare to
- @return : a boolean indicating whether the two object references
- point to the same object.
- """
- return (self._app_name == accessible._app_name) and \
- (self._acc_path == accessible._acc_path)
-
-
- def get_childCount(self):
- return len(self.cached_data.children)
- _childCountDoc = \
- """
- childCount: the number of children contained by this object.
- """
- childCount = property(fget=get_childCount, doc=_childCountDoc)
-
- getChildCount = get_childCount
-
- def get_description(self):
- return self.cached_data.description
- _descriptionDoc = \
- """
- a string describing the object in more detail than name.
- """
- description = property(fget=get_description, doc=_descriptionDoc)
-
- def get_name(self):
- return self.cached_data.name
- _nameDoc = \
- """
- a (short) string representing the object's name.
- """
- name = property(fget=get_name, doc=_nameDoc)
-
- def get_parent(self):
- return self._cache.create_accessible(self._app_name,
- self.cached_data.parent,
- ATSPI_ACCESSIBLE)
-
- _parentDoc = \
- """
- an Accessible object which is this object's containing object.
- """
- parent = property(fget=get_parent, doc=_parentDoc)
-
- def refresh(self):
- self._relation_set = None
- self._cache.application_cache[self._app_name]._refresh()
-
-# Register the accessible class with the factory.
-accessible_factory.register_accessible_class(ATSPI_ACCESSIBLE, Accessible)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/accessiblecache.py b/pyatspi/accessiblecache.py
deleted file mode 100644
index b190793..0000000
--- a/pyatspi/accessiblecache.py
+++ /dev/null
@@ -1,196 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-import dbus as _dbus
-
-from event import Event as _Event
-
-#------------------------------------------------------------------------------
-
-class _CacheData(object):
- __slots__ = [
- 'path',
- 'parent',
- 'interfaces',
- 'children',
- 'role',
- 'name',
- 'description',
- 'state',
- ]
-
- def __init__(self, data):
- self._update(data)
-
- def _update(self, data):
- (self.path,
- self.parent,
- self.children,
- self.interfaces,
- self.name,
- self.role,
- self.description,
- self.state) = data
-
-#------------------------------------------------------------------------------
-
-def _list_items_added_removed (l1, l2):
- """
- Returns a tuple (boolean, boolean).
- The first value indicates if, when
- moving from l1 to l2, any items have been added.
- The second value indicates whether any items have
- been removed.
- """
- l1notl2 = [item for item in l1 if item not in l2]
- l2notl1 = [item for item in l2 if item not in l1]
- return ((len(l1notl2) > 0), (len(l2notl1) > 0))
-
-#------------------------------------------------------------------------------
-
-class AccessibleCache(object):
- """
- There is one accessible cache per application.
- For each application the accessible cache stores
- data on every accessible object within the app.
-
- It also acts as the factory for creating client
- side proxies for these accessible objects.
-
- connection - DBus connection.
- busName - Name of DBus connection where cache interface resides.
- """
-
- _PATH = '/org/freedesktop/atspi/tree'
- _INTERFACE = 'org.freedesktop.atspi.Tree'
- _GET_METHOD = 'getTree'
- _UPDATE_SIGNAL = 'updateAccessible'
- _REMOVE_SIGNAL = 'removeAccessible'
-
- def __init__(self, registry, connection, bus_name):
- """
- Creates a cache.
-
- connection - DBus connection.
- busName - Name of DBus connection where cache interface resides.
- """
- self._registry = registry
- self._connection = connection
- self._bus_name = bus_name
-
- obj = connection.get_object(bus_name, self._PATH, introspect=False)
- self._tree_itf = _dbus.Interface(obj, self._INTERFACE)
-
- self._objects = {}
-
- get_method = self._tree_itf.get_dbus_method(self._GET_METHOD)
- self._update_objects(get_method())
-
- self._updateMatch = self._tree_itf.connect_to_signal(self._UPDATE_SIGNAL, self._update_single)
- self._removeMatch = self._tree_itf.connect_to_signal(self._REMOVE_SIGNAL, self._remove_object)
-
- self._root = self._tree_itf.getRoot()
-
- def __getitem__(self, key):
- return self._objects[key]
-
- def __contains__(self, key):
- return key in self._objects
-
- def _dispatch_event(self, olddata, newdata):
- if olddata.name != newdata.name:
- event = _Event(self._registry.cache,
- newdata.path,
- self._bus_name,
- "org.freedesktop.atspi.Event.Object",
- "property-change",
- ("accessible-name", 0, 0, newdata.name))
- self._registry._notifyNameChange(event)
-
- if olddata.description != newdata.description:
- event = _Event(self._registry.cache,
- newdata.path,
- self._bus_name,
- "org.freedesktop.atspi.Event.Object",
- "property-change",
- ("accessible-description", 0, 0, newdata.description))
- self._registry._notifyDescriptionChange(event)
-
- if olddata.parent != newdata.parent:
- event = _Event(self._registry.cache,
- newdata.path,
- self._bus_name,
- "org.freedesktop.atspi.Event.Object",
- "property-change",
- ("accessible-parent", 0, 0, ""))
- self._registry._notifyParentChange(event)
-
- removed, added = _list_items_added_removed (olddata.children, newdata.children)
-
- if added:
- event = _Event(self._registry.cache,
- newdata.path,
- self._bus_name,
- "org.freedesktop.atspi.Event.Object",
- "children-changed",
- ("add", 0, 0, ""))
- self._registry._notifyChildrenChange(event)
-
- if removed:
- event = _Event(self._registry.cache,
- newdata.path,
- self._bus_name,
- "org.freedesktop.atspi.Event.Object",
- "children-changed",
- ("remove", 0, 0, ""))
- self._registry._notifyChildrenChange(event)
-
- # TODO This should be the other way around. Single is more common than many.
- def _update_single(self, object):
- self._update_objects ([object])
-
- def _update_objects(self, objects):
- cache_update_objects = []
- for data in objects:
- #First element is the object path.
- path = data[0]
- if path in self._objects:
- olddata = self._objects[path]
- newdata = _CacheData(data)
- cache_update_objects.append((olddata, newdata))
- self._objects[path] = newdata
- else:
- self._objects[path] = _CacheData(data)
- for old, new in cache_update_objects:
- self._dispatch_event(old, new)
-
- def _remove_object(self, path):
- # TODO I'm squashing a possible error here
- # I've seen things appear to be deleted twice
- # which needs investigation
- try:
- del(self._objects[path])
- except KeyError:
- pass
-
- def _get_root(self):
- return self._root
-
- def _refresh(self):
- get_method = self._tree_itf.get_dbus_method(self._GET_METHOD)
- self._update_objects(get_method())
-
- root = property(fget=_get_root)
-
-#END---------------------------------------------------------------------------
diff --git a/pyatspi/action.py b/pyatspi/action.py
deleted file mode 100644
index 5ac2262..0000000
--- a/pyatspi/action.py
+++ /dev/null
@@ -1,111 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from interfaces import *
-from accessible import Accessible
-from factory import accessible_factory
-
-import dbus
-
-__all__ = [
- "Action",
- ]
-
-#------------------------------------------------------------------------------
-
-class Action(Accessible):
- """
- An interface through which a user-actionable user interface component
- can be manipulated. Components which react to mouse or keyboard
- input from the user, (with the exception of pure text entry fields
- with no other function), should implement this interface. Typical
- actions include "click", "press", "release" (for instance for
- buttons), "menu" (for objects which have context menus invokable
- from mouse or keyboard), "open" for icons representing files
- folders, and others.
- """
-
- def getActions(self):
- """
- getActions:
- Retrieves all the actions at once.
- @return : an array of an array of strings in the form
- [[name, description, keybinding], ...]
- """
- func = self.get_dbus_method("getActions", dbus_interface=ATSPI_ACTION)
- return func()
-
- def doAction(self, index):
- """
- doAction:
- @param : index
- the 0-based index of the action to perform.
- Causes the object to perform the specified action.
- @return : a boolean indicating success or failure.
- """
- func = self.get_dbus_method("doAction", dbus_interface=ATSPI_ACTION)
- return func(index)
-
- def getDescription(self, index):
- """
- getDescription:
- @param : index
- the index of the action for which a description is desired.
- Get the description of the specified action. The description
- of an action may provide information about the result of action
- invocation, unlike the action name.
- @return : a string containing the description of the specified
- action.
- """
- func = self.get_dbus_method("getDescription", dbus_interface=ATSPI_ACTION)
- return func(index)
-
- def getKeyBinding(self, index):
- """
- getKeyBinding:
- @param : index
- the 0-based index of the action for which a key binding is requested.
- Get the key binding associated with a specific action.
- @return : a string containing the key binding for the specified
- action, or an empty string ("") if none exists.
- """
- func = self.get_dbus_method("getKeyBinding", dbus_interface=ATSPI_ACTION)
- return func(index)
-
- def getName(self, index):
- """
- getName:
- @param : index
- the index of the action whose name is requested.
- Get the name of the specified action. Action names generally
- describe the user action, i.e. "click" or "press", rather then
- the result of invoking the action.
- @return : a string containing the name of the specified action.
- """
- func = self.get_dbus_method("getName", dbus_interface=ATSPI_ACTION)
- return func(index)
-
- def get_nActions(self):
- return dbus.Int32(self._pgetter(self._dbus_interface, "nActions"))
- _nActionsDoc = \
- """
- nActions: a long containing the number of actions this object
- supports.
- """
- nActions = property(fget=get_nActions, doc=_nActionsDoc)
-
-# Register the accessible class with the factory.
-accessible_factory.register_accessible_class(ATSPI_ACTION, Action)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/application.py b/pyatspi/application.py
deleted file mode 100644
index ca126fe..0000000
--- a/pyatspi/application.py
+++ /dev/null
@@ -1,68 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from interfaces import *
-from factory import accessible_factory
-from accessible import Accessible
-
-import dbus
-
-__all__ = [
- "Application",
- ]
-
-#------------------------------------------------------------------------------
-
-class Application(Accessible):
- """
- An interface identifying an object which is the root of the user
- interface Accessible hierarchy associated with a running application.
- Children of Application are typically, but not exclusively, top-level
- windows.
- """
-
- def getLocale(self, locale_type):
- """
- Gets the locale in which the application is currently operating.
- For the current message locale, use lctype LOCALE_TYPE_MESSAGES.
- @param : lctype
- The LocaleType for which the locale is queried.
- @return a string compliant with the POSIX standard for locale
- description.
- """
- func = self.get_dbus_method("getLocale", dbus_interface=ATSPI_APPLICATION)
- return func(local_type)
-
- def get_toolkitName(self):
- return dbus.String(self._pgetter(self._dbus_interface, "toolkitName"))
- _toolkitNameDoc = \
- """
- A string indicating the type of user interface toolkit which
- is used by the application.
- """
- toolkitName = property(fget=get_toolkitName, doc=_toolkitNameDoc)
-
- def get_version(self):
- return dbus.String(self._pgetter(self._dbus_interface, "version"))
- _versionDoc = \
- """
- A string indicating the version number of the application's accessibility
- bridge implementation.
- """
- version = property(fget=get_version, doc=_versionDoc)
-
-# Register the accessible class with the factory.
-accessible_factory.register_accessible_class(ATSPI_APPLICATION, Application)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/applicationcache.py b/pyatspi/applicationcache.py
deleted file mode 100644
index 68fa65a..0000000
--- a/pyatspi/applicationcache.py
+++ /dev/null
@@ -1,248 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-import dbus
-
-from accessiblecache import AccessibleCache
-from desktop import Desktop, DESKTOP_PATH
-from factory import accessible_factory
-from event import Event as _Event
-from base import AccessibleObjectNotAvailable
-
-from interfaces import *
-
-__all__ = [
- "ApplicationCache",
- "TestApplicationCache",
- ]
-
-#------------------------------------------------------------------------------
-
-ROOT_PATH = '/org/freedesktop/atspi/accessible/root'
-
-#------------------------------------------------------------------------------
-
-class TestApplicationCache(object):
-
- """
- Test application store, accesses a single application.
-
- The store object acts as a central class for creating accessible objects.
- It interfaces with the ATSPI registry to keep account of all accessible
- applications. It contains the accessible cache objects from each application.
-
- @registry: Each accessible cache object must have a reference to the registry
- object to send update events.
-
- @connection: D-Bus connection used to access applications.
-
- @bus_name: The test store only accesses one accessible application, this is its
- D-Bus path.
- """
-
- def __init__(self, registry, connection, bus_name):
- self._connection = connection
-
- self.application_list = [bus_name]
- self.application_cache = {bus_name:AccessibleCache(registry, connection, bus_name)}
-
- def get_cache_data(self, app_name, acc_path):
- """
- Returns the cache tuple for the given application and accessible
- object path. Throws an IndexError if the cache data is not found.
- """
- return self.application_cache[app_name][acc_path]
-
- def create_application(self, app_name):
- """
- Creates an accessible object for the root of the application
- available at the given D-Bus name.
- """
- cls = accessible_factory.get_accessible_class(ATSPI_APPLICATION)
- try:
- return cls(app_name, self.application_cache[app_name].root, self, ATSPI_APPLICATION)
- except KeyError:
- raise AccessibleObjectNotAvailable ()
-
- def create_accessible(self, app_name, acc_path, interface, dbus_object=None):
- """
- Creates an accessible object.
-
- @app_name: D-Bus name of the application where the accessible object resides.
-
- @acc_path: D-Bus path of the object within the application.
-
- @interface: D-Bus interface of the requested object. A different accessible object
- class will be created depending on this. Making the function much like
- an accessible object factory.
-
- @dbus_object: If a D-Bus object already exists for the accessible object it can be
- provided here so that another one is not created.
- """
- # An acc_path of '/' implies the desktop object, whatever the app_name.
- if acc_path == DESKTOP_PATH:
- return Desktop(self)
- if acc_path == ROOT_PATH:
- return None
- else:
- cls = accessible_factory.get_accessible_class(interface)
- try:
- return cls(app_name, acc_path, self, interface, dbus_object=dbus_object)
- except KeyError:
- raise AccessibleObjectNotAvailable ()
-
- @property
- def connection(self):
- """
- D-Bus connection used by the store.
- """
- return self._connection
-
-#------------------------------------------------------------------------------
-
-class ApplicationCache(object):
- """
- Test application store, accesses a single application.
-
- The store object acts as a central class for creating accessible objects.
- It interfaces with the ATSPI registry to keep account of all accessible
- applications. It contains the accessible cache objects from each application.
-
- @registry: Each accessible cache object must have a reference to the registry
- object to send update events.
-
- @connection: D-Bus connection used to access applications.
-
- @bus_name: The test store only accesses one accessible application, this is its
- D-Bus path.
- """
-
- _APPLICATIONS_ADD = 1
- _APPLICATIONS_REMOVE = 0
-
- def __init__(self, registry, connection):
- self._connection = connection
- self._registry = registry
-
- self.application_list = []
- self.application_cache = {}
-
- self._regsig = connection.add_signal_receiver(self.update_handler,
- dbus_interface=ATSPI_REGISTRY_INTERFACE,
- signal_name="updateApplications")
-
- obj = connection.get_object(ATSPI_REGISTRY_NAME,
- ATSPI_REGISTRY_PATH,
- introspect=False)
- self._app_register = dbus.Interface(obj, ATSPI_REGISTRY_INTERFACE)
-
- self.application_list.extend(self._app_register.getApplications())
- for bus_name in self.application_list:
- self.application_cache[bus_name] = AccessibleCache(self._registry, self._connection, bus_name)
-
- def update_handler (self, update_type, bus_name):
- if update_type == ApplicationCache._APPLICATIONS_ADD:
- #TODO Check that app does not already exist
- #TODO Excuding this app is a hack, need to have re-entrant method calls.
- if bus_name != self._connection.get_unique_name ():
- self.application_list.append(bus_name)
- self.application_cache[bus_name] = AccessibleCache(self._registry,
- self._connection,
- bus_name)
- event = _Event(self,
- DESKTOP_PATH,
- ATSPI_REGISTRY_NAME,
- "org.freedesktop.atspi.Event.Object",
- "children-changed",
- ("add", 0, 0, ""))
- elif update_type == ApplicationCache._APPLICATIONS_REMOVE:
- #TODO Fail safely if app does not exist
- self.application_list.remove(bus_name)
- del(self.application_cache[bus_name])
- event = _Event(self,
- DESKTOP_PATH,
- ATSPI_REGISTRY_NAME,
- "org.freedesktop.atspi.Event.Object",
- "children-changed",
- ("remove", 0, 0, ""))
-
- self._registry._notifyChildrenChange(event)
-
- def get_cache_data(self, app_name, acc_path):
- """
- Returns the cache tuple for the given application and accessible
- object path. Throws an IndexError if the cache data is not found.
- """
- return self.application_cache[app_name][acc_path]
-
- def create_application(self, app_name):
- """
- Creates an accessible object for the root of the application
- available at the given D-Bus name.
- """
- if app_name == ATSPI_REGISTRY_NAME:
- return Desktop(self)
- else:
- cls = accessible_factory.get_accessible_class(ATSPI_APPLICATION)
- try:
- return cls(app_name, self.application_cache[app_name].root, self, ATSPI_APPLICATION)
- except KeyError:
- raise AccessibleObjectNotAvailable ()
-
- def create_accessible(self, app_name, acc_path, interface, dbus_object=None):
- """
- Creates an accessible object.
-
- @app_name: D-Bus name of the application where the accessible object resides.
-
- @acc_path: D-Bus path of the object within the application.
-
- @interface: D-Bus interface of the requested object. A different accessible object
- class will be created depending on this. Making the function much like
- an accessible object factory.
-
- @dbus_object: If a D-Bus object already exists for the accessible object it can be
- provided here so that another one is not created.
- """
- if acc_path == DESKTOP_PATH:
- return Desktop(self)
- if acc_path == ROOT_PATH:
- return None
- else:
- cls = accessible_factory.get_accessible_class(interface)
- try:
- return cls(app_name, acc_path, self, interface, dbus_object=dbus_object)
- except KeyError:
- raise AccessibleObjectNotAvailable ()
-
- @property
- def connection(self):
- """
- D-Bus connection used by the store.
- """
- return self._connection
-
- def _refresh(self):
- new = self._app_register.getApplications()
- removed = [item for item in self.application_list if item not in new]
- added = [item for item in new if item not in self.application_list]
- for item in added:
- self.update_handler (self._APPLICATIONS_ADD, item)
- for item in removed:
- self.update_handler (self._APPLICATIONS_REMOVE, item)
-
- for item in self.application_cache.values():
- item._refresh()
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/base.py b/pyatspi/base.py
deleted file mode 100644
index 7096d1b..0000000
--- a/pyatspi/base.py
+++ /dev/null
@@ -1,203 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-import dbus
-from dbus.proxies import Interface
-from dbus.exceptions import *
-
-import interfaces
-
-__all__ = [
- "AccessibleObjectNoLongerExists",
- "AccessibleObjectNotAvailable",
- "Enum",
- "BaseProxy",
- "_repack_tuple",
- ]
-
-class AccessibleObjectNoLongerExists(Exception):
- pass
-
-class AccessibleObjectNotAvailable(Exception):
- pass
-
-#------------------------------------------------------------------------------
-
-def _repack_tuple (tup):
- """
- Re-packs a tuple moving the last element to the beginning.
- """
- return (tup[-1] ,) + tup[:-1]
-
-#------------------------------------------------------------------------------
-
-class Enum(dbus.UInt32):
- def __str__(self):
- return self._enum_lookup[int(self)]
-
- def __eq__(self, other):
- if other is None:
- return False
- if int(self) == int(other):
- return True
- else:
- return False
-
- def __hash__(self):
- return int(self)
-
-#------------------------------------------------------------------------------
-
-
-class BaseProxyMeta(type):
- def __new__(meta, *args, **kwargs):
- cls = type.__new__(meta, *args, **kwargs)
-
- queryable_interfaces = {
- 'Accessible':interfaces.ATSPI_ACCESSIBLE,
- 'Action':interfaces.ATSPI_ACTION,
- 'Application':interfaces.ATSPI_APPLICATION,
- 'Collection':interfaces.ATSPI_COLLECTION,
- 'Component':interfaces.ATSPI_COMPONENT,
- 'Desktop':interfaces.ATSPI_DESKTOP,
- 'Document':interfaces.ATSPI_DOCUMENT,
- 'EditableText':interfaces.ATSPI_EDITABLE_TEXT,
- 'Hypertext':interfaces.ATSPI_HYPERTEXT,
- 'Hyperlink':interfaces.ATSPI_HYPERLINK,
- 'Image':interfaces.ATSPI_IMAGE,
- 'Selection':interfaces.ATSPI_SELECTION,
- 'StreamableContent':interfaces.ATSPI_STREAMABLE_CONTENT,
- 'Table':interfaces.ATSPI_TABLE,
- 'Text':interfaces.ATSPI_TEXT,
- 'Value':interfaces.ATSPI_VALUE,
- }
-
- def return_query(interface):
- def new_query(self):
- return self.queryInterface(interface)
- return new_query
-
- for interface in queryable_interfaces.keys():
- name = 'query%s' % interface
- setattr(cls, name, return_query(queryable_interfaces[interface]))
-
- return cls
-
-#------------------------------------------------------------------------------
-
-class BaseProxy(object):
- """
- The base D-Bus proxy for a remote object that implements one or more
- of the AT-SPI interfaces.
- """
-
- __metaclass__ = BaseProxyMeta
-
- def __init__(self, app_name, acc_path, cache, interface, dbus_object=None):
- """
- Create a D-Bus Proxy for an ATSPI interface.
-
- cache - ApplicationCache, where the cached data for the accessible can be obtained.
- app_name - D-Bus bus name of the application this accessible belongs to.
- acc_path - D-Bus object path of the server side accessible object.
- parent - Parent accessible.
- dbus_object(kwarg) - The D-Bus proxy object used by the accessible for D-Bus method calls.
- """
- self._cache = cache
- self._app_name = app_name
- self._acc_path = acc_path
- self._dbus_interface = interface
-
- if not dbus_object:
- dbus_object = cache.connection.get_object(self._app_name,
- self._acc_path,
- introspect=False)
- self._dbus_object = dbus_object
-
- self._pgetter = self.get_dbus_method("Get",
- dbus_interface="org.freedesktop.DBus.Properties")
- self._psetter = self.get_dbus_method("Set",
- dbus_interface="org.freedesktop.DBus.Properties")
-
- def __str__(self):
- try:
- return '[%s | %s]' % (self.getRoleName(), self.name)
- except Exception:
- return '[DEAD]'
-
- def __eq__(self, other):
- if other is None:
- return False
- try:
- if self._app_name == other._app_name and \
- self._acc_path == other._acc_path:
- return True
- else:
- return False
- except AttributeError:
- return False
-
- def __ne__(self, other):
- return not self.__eq__(other)
-
- def __hash__(self):
- return hash(self._app_name + self._acc_path)
-
- def get_dbus_method(self, *args, **kwargs):
- method = self._dbus_object.get_dbus_method(*args, **kwargs)
-
- def dbus_method_func(*iargs, **ikwargs):
- # TODO Need to throw an AccessibleObjectNoLongerExists exception
- # on D-Bus error of the same type.
- try:
- return method(*iargs, **ikwargs)
- except UnknownMethodException, e:
- raise NotImplementedError(e)
- except DBusException, e:
- raise LookupError(e)
-
- return dbus_method_func
-
- @property
- def cached_data(self):
- try:
- return self._cache.get_cache_data(self._app_name, self._acc_path)
- except KeyError:
- raise AccessibleObjectNoLongerExists, \
- 'Cache data cannot be found for path %s in app %s' % (self._acc_path, self._app_name)
-
- @property
- def interfaces(self):
- return self.cached_data.interfaces
-
- def queryInterface(self, interface):
- """
- Gets a different accessible interface for this object
- or raises a NotImplemented error if the given interface
- is not supported.
- """
- if interface in self.interfaces:
- return self._cache.create_accessible(self._app_name,
- self._acc_path,
- interface,
- dbus_object=self._dbus_object)
- else:
- raise NotImplementedError(
- "%s not supported by accessible object at path %s"
- % (interface, self._acc_path))
-
- def flushCache(self):
- pass
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/collection.py b/pyatspi/collection.py
deleted file mode 100644
index a5be820..0000000
--- a/pyatspi/collection.py
+++ /dev/null
@@ -1,110 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from interfaces import *
-from base import Enum
-from accessible import Accessible
-from factory import accessible_factory
-
-__all__ = [
- "Collection",
- ]
-
-#------------------------------------------------------------------------------
-
-class Collection(Accessible):
-
- def createMatchRule(self, *args, **kwargs):
- func = self.get_dbus_method("createMatchRule", dbus_interface=ATSPI_COLLECTION)
- return func(*args, **kwargs)
-
- def freeMatchRule(self, *args, **kwargs):
- func = self.get_dbus_method("freeMatchRule", dbus_interface=ATSPI_COLLECTION)
- return func(*args, **kwargs)
-
- def getActiveDescendant(self, *args, **kwargs):
- func = self.get_dbus_method("getActiveDescendant", dbus_interface=ATSPI_COLLECTION)
- return func(*args, **kwargs)
-
- def getMatches(self, *args, **kwargs):
- func = self.get_dbus_method("getMatches", dbus_interface=ATSPI_COLLECTION)
- return func(*args, **kwargs)
-
- def getMatchesFrom(self, *args, **kwargs):
- func = self.get_dbus_method("getMatchesFrom", dbus_interface=ATSPI_COLLECTION)
- return func(*args, **kwargs)
-
- def getMatchesTo(self, *args, **kwargs):
- func = self.get_dbus_method("getMatchesTo", dbus_interface=ATSPI_COLLECTION)
- return func(*args, **kwargs)
-
- def isAncestorOf(self, *args, **kwargs):
- func = self.get_dbus_method("isAncestorOf", dbus_interface=ATSPI_COLLECTION)
- return func(*args, **kwargs)
-
- class MatchType(Enum):
- _enum_lookup = {
- 0:'MATCH_INVALID',
- 1:'MATCH_ALL',
- 2:'MATCH_ANY',
- 3:'MATCH_NONE',
- 4:'MATCH_EMPTY',
- 5:'MATCH_LAST_DEFINED',
- }
-
- MATCH_ALL = MatchType(1)
- MATCH_ANY = MatchType(2)
- MATCH_EMPTY = MatchType(4)
- MATCH_INVALID = MatchType(0)
- MATCH_LAST_DEFINED = MatchType(5)
- MATCH_NONE = MatchType(3)
-
- class SortOrder(Enum):
- _enum_lookup = {
- 0:'SORT_ORDER_INVALID',
- 1:'SORT_ORDER_CANONICAL',
- 2:'SORT_ORDER_FLOW',
- 3:'SORT_ORDER_TAB',
- 4:'SORT_ORDER_REVERSE_CANONICAL',
- 5:'SORT_ORDER_REVERSE_FLOW',
- 6:'SORT_ORDER_REVERSE_TAB',
- 7:'SORT_ORDER_LAST_DEFINED',
- }
-
- SORT_ORDER_CANONICAL = SortOrder(1)
- SORT_ORDER_FLOW = SortOrder(2)
- SORT_ORDER_INVALID = SortOrder(0)
- SORT_ORDER_LAST_DEFINED = SortOrder(7)
- SORT_ORDER_REVERSE_CANONICAL = SortOrder(4)
- SORT_ORDER_REVERSE_FLOW = SortOrder(5)
- SORT_ORDER_REVERSE_TAB = SortOrder(6)
- SORT_ORDER_TAB = SortOrder(3)
-
- class TreeTraversalType(Enum):
- _enum_lookup = {
- 0:'TREE_RESTRICT_CHILDREN',
- 1:'TREE_RESTRICT_SIBLING',
- 2:'TREE_INORDER',
- 3:'TREE_LAST_DEFINED',
- }
-
- TREE_INORDER = TreeTraversalType(2)
- TREE_LAST_DEFINED = TreeTraversalType(3)
- TREE_RESTRICT_CHILDREN = TreeTraversalType(0)
- TREE_RESTRICT_SIBLING = TreeTraversalType(1)
-
-# Register the accessible class with the factory.
-accessible_factory.register_accessible_class(ATSPI_COLLECTION, Collection)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/component.py b/pyatspi/component.py
deleted file mode 100644
index 9e7b36f..0000000
--- a/pyatspi/component.py
+++ /dev/null
@@ -1,189 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from interfaces import *
-from base import Enum
-from factory import accessible_factory
-from accessible import BoundingBox, Accessible
-
-from dbus.types import UInt32
-
-__all__ = [
- "CoordType",
- "XY_SCREEN",
- "XY_WINDOW",
- "ComponentLayer",
- "Component",
- "LAYER_BACKGROUND",
- "LAYER_CANVAS",
- "LAYER_INVALID",
- "LAYER_LAST_DEFINED",
- "LAYER_MDI",
- "LAYER_OVERLAY",
- "LAYER_POPUP",
- "LAYER_WIDGET",
- "LAYER_WINDOW",
- ]
-
-#------------------------------------------------------------------------------
-
-class CoordType(Enum):
- _enum_lookup = {
- 0:'XY_SCREEN',
- 1:'XY_WINDOW',
- }
-
-XY_SCREEN = CoordType(0)
-XY_WINDOW = CoordType(1)
-
-#------------------------------------------------------------------------------
-
-class ComponentLayer(Enum):
- _enum_lookup = {
- 0:'LAYER_INVALID',
- 1:'LAYER_BACKGROUND',
- 2:'LAYER_CANVAS',
- 3:'LAYER_WIDGET',
- 4:'LAYER_MDI',
- 5:'LAYER_POPUP',
- 6:'LAYER_OVERLAY',
- 7:'LAYER_WINDOW',
- 8:'LAYER_LAST_DEFINED',
- }
-
-LAYER_BACKGROUND = ComponentLayer(1)
-LAYER_CANVAS = ComponentLayer(2)
-LAYER_INVALID = ComponentLayer(0)
-LAYER_LAST_DEFINED = ComponentLayer(8)
-LAYER_MDI = ComponentLayer(4)
-LAYER_OVERLAY = ComponentLayer(6)
-LAYER_POPUP = ComponentLayer(5)
-LAYER_WIDGET = ComponentLayer(3)
-LAYER_WINDOW = ComponentLayer(7)
-
-#------------------------------------------------------------------------------
-
-class Component(Accessible):
- """
- The Component interface is implemented by objects which occupy
- on-screen space, e.g. objects which have onscreen visual representations.
- The methods in Component allow clients to identify where the
- objects lie in the onscreen coordinate system, their relative
- size, stacking order, and position. It also provides a mechanism
- whereby keyboard focus may be transferred to specific user interface
- elements programmatically. This is a 2D API, coordinates of 3D
- objects are projected into the 2-dimensional screen view for
- purposes of this interface.
- """
-
- def contains(self, x, y, coord_type):
- """
- @return True if the specified point lies within the Component's
- bounding box, False otherwise.
- """
- func = self.get_dbus_method("contains", dbus_interface=ATSPI_COMPONENT)
- return func(x, y, UInt32(coord_type))
-
- def getAccessibleAtPoint(self, x, y, coord_type):
- """
- @return the Accessible child whose bounding box contains the
- specified point.
- """
- func = self.get_dbus_method("getAccessibleAtPoint", dbus_interface=ATSPI_COMPONENT)
- return self._cache.create_accessible(self._app_name,
- func(x, y, UInt32(coord_type)),
- interfaces.ATSPI_COMPONENT)
-
- def getAlpha(self):
- """
- Obtain the alpha value of the component. An alpha value of 1.0
- or greater indicates that the object is fully opaque, and an
- alpha value of 0.0 indicates that the object is fully transparent.
- Negative alpha values have no defined meaning at this time.
- """
- func = self.get_dbus_method("getAlpha", dbus_interface=ATSPI_COMPONENT)
- return func()
-
- def getExtents(self, coord_type):
- """
- Obtain the Component's bounding box, in pixels, relative to the
- specified coordinate system.
- @param coord_type
- @return a BoundingBox which entirely contains the object's onscreen
- visual representation.
- """
- func = self.get_dbus_method("getExtents", dbus_interface=ATSPI_COMPONENT)
- extents = func(UInt32(coord_type))
- return BoundingBox(*extents)
-
- def getLayer(self):
- """
- @return the ComponentLayer in which this object resides.
- """
- func = self.get_dbus_method("getLayer", dbus_interface=ATSPI_COMPONENT)
- return ComponentLayer(func())
-
- def getMDIZOrder(self):
- """
- Obtain the relative stacking order (i.e. 'Z' order) of an object.
- Larger values indicate that an object is on "top" of the stack,
- therefore objects with smaller MDIZOrder may be obscured by objects
- with a larger MDIZOrder, but not vice-versa.
- @return an integer indicating the object's place in the stacking
- order.
- """
- func = self.get_dbus_method("getMDIZOrder", dbus_interface=ATSPI_COMPONENT)
- return func()
-
- def getPosition(self, coord_type):
- """
- Obtain the position of the current component in the coordinate
- system specified by coord_type.
- @param : coord_type
- @param : x
- an out parameter which will be back-filled with the returned
- x coordinate.
- @param : y
- an out parameter which will be back-filled with the returned
- y coordinate.
- """
- func = self.get_dbus_method("getPosition", dbus_interface=ATSPI_COMPONENT)
- return func(UInt32(coord_type))
-
- def getSize(self):
- """
- Obtain the size, in the coordinate system specified by coord_type,
- of the rectangular area which fully contains the object's visual
- representation, without accounting for viewport clipping.
- @param : width
- the object's horizontal extents in the specified coordinate system.
- @param : height
- the object's vertical extents in the specified coordinate system.
- """
- func = self.get_dbus_method("getSize", dbus_interface=ATSPI_COMPONENT)
- return func()
-
- def grabFocus(self):
- """
- Request that the object obtain keyboard focus.
- @return True if keyboard focus was successfully transferred to
- the Component.
- """
- func = self.get_dbus_method("grabFocus", dbus_interface=ATSPI_COMPONENT)
- return func()
-
-# Register the accessible class with the factory.
-accessible_factory.register_accessible_class(ATSPI_COMPONENT, Component)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/constants.py b/pyatspi/constants.py
deleted file mode 100644
index b6c694a..0000000
--- a/pyatspi/constants.py
+++ /dev/null
@@ -1,144 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-#copyright: Copyright (c) 2005, 2007 IBM Corporation
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-#Portions of this code originally licensed and copyright (c) 2005, 2007
-#IBM Corporation under the BSD license, available at
-#U{http://www.opensource.org/licenses/bsd-license.php}
-
-#authors: Peter Parente, Mark Doffman
-
-# Constants used in the Component interface to get screen coordinates
-DESKTOP_COORDS = 0
-WINDOW_COORDS = 1
-
-# Constants used to synthesize mouse events
-MOUSE_B1P = 'b1p'
-MOUSE_B1R = 'b1r'
-MOUSE_B1C = 'b1c'
-MOUSE_B1D = 'b1d'
-MOUSE_B2P = 'b2p'
-MOUSE_B2R = 'b2r'
-MOUSE_B2C = 'b2c'
-MOUSE_B2D = 'b2d'
-MOUSE_B3P = 'b3p'
-MOUSE_B3R = 'b3r'
-MOUSE_B3C = 'b3c'
-MOUSE_B3D = 'b3d'
-MOUSE_ABS = 'abs'
-MOUSE_REL = 'rel'
-
-# events that clear cached properties
-CACHE_EVENTS = ['object:property-change:accessible-name',
- 'object:property-change:accessible-description',
- 'object:property-change:accessible-role',
- 'object:property-change:accessible-parent']
-
-CACHE_PROPERTIES = ''
-
-# Dictionary used to correct the bug of not being able to register for all the
-# subevents given only an AT-SPI event class (i.e. first part of the event
-# name) keys are event names having subevents and values are the subevents
-# under the key event; handlers *can* be registered for events not in this tree
-EVENT_TREE = {
- 'terminal':
- ['terminal:line-changed',
- 'terminal:columncount-changed',
- 'terminal:linecount-changed',
- 'terminal:application-changed',
- 'terminal:charwidth-changed'
- ],
- 'document':
- ['document:load-complete',
- 'document:reload',
- 'document:load-stopped',
- 'document:content-changed',
- 'document:attributes-changed'
- ],
- 'object':
- ['object:property-change',
- 'object:bounds-changed',
- 'object:link-selected',
- 'object:state-changed',
- 'object:children-changed',
- 'object:visible-data-changed',
- 'object:selection-changed',
- 'object:model-changed',
- 'object:active-descendant-changed',
- 'object:row-inserted',
- 'object:row-reordered',
- 'object:row-deleted',
- 'object:column-inserted',
- 'object:column-reordered',
- 'object:column-deleted',
- 'object:text-bounds-changed',
- 'object:text-selection-changed',
- 'object:text-changed',
- 'object:text-attributes-changed',
- 'object:text-caret-moved',
- 'object:attributes-changed'],
- 'object:text-changed' :
- ['object:text-changed:insert',
- 'object:text-changed:delete'],
- 'object:property-change' :
- ['object:property-change:accessible-parent',
- 'object:property-change:accessible-name',
- 'object:property-change:accessible-description',
- 'object:property-change:accessible-value',
- 'object:property-change:accessible-role',
- 'object:property-change:accessible-table-caption',
- 'object:property-change:accessible-table-column-description',
- 'object:property-change:accessible-table-column-header',
- 'object:property-change:accessible-table-row-description',
- 'object:property-change:accessible-table-row-header',
- 'object:property-change:accessible-table-summary'],
- 'object:children-changed' :
- ['object:children-changed:add',
- 'object:children-changed:remove'],
- 'object:state-changed' :
- ['object:state-changed:'],
- 'mouse' :
- ['mouse:abs',
- 'mouse:rel',
- 'mouse:button'],
- 'mouse:button' :
- ['mouse:button:1p',
- 'mouse:button:1r',
- 'mouse:button:2p',
- 'mouse:button:2r',
- 'mouse:button:3p',
- 'mouse:button:3r'],
- 'window' :
- ['window:minimize',
- 'window:maximize',
- 'window:restore',
- 'window:close',
- 'window:create',
- 'window:reparent',
- 'window:desktop-create',
- 'window:desktop-destroy',
- 'window:activate',
- 'window:deactivate',
- 'window:raise',
- 'window:lower',
- 'window:move',
- 'window:resize',
- 'window:shade',
- 'window:unshade',
- 'window:restyle'],
- 'focus' :
- ['focus:']
-}
-
-from Accessibility import *
diff --git a/pyatspi/desktop.py b/pyatspi/desktop.py
deleted file mode 100644
index ed6a9ee..0000000
--- a/pyatspi/desktop.py
+++ /dev/null
@@ -1,364 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from interfaces import *
-from base import BaseProxyMeta
-from accessible import BoundingBox
-from state import StateSet
-
-from role import ROLE_UNKNOWN
-from component import LAYER_WIDGET
-
-__all__ = [
- "Desktop",
- "DESKTOP_PATH",
- ]
-
-#------------------------------------------------------------------------------
-
-DESKTOP_PATH = '/org/freedesktop/atspi/accessible/desktop'
-
-#------------------------------------------------------------------------------
-
-class DesktopComponent(object):
- """
- The Component interface is implemented by objects which occupy
- on-screen space, e.g. objects which have onscreen visual representations.
- The methods in Component allow clients to identify where the
- objects lie in the onscreen coordinate system, their relative
- size, stacking order, and position. It also provides a mechanism
- whereby keyboard focus may be transferred to specific user interface
- elements programmatically. This is a 2D API, coordinates of 3D
- objects are projected into the 2-dimensional screen view for
- purposes of this interface.
- """
-
- def contains(self, *args, **kwargs):
- """
- @return True if the specified point lies within the Component's
- bounding box, False otherwise.
- """
- return False
-
- def getAccessibleAtPoint(self, *args, **kwargs):
- """
- @return the Accessible child whose bounding box contains the
- specified point.
- """
- return None
-
- def getAlpha(self, *args, **kwargs):
- """
- Obtain the alpha value of the component. An alpha value of 1.0
- or greater indicates that the object is fully opaque, and an
- alpha value of 0.0 indicates that the object is fully transparent.
- Negative alpha values have no defined meaning at this time.
- """
- return 1.0
-
- def getExtents(self, coord_type):
- """
- Obtain the Component's bounding box, in pixels, relative to the
- specified coordinate system.
- @param coord_type
- @return a BoundingBox which entirely contains the object's onscreen
- visual representation.
- """
- #TODO This needs to return the window size
- return BoundingBox(*(0,0,1024,768))
-
- def getLayer(self, *args, **kwargs):
- """
- @return the ComponentLayer in which this object resides.
- """
- return LAYER_WIDGET
-
- def getMDIZOrder(self):
- """
- Obtain the relative stacking order (i.e. 'Z' order) of an object.
- Larger values indicate that an object is on "top" of the stack,
- therefore objects with smaller MDIZOrder may be obscured by objects
- with a larger MDIZOrder, but not vice-versa.
- @return an integer indicating the object's place in the stacking
- order.
- """
- return 0
-
- def getPosition(self, coord_type):
- """
- Obtain the position of the current component in the coordinate
- system specified by coord_type.
- @param : coord_type
- @param : x
- an out parameter which will be back-filled with the returned
- x coordinate.
- @param : y
- an out parameter which will be back-filled with the returned
- y coordinate.
- """
- return (0,0)
-
- def getSize(self, *args, **kwargs):
- """
- Obtain the size, in the coordinate system specified by coord_type,
- of the rectangular area which fully contains the object's visual
- representation, without accounting for viewport clipping.
- @param : width
- the object's horizontal extents in the specified coordinate system.
- @param : height
- the object's vertical extents in the specified coordinate system.
- """
- #TODO Need to return window size
- return (1024, 768)
-
- def grabFocus(self, *args, **kwargs):
- """
- Request that the object obtain keyboard focus.
- @return True if keyboard focus was successfully transferred to
- the Component.
- """
- return False
-
-#------------------------------------------------------------------------------
-
-class Desktop(object):
- """
- The base interface which is implemented by all accessible objects.
- All objects support interfaces for querying their contained
- 'children' and position in the accessible-object hierarchy,
- whether or not they actually have children.
- """
-
- __metaclass__ = BaseProxyMeta
-
- def __init__(self, cache):
- """
- Creates a desktop object. There should be one single desktop
- object for the Registry object.
-
- @param cache - The application cache.
- @kwarf application - The application D-Bus name
-
- If the application name is provided the Desktop is being used for
- test and will only report the application provided as its single child.
- """
- self._appcache = cache
- self._app_name = ':'
- self._acc_path = DESKTOP_PATH
-
- def __str__(self):
- try:
- return '[%s | %s]' % (self.getRoleName(), self.name)
- except Exception:
- return '[DEAD]'
-
- def __nonzero__(self):
- return True
-
- def __len__(self):
- return self.getChildCount()
-
- def __getitem__(self, index):
- # IndexError thrown by getChildAtIndex
- return self.getChildAtIndex(index)
-
- def __eq__(self, other):
- if other is None:
- return False
- try:
- if self._app_name == other._app_name and \
- self._acc_path == other._acc_path:
- return True
- else:
- return False
- except AttributeError:
- return False
-
- def __ne__(self, other):
- return not self.__eq__(other)
-
- def __hash__(self):
- return hash(self._app_name + self._acc_path)
-
- def getApplication(self):
- """
- Get the containing Application for this object.
- @return the Application instance to which this object belongs.
- """
- return None
-
- def getAttributes(self):
- """
- Get a list of properties applied to this object as a whole, as
- an AttributeSet consisting of name-value pairs. As such these
- attributes may be considered weakly-typed properties or annotations,
- as distinct from the strongly-typed interface instance data declared
- using the IDL "attribute" keyword.
- Not all objects have explicit "name-value pair" AttributeSet
- properties.
- Attribute names and values may have any UTF-8 string value, however
- where possible, in order to facilitate consistent use and exposure
- of "attribute" properties by applications and AT clients, attribute
- names and values should chosen from a publicly-specified namespace
- where appropriate.
- Where possible, the names and values in the name-value pairs
- should be chosen from well-established attribute namespaces using
- standard semantics. For example, attributes of Accessible objects
- corresponding to XHTML content elements should correspond to
- attribute names and values specified in the w3c XHTML specification,
- at http://www.w3.org/TR/xhtml2, where such values are not already
- exposed via a more strongly-typed aspect of the AT-SPI API. Metadata
- names and values should be chosen from the 'Dublin Core' Metadata
- namespace using Dublin Core semantics: http://dublincore.org/dcregistry/
- Similarly, relevant structural metadata should be exposed using
- attribute names and values chosen from the CSS2 and WICD specification:
- http://www.w3.org/TR/1998/REC-CSS2-19980512 WICD (http://www.w3.org/TR/2005/WD-WICD-20051121/).
-
- @return : An AttributeSet encapsulating any "attribute values"
- currently defined for the object. An attribute set is a list of strings
- with each string comprising an name-value pair format 'name:value'.
- """
- return []
-
- def getChildAtIndex(self, index):
- """
- Get the accessible child of this object at index.
- @param : index
- an in parameter indicating which child is requested (zero-indexed).
- @return : the 'nth' Accessible child of this object.
- """
- return self._appcache.create_application(self._appcache.application_list[index])
-
- def getIndexInParent(self):
- """
- Get the index of this object in its parent's child list.
- @return : a long integer indicating this object's index in the
- parent's list.
- """
- return -1
-
- def getLocalizedRoleName(self):
- """
- Get a string indicating the type of UI role played by this object,
- translated to the current locale.
- @return : a UTF-8 string indicating the type of UI role played
- by this object.
- """
- #TODO Need to localize this somehow. Hmmmmm
- return 'unknown'
-
- def getRelationSet(self):
- """
- Get a set defining this object's relationship to other accessible
- objects.
- @return : a RelationSet defining this object's relationships.
- """
- return []
-
- def getRole(self):
- """
- Get the Role indicating the type of UI role played by this object.
- @return : a Role indicating the type of UI role played by this
- object.
- """
- return ROLE_UNKNOWN
-
- def getRoleName(self):
- """
- Get a string indicating the type of UI role played by this object.
- @return : a UTF-8 string indicating the type of UI role played
- by this object.
- """
- return 'unknown'
-
- def getState(self):
- """
- Get the current state of the object as a StateSet.
- @return : a StateSet encapsulating the currently true states
- of the object.
- """
- return StateSet()
-
- def isEqual(self, accessible):
- """
- Determine whether an Accessible refers to the same object as
- another. This method should be used rather than brute-force comparison
- of object references (i.e. "by-value" comparison), as two object
- references may have different apparent values yet refer to the
- same object.
- @param : obj
- an Accessible object reference to compare to
- @return : a boolean indicating whether the two object references
- point to the same object.
- """
- #TODO Fix this method
- return self == accessible
-
- def get_childCount(self):
- return len(self._appcache.application_list)
- _childCountDoc = \
- """
- childCount: the number of children contained by this object.
- """
- childCount = property(fget=get_childCount, doc=_childCountDoc)
-
- getChildCount = get_childCount
-
- def get_description(self):
- return ''
- _descriptionDoc = \
- """
- a string describing the object in more detail than name.
- """
- description = property(fget=get_description, doc=_descriptionDoc)
-
- def get_name(self):
- return 'main'
- _nameDoc = \
- """
- a (short) string representing the object's name.
- """
- name = property(fget=get_name, doc=_nameDoc)
-
- def get_parent(self):
- return None
- _parentDoc = \
- """
- An Accessible object which is this object's containing object.
- """
- parent = property(fget=get_parent, doc=_parentDoc)
-
- @property
- def interfaces(self):
- return [ATSPI_ACCESSIBLE, ATSPI_COMPONENT]
-
- def queryInterface(self, interface):
- """
- Gets a different accessible interface for this object
- or raises a NotImplemented error if the given interface
- is not supported.
- """
- if interface == ATSPI_ACCESSIBLE:
- return self
- elif interface == ATSPI_COMPONENT:
- return DesktopComponent()
- else:
- raise NotImplementedError(
- "%s not supported by accessible object at path %s"
- % (interface, self._acc_path))
-
- def refresh(self):
- self._appcache._refresh()
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/deviceevent.py b/pyatspi/deviceevent.py
deleted file mode 100644
index 5e4e3bb..0000000
--- a/pyatspi/deviceevent.py
+++ /dev/null
@@ -1,549 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-import dbus as _dbus
-import dbus.service as _service
-import interfaces
-
-from base import Enum as _Enum
-
-#------------------------------------------------------------------------------
-
-class PressedEventType(_Enum):
- _enum_lookup = {
- 0:'KEY_PRESSED_EVENT',
- 1:'KEY_RELEASED_EVENT',
- 2:'BUTTON_PRESSED_EVENT',
- 3:'BUTTON_RELEASED_EVENT',
- }
-
-KEY_PRESSED_EVENT = PressedEventType(0)
-KEY_RELEASED_EVENT = PressedEventType(1)
-BUTTON_PRESSED_EVENT = PressedEventType(2)
-BUTTON_RELEASED_EVENT = PressedEventType(3)
-
-#------------------------------------------------------------------------------
-
-class ControllerEventMask(_Enum):
- _enum_lookup = {
- 1:'KEY_PRESSED_EVENT_MASK',
- 2:'KEY_RELEASED_EVENT_MASK',
- 4:'BUTTON_PRESSED_EVENT_MASK',
- 8:'BUTTON_RELEASED_EVENT_MASK',
- }
-
-KEY_PRESSED_EVENT_MASK = ControllerEventMask(1)
-KEY_RELEASED_EVENT_MASK = ControllerEventMask(2)
-BUTTON_PRESSED_EVENT_MASK = ControllerEventMask(4)
-BUTTON_RELEASED_EVENT_MASK = ControllerEventMask(8)
-
-#------------------------------------------------------------------------------
-
-class KeyEventType(_Enum):
- _enum_lookup = {
- 0:'KEY_PRESSED',
- 1:'KEY_RELEASED',
- }
-KEY_PRESSED = KeyEventType(0)
-KEY_RELEASED = KeyEventType(1)
-
-#------------------------------------------------------------------------------
-
-class KeySynthType(_Enum):
- _enum_lookup = {
- 0:'KEY_PRESS',
- 1:'KEY_RELEASE',
- 2:'KEY_PRESSRELEASE',
- 3:'KEY_SYM',
- 4:'KEY_STRING',
- }
-
-KEY_PRESS = KeySynthType(0)
-KEY_PRESSRELEASE = KeySynthType(2)
-KEY_RELEASE = KeySynthType(1)
-KEY_STRING = KeySynthType(4)
-KEY_SYM = KeySynthType(3)
-
-#------------------------------------------------------------------------------
-
-class ModifierType(_Enum):
- _enum_lookup = {
- 0:'MODIFIER_SHIFT',
- 1:'MODIFIER_SHIFTLOCK',
- 2:'MODIFIER_CONTROL',
- 3:'MODIFIER_ALT',
- 4:'MODIFIER_META',
- 5:'MODIFIER_META2',
- 6:'MODIFIER_META3',
- 7:'MODIFIER_NUMLOCK',
- }
-
-MODIFIER_ALT = ModifierType(3)
-MODIFIER_CONTROL = ModifierType(2)
-MODIFIER_META = ModifierType(4)
-MODIFIER_META2 = ModifierType(5)
-MODIFIER_META3 = ModifierType(6)
-MODIFIER_NUMLOCK = ModifierType(7)
-MODIFIER_SHIFT = ModifierType(0)
-MODIFIER_SHIFTLOCK = ModifierType(1)
-
-#------------------------------------------------------------------------------
-
-class DeviceEvent(list):
- """
- Wraps an AT-SPI device event with a more Pythonic interface. Primarily adds
- a consume attribute which can be used to cease propagation of a device event.
-
- @ivar consume: Should this event be consumed and not allowed to pass on to
- observers further down the dispatch chain in this process or possibly
- system wide?
- @type consume: boolean
- @ivar type: Kind of event, KEY_PRESSED_EVENT or KEY_RELEASED_EVENT
- @type type: Accessibility.EventType
- @ivar id: Serial identifier for this key event
- @type id: integer
- @ivar hw_code: Hardware scan code for the key
- @type hw_code: integer
- @ivar modifiers: Modifiers held at the time of the key event
- @type modifiers: integer
- @ivar timestamp: Time at which the event occurred relative to some platform
- dependent starting point (e.g. XWindows start time)
- @type timestamp: integer
- @ivar event_string: String describing the key pressed (e.g. keysym)
- @type event_string: string
- @ivar is_text: Is the event representative of text to be inserted (True), or
- of a control key (False)?
- @type is_text: boolean
- """
- def __new__(cls, type, id, hw_code, modifiers, timestamp, event_string, is_text):
- return list.__new__(cls, (type, id, hw_code, modifiers, timestamp, event_string, is_text))
- def __init__(self, type, id, hw_code, modifiers, timestamp, event_string, is_text):
- list.__init__(self, (type, id, hw_code, modifiers, timestamp, event_string, is_text))
- self.consume = False
- def _get_type(self):
- return self[0]
- def _set_type(self, val):
- self[0] = val
- type = property(fget=_get_type, fset=_set_type)
- def _get_id(self):
- return self[1]
- def _set_id(self, val):
- self[1] = val
- id = property(fget=_get_id, fset=_set_id)
- def _get_hw_code(self):
- return self[2]
- def _set_hw_code(self, val):
- self[2] = val
- hw_code = property(fget=_get_hw_code, fset=_set_hw_code)
- def _get_modifiers(self):
- return self[3]
- def _set_modifiers(self, val):
- self[3] = val
- modifiers = property(fget=_get_modifiers, fset=_set_modifiers)
- def _get_timestamp(self):
- return self[4]
- def _set_timestamp(self, val):
- self[4] = val
- timestamp = property(fget=_get_timestamp, fset=_set_timestamp)
- def _get_event_string(self):
- return self[5]
- def _set_event_string(self, val):
- self[5] = val
- event_string = property(fget=_get_event_string, fset=_set_event_string)
- def _get_is_text(self):
- return self[6]
- def _set_is_text(self, val):
- self[6] = val
- is_text = property(fget=_get_is_text, fset=_set_is_text)
-
- def __str__(self):
- """
- Builds a human readable representation of the event.
-
- @return: Event description
- @rtype: string
- """
- import constants
- if self.type == constants.KEY_PRESSED_EVENT:
- kind = 'pressed'
- elif self.type == constants.KEY_RELEASED_EVENT:
- kind = 'released'
- return """\
-%s
-\thw_code: %d
-\tevent_string: %s
-\tmodifiers: %d
-\tid: %d
-\ttimestamp: %d
-\tis_text: %s""" % (kind, self.hw_code, self.event_string, self.modifiers,
- self.id, self.timestamp, self.is_text)
-
-#------------------------------------------------------------------------------
-
-class EventListenerMode(list):
- def __new__(cls, synchronous, preemptive, global_):
- return list.__new__(cls, (synchronous, preemptive, global_))
- def __init__(self, synchronous, preemptive, global_):
- list.__init__(self, (synchronous, preemptive, global_))
- def _get_synchronous(self):
- return self[0]
- def _set_synchronous(self, val):
- self[0] = val
- synchronous = property(fget=_get_synchronous, fset=_set_synchronous)
- def _get_preemptive(self):
- return self[1]
- def _set_preemptive(self, val):
- self[1] = val
- preemptive = property(fget=_get_preemptive, fset=_set_preemptive)
- def _get_global_(self):
- return self[2]
- def _set_global_(self, val):
- self[2] = val
- global_ = property(fget=_get_global_, fset=_set_global_)
-
-#------------------------------------------------------------------------------
-
-class KeyDefinition(list):
- def __new__(cls, keycode, keysym, keystring, unused):
- return list.__new__(cls, (keycode, keysym, keystring, unused))
- def __init__(self, keycode, keysym, keystring, unused):
- list.__init__(self, (keycode, keysym, keystring, unused))
- def _get_keycode(self):
- return self[0]
- def _set_keycode(self, val):
- self[0] = val
- keycode = property(fget=_get_keycode, fset=_set_keycode)
- def _get_keysym(self):
- return self[1]
- def _set_keysym(self, val):
- self[1] = val
- keysym = property(fget=_get_keysym, fset=_set_keysym)
- def _get_keystring(self):
- return self[2]
- def _set_keystring(self, val):
- self[2] = val
- keystring = property(fget=_get_keystring, fset=_set_keystring)
- def _get_unused(self):
- return self[3]
- def _set_unused(self, val):
- self[3] = val
- unused = property(fget=_get_unused, fset=_set_unused)
-
-#------------------------------------------------------------------------------
-
-class DeviceEventController(object):
- """
- The interface via which clients request notification of device
- events, and through which device events may be simulated.
- """
-
- def __init__ (self, connection):
- dec_object = connection.get_object(interfaces.ATSPI_REGISTRY_NAME,
- interfaces.ATSPI_DEVICE_EVENT_CONTROLLER_PATH,
- introspect=True)
- self._dec = _dbus.Interface(dec_object, interfaces.ATSPI_DEVICE_EVENT_CONTROLLER_INTERFACE)
-
- def registerKeystrokeListener(self,
- event_listener,
- keys,
- event_mask,
- key_event_types,
- event_listener_mode):
- """
- Register to intercept keyboard events, and either pass them on
- or consume them.
- @param : listener
- A DeviceEventListener which will intercept key events.
- @param : keys
- A list of KeyDefinition indicating which keys to intercept, or KEYSET_ALL_KEYS.
- @param : mask
- A ControllerEventMask bitmask for filtering the intercepted key events.
- @param : type
- A list of KeyEventType
- @param : mode
- An EventListenerMode indicating whether the listener should receive
- the events synchronously, potentially consuming them, or just
- be notified asynchronously of those events that have been generated.
-
- @return True if the DeviceEventListener was successfully registered
- for the requested KeySet, ControllerEventMask, event types, and
- EventListenerMode; otherwise returns False.
- """
- func = self._dec.get_dbus_method("registerKeystrokeListener")
- return func(event_listener,
- _dbus.Array(keys, signature="(iisi)"),
- event_mask,
- key_event_types,
- event_listener_mode)
-
- def deregisterKeystrokeListener(self,
- event_listener,
- keys,
- event_mask,
- key_event_types):
- """
- De-register a previously registered keyboard eventlistener.
- @param : listener
- A DeviceEventListener which will intercept key events.
- @param : keys
- A list of KeyDefinition indicating which keys to intercept, or KEYSET_ALL_KEYS.
- @param : mask
- A ControllerEventMask filtering the intercepted key events.
- @param : type
- A list of KeyEventType
- """
- func = self._dec.get_dbus_method("deregisterKeystrokeListener")
- return func(event_listener,
- keys,
- event_mask,
- key_event_types)
-
- def registerDeviceEventListener(self,
- event_listener,
- event_types):
- """
- Register to intercept events, and either pass them on or consume
- them. To listen to keyboard events use registerKeystrokeListener
- instead.
- @param : listener
- A DeviceEventListener which will intercept events.
- @param : typeseq
- A list of EventType indicating which event types to listen for.
- @return True if successful, False if not
- """
- func = self._dec.get_dbus_method("registerDeviceEventListener")
- return func(event_listener, event_types)
-
- def deregisterDeviceEventListener(self,
- event_listener,
- event_types):
- """
- De-register a previously registered keyboard eventlistener.
- @param : listener
- A DeviceEventListener which will intercept events.
- @param : typeseq
- A List of EventType indicating which event types to stop listening
- for.
- """
- func = self._dec.get_dbus_method("deregisterDeviceEventListener")
- return func(event_listener, event_types)
-
- def notifyListenersSync(self, event):
- """
- Notify the Registry instance that a device event has taken place,
- and allow pre-emptive listeners the opportunity to 'consume'
- the event and thus prevent its further issuance/forwarding. This
- is the method used by accessibility bridges to forward "toolkit
- dependent" device events to the Registry from the application's
- process space.
- @return True if the event was consumed by a (pre-emptive) listener,
- False if not (in which case the device event will be forwarded
- as normal to any application which would normally receive it,
- e.g. the currently active application in the case of mouse or
- keyboard events).
- """
- func = self._dec.get_dbus_method("notifyListenersSync")
- return func(event)
-
- def notifyListenersAsync(self, event):
- """
- Notify the Registry instance that a device event has taken place
- in an asynchronous manner. This is the method used by accessibility
- bridges to forward "toolkit dependent" device events to the Registry
- from the application's process space. If the event in question
- is potentially pre-emptible. notifyListenersSync should be used
- instead.
- """
- func = self._dec.get_dbus_method("notifyListenersAsync")
- return func(event)
-
- def generateKeyboardEvent(self, keycode, keystring, type):
- """
- Synthesize a keyboard event.
- @param : keycode
- A long integer indicating the keycode of the keypress to be synthesized.
- @param : keystring
- an optional UTF-8 string indicating a complex keyboard input
- event.
- @param : type
- A KeySynthType indicating the type of event(s) to be synthesized:
- a key press, release, press-release pair, or a complex input
- string (for instance from an internationalized or complex text
- input method, or a composed character).
- """
- func = self._dec.get_dbus_method("generateKeyboardEvent")
- return func(keycode, keystring, type)
-
- def generateMouseEvent(self, x, y, name):
- """
- Synthesize a mouse event.
- @param : x
- A long integer indicating the screen x coord for the mouse event.
- @param : y
- A long integer indicating the screen y coord for the mouse event.
- @param : name
- A string indicating the type of mouse event, e.g. "button1up"
- """
- func = self._dec.get_dbus_method("generateMouseEvent")
- return func(x, y, name)
-
-#------------------------------------------------------------------------------
-
-class _TestDeviceEventController(object):
- """
- Used for testing when no Registry daemon is present.
- """
-
- def registerKeystrokeListener(self, event_listener, keys, event_mask, key_event_types, event_listener_mode):
- return True
-
- def deregisterKeystrokeListener(self, event_listener, keys, event_mask, key_event_types):
- pass
-
- def registerDeviceEventListener(self, event_listener, event_types):
- return True
-
- def deregisterDeviceEventListener(self, event_listener, event_types):
- pass
-
- def notifyListenersSync(self, event):
- return False
-
- def notifyListenersAsync(self, event):
- pass
-
- def generateKeyboardEvent(self, keycode, keystring, type):
- pass
-
- def generateMouseEvent(self, x, y, name):
- pass
-
-#------------------------------------------------------------------------------
-
-class KeyboardDeviceEventListener(_service.Object):
- """
- Observes keyboard press and release events.
-
- @ivar registry: The L{Registry} that created this observer
- @type registry: L{Registry}
- @ivar key_set: Set of keys to monitor
- @type key_set: list of integer
- @ivar mask: Watch for key events while these modifiers are held
- @type mask: integer
- @ivar kind: Kind of events to monitor
- @type kind: integer
- @ivar mode: Keyboard event mode
- @type mode: Accessibility.EventListenerMode
- """
-
- _next_listener_id = 0
-
- def _get_unique_path (self):
- KeyboardDeviceEventListener._next_listener_id += 1
- return "/org/freedesktop/atspi/keyeventlistener/%d" % (KeyboardDeviceEventListener._next_listener_id,)
-
- def __init__(self, registry, synchronous, preemptive, global_):
- """
- Creates a mode object that defines when key events will be received from
- the system. Stores all other information for later registration.
-
- @param registry: The L{Registry} that created this observer
- @type registry: L{Registry}
- @param synchronous: Handle the key event synchronously?
- @type synchronous: boolean
- @param preemptive: Allow event to be consumed?
- @type preemptive: boolean
- @param global_: Watch for events on inaccessible applications too?
- @type global_: boolean
- """
- self._upath = self._get_unique_path()
- _service.Object.__init__(self, registry._bus, self._upath)
- self.mode = EventListenerMode(synchronous, preemptive, global_)
- self._registry = registry
-
- def register(self, dc, key_set, mask, kind):
- """
- Starts keyboard event monitoring.
-
- @param dc: Reference to a device controller
- @type dc: Accessibility.DeviceEventController
- @param key_set: Set of keys to monitor
- @type key_set: list of integer
- @param mask: Integer modifier mask or an iterable over multiple masks to
- unapply all at once
- @type mask: integer, iterable, or None
- @param kind: Kind of events to monitor
- @type kind: integer
- """
- try:
- # check if the mask is iterable
- iter(mask)
- except TypeError:
- # register a single integer if not
- dc.registerKeystrokeListener(self._upath, key_set, mask, kind, self.mode)
- else:
- for m in mask:
- dc.registerKeystrokeListener(self._upath, key_set, m, kind, self.mode)
-
- def unregister(self, dc, key_set, mask, kind):
- """
- Stops keyboard event monitoring.
-
- @param dc: Reference to a device controller
- @type dc: Accessibility.DeviceEventController
- @param key_set: Set of keys to monitor
- @type key_set: list of integer
- @param mask: Integer modifier mask or an iterable over multiple masks to
- unapply all at once
- @type mask: integer, iterable, or None
- @param kind: Kind of events to monitor
- @type kind: integer
- """
- try:
- # check if the mask is iterable
- iter(mask)
- except TypeError:
- # unregister a single integer if not
- dc.deregisterKeystrokeListener(self._upath, key_set, mask, kind)
- else:
- for m in mask:
- dc.deregisterKeystrokeListener(self._upath, key_set, m, kind)
-
- @_service.method(dbus_interface=interfaces.ATSPI_DEVICE_EVENT_LISTENER_INTERFACE,
- in_signature="(uinnisb)",
- out_signature="b")
- def notifyEvent(self, ev):
- """
- Notifies the L{Registry} that an event has occurred. Wraps the raw event
- object in our L{Event} class to support automatic ref and unref calls. An
- observer can return True to indicate this event should not be allowed to pass
- to other AT-SPI observers or the underlying application.
-
- @param ev: Keyboard event
- @type ev: Accessibility.DeviceEvent
- @return: Should the event be consumed (True) or allowed to pass on to other
- AT-SPI observers (False)?
- @rtype: boolean
- """
- # TODO Find out where the exceptions are falling in to.
- try:
- # wrap the device event
- event = DeviceEvent(*ev)
- return self._registry.handleDeviceEvent(event, self)
- except Exception, e:
- import traceback
- traceback.print_exc()
- return False
-
-#END---------------------------------------------------------------------------
diff --git a/pyatspi/document.py b/pyatspi/document.py
deleted file mode 100644
index 038b1fd..0000000
--- a/pyatspi/document.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from interfaces import *
-from accessible import Accessible
-from factory import accessible_factory
-
-__all__ = [
- "Document",
- ]
-
-#------------------------------------------------------------------------------
-
-class Document(Accessible):
- """
- Primarily a 'tagging' interface which indicates the start of
- document content in the Accessibility hierarchy. Accessible objects
- below the node implementing Document are normally assumed to
- be part of the document content. Attributes of Document are those
- attributes associated with the document as a whole. Objects that
- implement Document are normally expected to implement Collection
- as well.
- """
-
- def getAttributeValue(self, key):
- """
- Gets the value of a single attribute, if specified for the document
- as a whole.
- @param : attributename
- a string indicating the name of a specific attribute (name-value
- pair) being queried.
- @return a string corresponding to the value of the specified
- attribute, or an empty string if the attribute is unspecified
- for the object.
- """
- func = self.get_dbus_method("getAttributeValue", dbus_interface=ATSPI_DOCUMENT)
- return func(key)
-
- def getAttributes(self):
- """
- Gets all attributes specified for a document as a whole. For
- attributes which change within the document content, see Accessibility::Text::getAttributes
- instead.
- @return an AttributeSet containing the attributes of the document,
- as name-value pairs.
- """
- func = self.get_dbus_method("getAttributes", dbus_interface=ATSPI_DOCUMENT)
- return [key + ':' + value for key, value in func().values()]
-
- def getLocale(self):
- """
- Gets the locale associated with the document's content. e.g.
- the locale for LOCALE_TYPE_MESSAGES.
- @return a string compliant with the POSIX standard for locale
- description.
- """
- func = self.get_dbus_method("getLocale", dbus_interface=ATSPI_DOCUMENT)
- return func()
-
-# Register the accessible class with the factory.
-accessible_factory.register_accessible_class(ATSPI_DOCUMENT, Document)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/editabletext.py b/pyatspi/editabletext.py
deleted file mode 100644
index 23cdf48..0000000
--- a/pyatspi/editabletext.py
+++ /dev/null
@@ -1,124 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from interfaces import *
-from factory import accessible_factory
-from text import *
-
-__all__ = [
- "EditableText",
- ]
-
-#------------------------------------------------------------------------------
-
-class EditableText(Text):
- """
- Derived from interface Text, EditableText provides methods for
- modifying textual content of components which support editing.
- EditableText also interacts with the system clipboard via copyText,
- cutText, and pasteText.
- """
-
- def copyText(self, start, end):
- """
- Copy a range of text into the system clipboard.
- @param : startPos
- the character offset of the first character in the range of text
- being copied.
- @param : endPos
- the offset of the first character past the end of the range of
- text being copied.
- """
- func = self.get_dbus_method("copyText", dbus_interface=ATSPI_EDITABLE_TEXT)
- return func(start, end)
-
- def cutText(self, start, end):
- """
- Excise a range of text from a Text object, copying it into the
- system clipboard.
- @param : startPos
- the character offset of the first character in the range of text
- being cut.
- @param : endPos
- the offset of the first character past the end of the range of
- text being cut.
- @return True if the text was successfully cut, False otherwise.
- """
- func = self.get_dbus_method("cutText", dbus_interface=ATSPI_EDITABLE_TEXT)
- return func(start, end)
-
- def deleteText(self, start, end):
- """
- Excise a range of text from a Text object without copying it
- into the system clipboard.
- @param : startPos
- the character offset of the first character in the range of text
- being deleted.
- @param : endPos
- the offset of the first character past the end of the range of
- text being deleted.
- @return True if the text was successfully deleted, False otherwise.
- """
- func = self.get_dbus_method("deleteText", dbus_interface=ATSPI_EDITABLE_TEXT)
- return func(start, end)
-
- def insertText(self, position, text, length):
- """
- Insert new text contents into an existing text object at a given
- location, while retaining the old contents.
- @param : position
- the character offset into the Text implementor's content at which
- the new content will be inserted.
- @param : text
- a UTF-8 string of which length characters will be inserted into
- the text object's text buffer.
- @param : length
- the number of characters of text to insert. If the character
- count of text is less than or equal to length, the entire contents
- of text will be inserted.
- @return True if the text content was successfully inserted, False
- otherwise.
- """
- func = self.get_dbus_method("insertText", dbus_interface=ATSPI_EDITABLE_TEXT)
- return func(position, text, length)
-
- def pasteText(self, position):
- """
- Copy the text contents of the system clipboard, if any, into
- a Text object, inserting it at a particular character offset.
- @param : position
- the character offset before which the text will be inserted.
- @return True if the text was successfully pasted into the Text
- object, False otherwise.
- """
- func = self.get_dbus_method("pasteText", dbus_interface=ATSPI_EDITABLE_TEXT)
- return func(position)
-
- def setTextContents(self, contents):
- """
- Replace the text contents with a new string, discarding the old
- contents.
- @param : newContents
- a UTF-8 string with which the text object's contents will be
- replaced.
- @return True if the text content was successfully changed, False
- otherwise.
- """
- func = self.get_dbus_method("setTextContents", dbus_interface=ATSPI_EDITABLE_TEXT)
- return func(contents)
-
-# Register the accessible class with the factory.
-accessible_factory.register_accessible_class(ATSPI_EDITABLE_TEXT, EditableText)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/event.py b/pyatspi/event.py
deleted file mode 100644
index 948535f..0000000
--- a/pyatspi/event.py
+++ /dev/null
@@ -1,262 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-import interfaces
-from accessible import BoundingBox
-from base import AccessibleObjectNotAvailable
-
-__all__ = [
- "Event",
- "EventType",
- "event_type_to_signal_reciever",
- ]
-
-#------------------------------------------------------------------------------
-
-_interface_to_klass = {
- "org.freedesktop.atspi.Event.Object":"object",
- "org.freedesktop.atspi.Event.Window":"window",
- "org.freedesktop.atspi.Event.Mouse":"mouse",
- "org.freedesktop.atspi.Event.Keyboard":"keyboard",
- "org.freedesktop.atspi.Event.Terminal":"terminal",
- "org.freedesktop.atspi.Event.Document":"document",
- "org.freedesktop.atspi.Event.Focus":"focus",
- }
-
-_klass_to_interface = {
- "object":"org.freedesktop.atspi.Event.Object",
- "window":"org.freedesktop.atspi.Event.Window",
- "mouse":"org.freedesktop.atspi.Event.Mouse",
- "keyboard":"org.freedesktop.atspi.Event.Keyboard",
- "terminal":"org.freedesktop.atspi.Event.Terminal",
- "document":"org.freedesktop.atspi.Event.Document",
- "focus":"org.freedesktop.atspi.Event.Focus",
- }
-
-#------------------------------------------------------------------------------
-
-class _ELessList(list):
- def __getitem__(self, index):
- try:
- return list.__getitem__(self, index)
- except IndexError:
- return None
-
-class EventType(str):
- """
- Wraps the AT-SPI event type string so its components can be accessed
- individually as klass (can't use the keyword class), major, minor, and detail
- (klass_major_minor_detail).
-
- @note: All attributes of an instance of this class should be considered
- public readable as it is acting a a struct.
- @ivar klass: Most general event type identifier (object, window, mouse, etc.)
- @type klass: string
- @ivar major: Second level event type description
- @type major: string
- @ivar minor: Third level event type description
- @type minor: string
- @ivar detail: Lowest level event type description
- @type detail: string
- @ivar name: Full, unparsed event name as received from AT-SPI
- @type name: string
- @cvar format: Names of the event string components
- @type format: 4-tuple of string
- """
-
- _SEPARATOR = ':'
-
- def __init__(self, name):
- """
- Parses the full AT-SPI event name into its components
- (klass:major:minor:detail). If the provided event name is an integer
- instead of a string, then the event is really a device event.
-
- @param name: Full AT-SPI event name
- @type name: string
- @raise AttributeError: When the given event name is not a valid string
- """
- stripped = name.strip(self._SEPARATOR)
- separated = stripped.split(self._SEPARATOR, 3)
- self._separated = _ELessList(separated)
-
- self.klass = self._separated[0]
- self.major = self._separated[1]
- self.minor = self._separated[2]
- self.detail = self._separated[3]
-
- def is_subtype(self, event_type):
- """
- Determines if the passed event type is a subtype
- of this event.
- """
- if event_type.klass and event_type.klass != self.klass:
- return False
- else:
- if event_type.major and event_type.major != self.major:
- return False
- else:
- if event_type.minor and event_type.minor != self.minor:
- return False
- return True
-
- @property
- def name(self):
- return str(self)
-
- @property
- def value(self):
- return str(self)
-
-#------------------------------------------------------------------------------
-
-def event_type_to_signal_reciever(bus, cache, event_handler, event_type):
- kwargs = {
- 'sender_keyword':'sender',
- 'interface_keyword':'interface',
- 'member_keyword':'member',
- 'path_keyword':'path',
- }
- if event_type.major:
- major = event_type.major.replace('-', '_')
- if event_type.klass:
- kwargs['dbus_interface'] = _klass_to_interface[event_type.klass]
- if event_type.major:
- kwargs['signal_name'] = major
- if event_type.minor:
- kwargs['arg0'] = event_type.minor
-
- def handler_wrapper(minor, detail1, detail2, any_data,
- sender=None, interface=None, member=None, path=None):
- event = Event(cache, path, sender, interface, member, (minor, detail1, detail2, any_data))
- return event_handler(event)
-
- return bus.add_signal_receiver(handler_wrapper, **kwargs)
-
-#------------------------------------------------------------------------------
-
-def signal_spec_to_event_string (interface, name, minor):
- interface = _interface_to_klass[interface]
- name = name.replace('_', '-')
-
- if interface == "focus":
- return "focus:"
-
- result = interface + ':'
- if name:
- result += name + ':'
- if minor:
- result += minor
- return result
-
-#------------------------------------------------------------------------------
-
-class Event(object):
- """
- Wraps an AT-SPI event with a more Pythonic interface managing exceptions,
- the differences in any_data across versions, and the reference counting of
- accessibles provided with the event.
-
- @note: All unmarked attributes of this class should be considered public
- readable and writable as the class is acting as a record object.
-
- @ivar type: The type of the AT-SPI event
- @type type: L{EventType}
- @ivar detail1: First AT-SPI event parameter
- @type detail1: integer
- @ivar detail2: Second AT-SPI event parameter
- @type detail2: integer
- @ivar any_data: Extra AT-SPI data payload
- @type any_data: object
- @ivar host_application: Application owning the event source
- @type host_application: Accessibility.Application
- @ivar source_name: Name of the event source at the time of event dispatch
- @type source_name: string
- @ivar source_role: Role of the event source at the time of event dispatch
- @type source_role: Accessibility.Role
- @ivar source: Source of the event
- @type source: Accessibility.Accessible
- """
- def __init__(self, cache, source_path, source_application, interface, name, event):
- """
- Extracts information from the provided event. If the event is a "normal"
- event, pulls the detail1, detail2, any_data, and source values out of the
- given object and stores it in this object. If the event is a device event,
- key ID is stored in detail1, scan code is stored in detail2, key name,
- key modifiers (e.g. ALT, CTRL, etc.), is text flag, and timestamp are
- stored as a 4-tuple in any_data, and source is None (since key events are
- global).
-
- @param event: Event from an AT-SPI callback
- @type event: Accessibility.Event or Accessibility.DeviceEvent
- """
- self._cache = cache
- self._source_path = source_path
- self._source_application = source_application
-
- self._source = None
- self._application = None
-
- self.type = EventType(signal_spec_to_event_string(interface, name, event[0]))
-
- self.detail1 = event[1]
- self.detail2 = event[2]
-
- data = event[3]
- if name == "object_bounds_changed":
- self.any_data = BoundingBox(*data)
- else:
- self.any_data = data
-
- @property
- def host_application(self):
- if not self._application:
- try:
- return self._cache.create_application(self._source_application)
- except AccessibleObjectNotAvailable:
- pass
- return self._application
-
- @property
- def source(self):
- if not self._source:
- try:
- self._source = self._cache.create_accessible(self._source_application,
- self._source_path,
- interfaces.ATSPI_ACCESSIBLE)
- except AccessibleObjectNotAvailable:
- pass
- return self._source
-
- @property
- def source_name(self):
- return source.name
-
- @property
- def source_role(self):
- return source.getRole()
-
- def __str__(self):
- """
- Builds a human readable representation of the event including event type,
- parameters, and source info.
-
- @return: Event description
- @rtype: string
- """
- return '%s(%s, %s, %s)\n\tsource: %s\n\thost_application: %s' % \
- (self.type, self.detail1, self.detail2, self.any_data,
- self.source, self.host_application)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/factory.py b/pyatspi/factory.py
deleted file mode 100644
index 4b02320..0000000
--- a/pyatspi/factory.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-#------------------------------------------------------------------------------
-
-class AccessibleFactory(object):
- __accessible_interfaces = {}
-
- def register_accessible_class(self, name, cls):
- self.__accessible_interfaces[name] = cls
-
- def get_accessible_class(self, name):
- return self.__accessible_interfaces[name]
-
-accessible_factory = AccessibleFactory()
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/hyperlink.py b/pyatspi/hyperlink.py
deleted file mode 100644
index de7a6db..0000000
--- a/pyatspi/hyperlink.py
+++ /dev/null
@@ -1,109 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from interfaces import *
-from accessible import Accessible
-from factory import accessible_factory
-
-import dbus
-
-__all__ = [
- "Hyperlink",
- ]
-
-#------------------------------------------------------------------------------
-
-class Hyperlink(Accessible):
- """
- Instances of Hyperlink are returned by Hypertext objects, and
- are the means by which end users and clients interact with linked,
- and in some cases embedded, content. Hyperlinks may have multiple
- "anchors", where an anchor corresponds to a reference to a particular
- resource with a corresponding resource identified (URI). Hyperlinks
- may be queried for their URIs, or queried for the objects corresponding
- to their anchors. The objects thus obtained are instances of
- Accessible, and may be queried, and manipulated via the Action
- interface.
- """
-
- def getObject(self, index):
- """
- Gets the i'th object, (where i is an integer between 0 and Hyperlink::numAnchors
- - 1, inclusive) associated with a Hyperlink. The objects returned
- are usually actionable (i.e. they should implement Accessibility::Action),
- and the available actions often include "open", "bookmark", "save
- link as", etc. They may also implement Accessibility::StreamableContent,
- although clients can normally use getURI to obtain a resource
- locator via which the object's data may be accessed.
- @return an Accessible object instance representing the Hyperlink's
- ith anchor, or through which the content associated with the
- ith anchor can be accessed.
- """
- func = self.get_dbus_method("getObject", dbus_interface=ATSPI_HYPERLINK)
- return self._cache.create_accessible(self._app_name, func(index),
- interfaces.ATSPI_HYPERLINK)
-
- def getURI(self, index):
- """
- Obtain a resource locator ('URI') which can be used to access
- the content to which this link "points" or is connected.
- @return a string corresponding to the URI of the Hyperlink's
- 'ith' anchor, if one exists, or a NIL string otherwise.
- """
- func = self.get_dbus_method("getURI", dbus_interface=ATSPI_HYPERLINK)
- return func(index)
-
- def isValid(self):
- """
- Check the hyperlink to see if a connection to its backing content
- can be established, or if its URI is valid.
- @return True if the object's content is available, or False if
- the hyperlink's URI is invalid, or a connection to the resource
- can not be established.
- """
- func = self.get_dbus_method("isValid", dbus_interface=ATSPI_HYPERLINK)
- return func()
-
- def get_endIndex(self):
- return dbus.Int32(self._pgetter(self._dbus_interface, "endIndex"))
- _endIndexDoc = \
- """
- the ending offset within the containing Hypertext content with
- which this Hyperlink is associated; that is, the offset of the
- first element past the range within the Hypertext associated
- with this Hyperlink.
- """
- endIndex = property(fget=get_endIndex, doc=_endIndexDoc)
-
- def get_nAnchors(self):
- return dbus.Int16(self._pgetter(self._dbus_interface, "nAnchors"))
- _nAnchorsDoc = \
- """
- the number of separate anchors associated with this Hyperlink
- """
- nAnchors = property(fget=get_nAnchors, doc=_nAnchorsDoc)
-
- def get_startIndex(self):
- return dbus.Int32(self._pgetter(self._dbus_interface, "startIndex"))
- _startIndexDoc = \
- """
- the starting offset within the containing Hypertext content with
- which this Hyperlink is associated
- """
- startIndex = property(fget=get_startIndex, doc=_startIndexDoc)
-
-# Register the accessible class with the factory.
-accessible_factory.register_accessible_class(ATSPI_HYPERLINK, Hyperlink)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/hypertext.py b/pyatspi/hypertext.py
deleted file mode 100644
index 6e7332f..0000000
--- a/pyatspi/hypertext.py
+++ /dev/null
@@ -1,71 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from interfaces import *
-from accessible import Accessible
-from factory import accessible_factory
-
-__all__ = [
- "Hypertext",
- ]
-
-#------------------------------------------------------------------------------
-
-class Hypertext(Accessible):
- """
- An interface used for objects which implement linking between
- multiple resource or content locations, or multiple 'markers'
- within a single document. A Hypertext instance is associated
- with one or more Hyperlinks, which are associated with particular
- offsets within the Hypertext's included content.
- """
-
- def getLink(self, index):
- """
- Get one of the Hyperlinks associated with this Hypertext object,
- by index.
- @param : linkIndex
- an integer from 0 to getNLinks() - 1.
- @return the Hyperlink in this Hypertext object.
- """
- func = self.get_dbus_method("getLink", dbus_interface=ATSPI_HYPERTEXT)
- return self._cache.create_accessible(self._app_name, func(index),
- interfaces.ATSPI_HYPERTEXT)
-
- def getLinkIndex(self, character_index):
- """
- Get the hyperlink index, if any, associated with a particular
- character offset in the Hypertext object. For Hypertext implementors
- without textual content, all hyperlinks are associated with character
- offset '0'.
- @return the index of the Hyperlink associated with character
- offset characterIndex, or -1 if no Hyperlink is associated with
- that character offset.
- """
- func = self.get_dbus_method("getLinkIndex", dbus_interface=ATSPI_HYPERTEXT)
- return func(character_index)
-
- def getNLinks(self):
- """
- Query the hypertext object for the number of Hyperlinks it contains.
- @return the number of Hyperlinks associated with this Hypertext
- object, as a long integer.
- """
- func = self.get_dbus_method("getNLinks", dbus_interface=ATSPI_HYPERTEXT)
- return func()
-
-# Register the accessible class with the factory.
-accessible_factory.register_accessible_class(ATSPI_HYPERTEXT, Hypertext)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/image.py b/pyatspi/image.py
deleted file mode 100644
index b2b595a..0000000
--- a/pyatspi/image.py
+++ /dev/null
@@ -1,110 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-import dbus
-from interfaces import *
-from accessible import Accessible
-from factory import accessible_factory
-from accessible import BoundingBox
-
-from dbus.types import UInt32
-
-__all__ = [
- "Image",
- ]
-
-#------------------------------------------------------------------------------
-
-class Image(Accessible):
- """
- An interface implemented by objects which render image data or
- pictorial information to the screen. When onscreen components
- include graphical information that is not purely intended to
- enhance "3d effect" or visual layout, but which conveys some
- semantic or informational content to the sighted user, they should
- implement Image, and that semantic content should be conveyed
- textually to the extent possible via the image description, as
- well as the Accessible::name and Accessible::description properties.
- """
-
- def getImageExtents(self, coordType):
- """
- Obtain a bounding box which entirely contains the image contents,
- as displayed on screen. The bounds returned do not account for
- any viewport clipping or the fact that the image may be partially
- or wholly obscured by other onscreen content.
- @param : coordType
- If 0, the returned bounding box position is returned relative
- to the screen; if 1, the bounding box position is returned relative
- to the containing window.
- @return a BoundingBox enclosing the image's onscreen representation.
- """
- func = self.get_dbus_method("getImageExtents", dbus_interface=ATSPI_IMAGE)
- return BoundingBox(*func(UInt32(coordType)))
-
- def getImagePosition(self, coord_type):
- """
- Get the coordinates of the current image position on screen.
- @param : x
- Back-filled with the x coordinate of the onscreen image (i.e.
- the minimum x coordinate)
- @param : y
- Back-filled with the y coordinate of the onscreen image (i.e.
- the minimum y coordinate)
- @param : coordType
- If 0, the returned x and y coordinates are returned relative
- to the screen; if 1, they are returned relative to the containing
- window.
- """
- func = self.get_dbus_method("getImagePosition", dbus_interface=ATSPI_IMAGE)
- return func(UInt32(coord_type))
-
- def getImageSize(self):
- """
- Obtain the width and height of the current onscreen view of the
- image. The extents returned do not account for any viewport clipping
- or the fact that the image may be partially or wholly obscured
- by other onscreen content.
- @param : width
- Back-filled with the x extents of the onscreen image (i.e. the
- image width in pixels)
- @param : height
- Back-filled with the y extents of the onscreen image (i.e. the
- image height in pixels)
- """
- func = self.get_dbus_method("getImageSize", dbus_interface=ATSPI_IMAGE)
- return func()
-
- def get_imageDescription(self):
- return dbus.String(self._pgetter(self._dbus_interface, "imageDescription"))
- _imageDescriptionDoc = \
- """
- A UTF-8 string providing a textual description of what is visually
- depicted in the image.
- """
- imageDescription = property(fget=get_imageDescription, doc=_imageDescriptionDoc)
-
- def get_imageLocale(self):
- return dbus.String(self._pgetter(self._dbus_interface, "imageLocale"))
- _imageLocaleDoc = \
- """
- A string corresponding to the POSIX LC_MESSAGES locale used by
- the imageDescription.
- """
- imageLocale = property(fget=get_imageLocale, doc=_imageLocaleDoc)
-
-# Register the accessible class with the factory.
-accessible_factory.register_accessible_class(ATSPI_IMAGE, Image)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/interfaces.py b/pyatspi/interfaces.py
deleted file mode 100644
index 0883fb9..0000000
--- a/pyatspi/interfaces.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-ATSPI_ACCESSIBLE = 'org.freedesktop.atspi.Accessible'
-ATSPI_ACTION = 'org.freedesktop.atspi.Action'
-ATSPI_APPLICATION = 'org.freedesktop.atspi.Application'
-ATSPI_COMPONENT = 'org.freedesktop.atspi.Component'
-ATSPI_COLLECTION = 'org.freedesktop.atspi.Collection'
-ATSPI_DESKTOP = 'org.freedesktop.atspi.Desktop'
-ATSPI_DOCUMENT = 'org.freedesktop.atspi.Document'
-ATSPI_EDITABLE_TEXT = 'org.freedesktop.atspi.EditableText'
-ATSPI_HYPERLINK = 'org.freedesktop.atspi.Hyperlink'
-ATSPI_HYPERTEXT = 'org.freedesktop.atspi.Hypertext'
-ATSPI_IMAGE = 'org.freedesktop.atspi.Image'
-ATSPI_LOGIN_HELPER = 'org.freedesktop.atspi.LoginHelper'
-ATSPI_SELECTION = 'org.freedesktop.atspi.Selection'
-ATSPI_SELECTOR = 'org.freedesktop.atspi.Selector'
-ATSPI_STREAMABLE_CONTENT = 'org.freedesktop.atspi.Content'
-ATSPI_TABLE = 'org.freedesktop.atspi.Table'
-ATSPI_TEXT = 'org.freedesktop.atspi.Text'
-ATSPI_VALUE = 'org.freedesktop.atspi.Value'
-
-ATSPI_REGISTRY_INTERFACE = 'org.freedesktop.atspi.Registry'
-ATSPI_REGISTRY_PATH = '/org/freedesktop/atspi/registry'
-ATSPI_REGISTRY_NAME = 'org.freedesktop.atspi.Registry'
-
-ATSPI_DEVICE_EVENT_CONTROLLER_INTERFACE = 'org.freedesktop.atspi.DeviceEventController'
-ATSPI_DEVICE_EVENT_CONTROLLER_PATH = '/org/freedesktop/atspi/registry/deviceeventcontroller'
-ATSPI_DEVICE_EVENT_LISTENER_INTERFACE = 'org.freedesktop.atspi.DeviceEventListener'
diff --git a/pyatspi/loginhelper.py b/pyatspi/loginhelper.py
deleted file mode 100644
index a8b5183..0000000
--- a/pyatspi/loginhelper.py
+++ /dev/null
@@ -1,147 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from interfaces import *
-from base import Enum
-from accessible import Accessible
-from factory import accessible_factory
-
-__all__ = [
- "LoginHelper",
- ]
-
-#------------------------------------------------------------------------------
-
-class LoginHelper(Accessible):
- """
- An interface for use by assistive technologies by which they
- can access system information and services on a 'need to know'
- basis while the screen is locked, during user authentication,
- or during other sensitive operations.
- This interface is intended for use by assistive technologies
- and related user-enabling services, and by applications and utilities
- which may wish to restrict access to certain system devices and
- services during security-sensitive states, e.g. when the screen
- is locked or during authentication into some secure service.
- Such 'applications' (for instance, screen lock dialogs and security-enabled
- web browsers) use the LoginHelper client interfaces, and the
- bonobo-activation query service, to query for assistive technologies
- which advertise the LoginHelper service. The client then queries
- these assistive technologies for their device I/O requirements,
- via the getDeviceReqs call. The client may then issue the advisory
- request setSafe (TRUE), which requests that the LoginHelper -implementing
- service make a best-effort attempt to make itself more secure
- (for instance, an onscreen keyboard might turn off word prediction,
- and a screenreader may turn off keyboard echo via speech). The
- return value of setSafe is an advisory indication of whether
- this attempt was successful (no specific guarantees are implied).
- Once the 'security sensitive' state is exited, the client should
- call setSafe (FALSE).
- The return values from getDeviceReqs inform the client of which
- services the LoginHelper service (e. g. assistive technology)
- needs in order to do its job. The client may use this information
- to loosen any restrictions on access which it may currently have
- in place (for instance, keyboard grabs, etc.). If it does not
- do so, the likely outcome is that the end-user will experience
- loss of access to the system.
- """
-
- def getDeviceReqs(self, *args, **kwargs):
- """
- getDeviceReqs:
- Query a LoginHelper for the types of device I/O it requires,
- in order to do its job. For instance, a LoginHelper which needs
- to receive keyboard events will include Accessibility_LoginHelper_CORE_KEYBOARD
- in this list.
- @return : A sequence of LoginHelper_DeviceReq indicating the
- device I/O required in order to facilitate end-user access to
- the system.
- """
- func = self.get_dbus_method("getDeviceReqs", dbus_interface=ATSPI_LOGIN_HELPER)
- return func(*args, **kwargs)
-
- def getRaiseWindows(self, *args, **kwargs):
- """
- getRaiseWindows:
- Get a list of window IDs that need raising on login.
- @return : a sequence containing window IDS for toplevels which
- need to be raised/made visible during user authentication, in
- order for the LoginHelper to facilitate end-user access to the
- system.
- """
- func = self.get_dbus_method("getRaiseWindows", dbus_interface=ATSPI_LOGIN_HELPER)
- return func(*args, **kwargs)
-
- def setSafe(self, *args, **kwargs):
- """
- setSafe:
- @param : safe_mode
- TRUE if the client is requesting that 'safe mode' be initiated,
- FALSE if the client is advising that 'safe mode' may be exited,
- i.e. normal operation may be resumed.
- Request a LoginHelper to enter "safe" mode, or inform LoginHelper
- that "safe" mode may be exited. If safe_mode is TRUE, but the
- return value is FALSE, the requesting client may wish to deny
- services to the LoginHelper, for instance avoid raising its toplevels.
- The return value is purely advisory, and no guarantees are intended
- about what the implementing LoginHelper will do to improve security
- when in "safe" mode.
- @return : whether the LoginHelper is now "safe" or not.
- """
- func = self.get_dbus_method("setSafe", dbus_interface=ATSPI_LOGIN_HELPER)
- return func(*args, **kwargs)
-
- class DeviceReq(Enum):
- _enum_lookup = {
- 0:'GUI_EVENTS',
- 1:'CORE_KEYBOARD',
- 2:'CORE_POINTER',
- 3:'EXT_INPUT',
- 4:'POST_WINDOWS',
- 5:'AUDIO_OUT',
- 6:'AUDIO_IN',
- 7:'NETWORK',
- 8:'LOCALHOST',
- 9:'SERIAL_OUT',
- 10:'SERIAL_IN',
- }
-
- AUDIO_IN = DeviceReq(6)
- AUDIO_OUT = DeviceReq(5)
- CORE_KEYBOARD = DeviceReq(1)
- CORE_POINTER = DeviceReq(2)
- EXT_INPUT = DeviceReq(3)
- GUI_EVENTS = DeviceReq(0)
- LOCALHOST = DeviceReq(8)
- NETWORK = DeviceReq(7)
- POST_WINDOWS = DeviceReq(4)
- SERIAL_IN = DeviceReq(10)
- SERIAL_OUT = DeviceReq(9)
-
- class WindowInfo(list):
- def __new__(cls, winID):
- list.__new__(cls, (winID))
- def __init__(self, winID):
- list.__init__(self, (winID))
-
- def _get_winID(self):
- return self[0]
- def _set_winID(self, val):
- self[0] = val
- winID = property(fget=_get_winID, fset=_set_winID)
-
-# Register the accessible class with the factory.
-accessible_factory.register_accessible_class(ATSPI_LOGIN_HELPER, LoginHelper)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/registry.py b/pyatspi/registry.py
deleted file mode 100644
index ab22053..0000000
--- a/pyatspi/registry.py
+++ /dev/null
@@ -1,482 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-#copyright: Copyright (c) 2005, 2007 IBM Corporation
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-#Portions of this code originally licensed and copyright (c) 2005, 2007
-#IBM Corporation under the BSD license, available at
-#U{http://www.opensource.org/licenses/bsd-license.php}
-
-#authors: Peter Parente, Mark Doffman
-
-import os as _os
-import dbus as _dbus
-import gobject as _gobject
-
-from desktop import Desktop as _Desktop
-
-from event import EventType as _EventType
-from event import event_type_to_signal_reciever as _event_type_to_signal_reciever
-
-from applicationcache import TestApplicationCache, ApplicationCache
-
-from dbus.mainloop.glib import DBusGMainLoop as _DBusGMainLoop
-
-from Queue import Queue
-from deviceevent import *
-from deviceevent import _TestDeviceEventController
-
-_DBusGMainLoop(set_as_default=True)
-
-#------------------------------------------------------------------------------
-
-class _Registry(object):
- """
- Wraps the Accessibility.Registry to provide more Pythonic registration for
- events.
-
- This object should be treated as a singleton, but such treatment is not
- enforced. You can construct another instance of this object and give it a
- reference to the Accessibility.Registry singleton. Doing so is harmless and
- has no point.
-
- @ivar async: Should event dispatch to local listeners be decoupled from event
- receiving from the registry?
- @type async: boolean
- @ivar reg: Reference to the real, wrapped registry object
- @type reg: Accessibility.Registry
- @ivar dev: Reference to the device controller
- @type dev: Accessibility.DeviceEventController
- @ivar queue: Queue of events awaiting local dispatch
- @type queue: Queue.Queue
- @ivar clients: Map of event names to client listeners
- @type clients: dictionary
- @ivar observers: Map of event names to AT-SPI L{_Observer} objects
- @type observers: dictionary
- """
-
- def __init__(self):
- """
- Stores a reference to the AT-SPI registry. Gets and stores a reference
- to the DeviceEventController.
-
- @param reg: Reference to the AT-SPI registry daemon
- @type reg: Accessibility.Registry
- """
- self._bus = _dbus.SessionBus()
-
- app_name = None
- if "ATSPI_TEST_APP_NAME" in _os.environ.keys():
- app_name = _os.environ["ATSPI_TEST_APP_NAME"]
-
- if app_name:
- self._app_cache = TestApplicationCache(self, self._bus, app_name)
- self.dev = _TestDeviceEventController()
- else:
- self._app_cache = ApplicationCache(self, self._bus)
- self.dev = DeviceEventController(self._bus)
-
- self._event_listeners = {}
-
- # All of this special casing is for the 'faked'
- # events caused by cache updates.
-
- self._name_type = _EventType("object:property-change:name")
- self._name_listeners = {}
- self._description_type = _EventType("object:property-change:description")
- self._description_listeners = {}
- self._parent_type = _EventType("object:property-change:parent")
- self._parent_listeners = {}
- self._children_changed_type = _EventType("object:children-changed")
- self._children_changed_listeners = {}
-
- self.clients = {}
- self.deviceClients = {}
-
- def __call__(self):
- """
- @return: This instance of the registry
- @rtype: L{Registry}
- """
- return self
-
- @property
- def cache (self):
- """
- This is the accessible application cache through which
- all accessible objects are accessed.
- """
- return self._app_cache
-
- def start(self, async=False, gil=True):
- """
- Enter the main loop to start receiving and dispatching events.
-
- @param async: Should event dispatch be asynchronous (decoupled) from
- event receiving from the AT-SPI registry?
- @type async: boolean
- @param gil: Add an idle callback which releases the Python GIL for a few
- milliseconds to allow other threads to run? Necessary if other threads
- will be used in this process.
- Note - No Longer used.
- @type gil: boolean
- """
- self._loop = _gobject.MainLoop()
- try:
- self._loop.run()
- except KeyboardInterrupt:
- pass
-
- def stop(self, *args):
- """Quits the main loop."""
- self._loop.quit()
- self.flushEvents()
-
- def getDesktopCount(self):
- """
- Gets the number of available desktops.
-
- @return: Number of desktops
- @rtype: integer
- """
- return 1
-
- def getDesktop(self, i):
- """
- Gets a reference to the i-th desktop.
-
- @param i: Which desktop to get
- @type i: integer
- @return: Desktop reference
- @rtype: Accessibility.Desktop
- """
- return _Desktop(self._app_cache)
-
- # -------------------------------------------------------------------------------
-
- def _callClients(self, register, event):
- for client in register.keys():
- client(event)
-
- def _notifyNameChange(self, event):
- self._callClients(self._name_listeners, event)
-
- def _notifyDescriptionChange(self, event):
- self._callClients(self._description_listeners, event)
-
- def _notifyParentChange(self, event):
- self._callClients(self._parent_listeners, event)
-
- def _notifyChildrenChange(self, event):
- self._callClients(self._children_changed_listeners, event)
-
- def _registerFake(self, type, register, client, *names):
- """
- Registers a client from a register of clients
- for 'Fake' events emitted by the cache.
- """
- try:
- registered = register[client]
- except KeyError:
- registered = []
- register[client] = registered
-
- for name in names:
- new_type = _EventType(name)
- if new_type.is_subtype(type):
- registered.append(new_type.name)
-
- if registered == []:
- del(register[client])
-
- def _deregisterFake(self, type, register, client, *names):
- """
- Deregisters a client from a register of clients
- for 'Fake' events emitted by the cache.
- """
- try:
- registered = register[client]
- except KeyError:
- return True
-
- for name in names:
- remove_type = _EventType(name)
-
- copy = registered[:]
- for i in range(0, len(copy)):
- type_name = copy[i]
- registered_type = _EventType(type_name)
-
- if remove_type.is_subtype(registered_type):
- del(registered[i])
-
- if registered == []:
- del(register[client])
-
- # -------------------------------------------------------------------------------
-
- def registerEventListener(self, client, *names):
- """
- Registers a new client callback for the given event names. Supports
- registration for all subevents if only partial event name is specified.
- Do not include a trailing colon.
-
- For example, 'object' will register for all object events,
- 'object:property-change' will register for all property change events,
- and 'object:property-change:accessible-parent' will register only for the
- parent property change event.
-
- Registered clients will not be automatically removed when the client dies.
- To ensure the client is properly garbage collected, call
- L{deregisterEventListener}.
-
- @param client: Callable to be invoked when the event occurs
- @type client: callable
- @param names: List of full or partial event names
- @type names: list of string
- """
- try:
- registered = self._event_listeners[client]
- except KeyError:
- registered = []
- self._event_listeners[client] = registered
-
- for name in names:
- new_type = _EventType(name)
- registered.append((new_type.name,
- _event_type_to_signal_reciever(self._bus, self._app_cache, client, new_type)))
-
- self._registerFake(self._name_type, self._name_listeners, client, *names)
- self._registerFake(self._description_type, self._description_listeners, client, *names)
- self._registerFake(self._parent_type, self._parent_listeners, client, *names)
- self._registerFake(self._children_changed_type, self._children_changed_listeners, client, *names)
-
- def deregisterEventListener(self, client, *names):
- """
- Unregisters an existing client callback for the given event names. Supports
- unregistration for all subevents if only partial event name is specified.
- Do not include a trailing colon.
-
- This method must be called to ensure a client registered by
- L{registerEventListener} is properly garbage collected.
-
- @param client: Client callback to remove
- @type client: callable
- @param names: List of full or partial event names
- @type names: list of string
- @return: Were event names specified for which the given client was not
- registered?
- @rtype: boolean
- """
- try:
- registered = self._event_listeners[client]
- except KeyError:
- # Presumably if were trying to deregister a client with
- # no names then the return type is always true.
- return True
-
- missing = False
-
- for name in names:
- remove_type = _EventType(name)
- copy = registered[:]
- for i in range (0, len(copy)):
- type_name, signal_match = copy[i]
- registered_type = _EventType(type_name)
-
- if remove_type.is_subtype(registered_type):
- signal_match.remove()
- del(registered[i])
- else:
- missing = True
-
- if registered == []:
- del(self._event_listeners[client])
-
- #TODO Do these account for missing also?
- self._deregisterFake(self._name_type, self._name_listeners, client, *names)
- self._deregisterFake(self._description_type, self._description_listeners, client, *names)
- self._deregisterFake(self._parent_type, self._parent_listeners, client, *names)
- self._deregisterFake(self._children_changed_type, self._children_changed_listeners, client, *names)
-
- return missing
-
- # -------------------------------------------------------------------------------
-
- def registerKeystrokeListener(self,
- client,
- key_set=[],
- mask=0,
- kind=(KEY_PRESSED_EVENT, KEY_RELEASED_EVENT),
- synchronous=True,
- preemptive=True,
- global_=False):
- """
- Registers a listener for key stroke events.
-
- @param client: Callable to be invoked when the event occurs
- @type client: callable
- @param key_set: Set of hardware key codes to stop monitoring. Leave empty
- to indicate all keys.
- @type key_set: list of integer
- @param mask: When the mask is None, the codes in the key_set will be
- monitored only when no modifier is held. When the mask is an
- integer, keys in the key_set will be monitored only when the modifiers in
- the mask are held. When the mask is an iterable over more than one
- integer, keys in the key_set will be monitored when any of the modifier
- combinations in the set are held.
- @type mask: integer, iterable, None
- @param kind: Kind of events to watch, KEY_PRESSED_EVENT or
- KEY_RELEASED_EVENT.
- @type kind: list
- @param synchronous: Should the callback notification be synchronous, giving
- the client the chance to consume the event?
- @type synchronous: boolean
- @param preemptive: Should the callback be allowed to preempt / consume the
- event?
- @type preemptive: boolean
- @param global_: Should callback occur even if an application not supporting
- AT-SPI is in the foreground? (requires xevie)
- @type global_: boolean
- """
- try:
- # see if we already have an observer for this client
- ob = self.deviceClients[client]
- except KeyError:
- # create a new device observer for this client
- ob = KeyboardDeviceEventListener(self, synchronous, preemptive, global_)
- # store the observer to client mapping, and the inverse
- self.deviceClients[ob] = client
- self.deviceClients[client] = ob
- if mask is None:
- # None means all modifier combinations
- mask = utils.allModifiers()
- # register for new keystrokes on the observer
- ob.register(self.dev, key_set, mask, kind)
-
- def deregisterKeystrokeListener(self,
- client,
- key_set=[],
- mask=0,
- kind=(KEY_PRESSED_EVENT, KEY_RELEASED_EVENT)):
- """
- Deregisters a listener for key stroke events.
-
- @param client: Callable to be invoked when the event occurs
- @type client: callable
- @param key_set: Set of hardware key codes to stop monitoring. Leave empty
- to indicate all keys.
- @type key_set: list of integer
- @param mask: When the mask is None, the codes in the key_set will be
- monitored only when no modifier is held. When the mask is an
- integer, keys in the key_set will be monitored only when the modifiers in
- the mask are held. When the mask is an iterable over more than one
- integer, keys in the key_set will be monitored when any of the modifier
- combinations in the set are held.
- @type mask: integer, iterable, None
- @param kind: Kind of events to stop watching, KEY_PRESSED_EVENT or
- KEY_RELEASED_EVENT.
- @type kind: list
- @raise KeyError: When the client isn't already registered for events
- """
- # see if we already have an observer for this client
- ob = self.deviceClients[client]
- if mask is None:
- # None means all modifier combinations
- mask = utils.allModifiers()
- # register for new keystrokes on the observer
- ob.unregister(self.dev, key_set, mask, kind)
-
- def handleDeviceEvent(self, event, ob):
- """
- Dispatches L{event.DeviceEvent}s to registered clients. Clients are called
- in the order they were registered for the given AT-SPI event. If any
- client returns True, callbacks cease for the event for clients of this registry
- instance. Clients of other registry instances and clients in other processes may
- be affected depending on the values of synchronous and preemptive used when invoking
- L{registerKeystrokeListener}.
-
- @note: Asynchronous dispatch of device events is not supported.
-
- @param event: AT-SPI device event
- @type event: L{event.DeviceEvent}
- @param ob: Observer that received the event
- @type ob: L{KeyboardDeviceEventListener}
-
- @return: Should the event be consumed (True) or allowed to pass on to other
- AT-SPI observers (False)?
- @rtype: boolean
- """
- try:
- # try to get the client registered for this event type
- client = self.deviceClients[ob]
- except KeyError:
- # client may have unregistered recently, ignore event
- return False
- # make the call to the client
- try:
- return client(event) or event.consume
- except Exception:
- # print the exception, but don't let it stop notification
- traceback.print_exc()
-
- # -------------------------------------------------------------------------------
-
- def pumpQueuedEvents (self):
- """
- No Longer needed all application events are asyncronous.
- """
- pass
-
- def flushEvents (self):
- """
- No Longer needed all application events are asyncronous.
- """
- pass
-
- # -------------------------------------------------------------------------------
-
- def generateKeyboardEvent(self, keycode, keysym, kind):
- """
- Generates a keyboard event. One of the keycode or the keysym parameters
- should be specified and the other should be None. The kind parameter is
- required and should be one of the KEY_PRESS, KEY_RELEASE, KEY_PRESSRELEASE,
- KEY_SYM, or KEY_STRING.
-
- @param keycode: Hardware keycode or None
- @type keycode: integer
- @param keysym: Symbolic key string or None
- @type keysym: string
- @param kind: Kind of event to synthesize
- @type kind: integer
- """
- if keysym is None:
- self.dev.generateKeyboardEvent(keycode, '', kind)
- else:
- self.dev.generateKeyboardEvent(None, keysym, kind)
-
- def generateMouseEvent(self, x, y, name):
- """
- Generates a mouse event at the given absolute x and y coordinate. The kind
- of event generated is specified by the name. For example, MOUSE_B1P
- (button 1 press), MOUSE_REL (relative motion), MOUSE_B3D (butten 3
- double-click).
-
- @param x: Horizontal coordinate, usually left-hand oriented
- @type x: integer
- @param y: Vertical coordinate, usually left-hand oriented
- @type y: integer
- @param name: Name of the event to generate
- @type name: string
- """
- self.dev.generateMouseEvent(_dbus.Int32(x), _dbus.Int32(y), name)
diff --git a/pyatspi/relation.py b/pyatspi/relation.py
deleted file mode 100644
index ef952c2..0000000
--- a/pyatspi/relation.py
+++ /dev/null
@@ -1,137 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-#copyright: Copyright (c) 2005, 2007 IBM Corporation
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-#Portions of this code originally licensed and copyright (c) 2005, 2007
-#IBM Corporation under the BSD license, available at
-#U{http://www.opensource.org/licenses/bsd-license.php}
-
-#authors: Peter Parente, Mark Doffman
-
-import interfaces
-from base import Enum as _Enum
-
-#------------------------------------------------------------------------------
-
-class RelationType(_Enum):
- _enum_lookup = {
- 0:'RELATION_NULL',
- 1:'RELATION_LABEL_FOR',
- 2:'RELATION_LABELLED_BY',
- 3:'RELATION_CONTROLLER_FOR',
- 4:'RELATION_CONTROLLED_BY',
- 5:'RELATION_MEMBER_OF',
- 6:'RELATION_TOOLTIP_FOR',
- 7:'RELATION_NODE_CHILD_OF',
- 8:'RELATION_EXTENDED',
- 9:'RELATION_FLOWS_TO',
- 10:'RELATION_FLOWS_FROM',
- 11:'RELATION_SUBWINDOW_OF',
- 12:'RELATION_EMBEDS',
- 13:'RELATION_EMBEDDED_BY',
- 14:'RELATION_POPUP_FOR',
- 15:'RELATION_PARENT_WINDOW_OF',
- 16:'RELATION_DESCRIPTION_FOR',
- 17:'RELATION_DESCRIBED_BY',
- 18:'RELATION_LAST_DEFINED',
- }
-
-#------------------------------------------------------------------------------
-
-RELATION_CONTROLLED_BY = RelationType(4)
-RELATION_CONTROLLER_FOR = RelationType(3)
-RELATION_DESCRIBED_BY = RelationType(17)
-RELATION_DESCRIPTION_FOR = RelationType(16)
-RELATION_EMBEDDED_BY = RelationType(13)
-RELATION_EMBEDS = RelationType(12)
-RELATION_EXTENDED = RelationType(8)
-RELATION_FLOWS_FROM = RelationType(10)
-RELATION_FLOWS_TO = RelationType(9)
-RELATION_LABELLED_BY = RelationType(2)
-RELATION_LABEL_FOR = RelationType(1)
-RELATION_LAST_DEFINED = RelationType(18)
-RELATION_MEMBER_OF = RelationType(5)
-RELATION_NODE_CHILD_OF = RelationType(7)
-RELATION_NULL = RelationType(0)
-RELATION_PARENT_WINDOW_OF = RelationType(15)
-RELATION_POPUP_FOR = RelationType(14)
-RELATION_SUBWINDOW_OF = RelationType(11)
-RELATION_TOOLTIP_FOR = RelationType(6)
-
-#------------------------------------------------------------------------------
-
-# Build a dictionary mapping relation values to names based on the prefix of the enum constants.
-
-RELATION_VALUE_TO_NAME = dict(((value, name[9:].lower().replace('_', ' '))
- for name, value
- in globals().items()
- if name.startswith('RELATION_')))
-
-#------------------------------------------------------------------------------
-
-def _marshal_relation_set(cache, app_name, relation_set):
- """
- The D-Bus protocol has a relation set passed as an array of
- relation types and object arrays.
-
- This function marshals the D-Bus message into a list of relation
- objects.
- """
- return [Relation(cache, app_name, *relation) for relation in relation_set]
-
-#------------------------------------------------------------------------------
-
-class Relation(object):
- """
- An interface via which objects' non-hierarchical relationships
- to one another are indicated. An instance of Relations represents
- a "one-to-many" correspondance.
- """
-
- def __init__(self, cache, app_name, type, objects):
- self._type = type
- self._objects = objects
-
- self._cache = cache
- self._app_name = app_name
-
- def getNTargets(self):
- """
- @return the number of objects to which this relationship applies.
- """
- return len(self._objects)
-
- def getRelationType(self):
- """
- @return the RelationType of this Relation.
- """
- return RelationType(self._type)
-
- def getRelationTypeName(self):
- """
- @return an unlocalized string representing the relation type.
- """
- return RELATION_VALUE_TO_NAME[self._type]
-
- def getTarget(self, index):
- """
- @return an Object which is the 'nth'target of this Relation,
- e.g. the Object at index i in the list of Objects having the
- specified relationship to this Accessible.
- """
- return self._cache.create_accessible(self._app_name,
- self._objects[index],
- interfaces.ATSPI_ACCESSIBLE)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/role.py b/pyatspi/role.py
deleted file mode 100644
index a7dac27..0000000
--- a/pyatspi/role.py
+++ /dev/null
@@ -1,297 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from base import Enum as _Enum
-
-#------------------------------------------------------------------------------
-
-class Role(_Enum):
- _enum_lookup = {
- 0:'ROLE_INVALID',
- 1:'ROLE_ACCELERATOR_LABEL',
- 2:'ROLE_ALERT',
- 3:'ROLE_ANIMATION',
- 4:'ROLE_ARROW',
- 5:'ROLE_CALENDAR',
- 6:'ROLE_CANVAS',
- 7:'ROLE_CHECK_BOX',
- 8:'ROLE_CHECK_MENU_ITEM',
- 9:'ROLE_COLOR_CHOOSER',
- 10:'ROLE_COLUMN_HEADER',
- 11:'ROLE_COMBO_BOX',
- 12:'ROLE_DATE_EDITOR',
- 13:'ROLE_DESKTOP_ICON',
- 14:'ROLE_DESKTOP_FRAME',
- 15:'ROLE_DIAL',
- 16:'ROLE_DIALOG',
- 17:'ROLE_DIRECTORY_PANE',
- 18:'ROLE_DRAWING_AREA',
- 19:'ROLE_FILE_CHOOSER',
- 20:'ROLE_FILLER',
- 21:'ROLE_FOCUS_TRAVERSABLE',
- 22:'ROLE_FONT_CHOOSER',
- 23:'ROLE_FRAME',
- 24:'ROLE_GLASS_PANE',
- 25:'ROLE_HTML_CONTAINER',
- 26:'ROLE_ICON',
- 27:'ROLE_IMAGE',
- 28:'ROLE_INTERNAL_FRAME',
- 29:'ROLE_LABEL',
- 30:'ROLE_LAYERED_PANE',
- 31:'ROLE_LIST',
- 32:'ROLE_LIST_ITEM',
- 33:'ROLE_MENU',
- 34:'ROLE_MENU_BAR',
- 35:'ROLE_MENU_ITEM',
- 36:'ROLE_OPTION_PANE',
- 37:'ROLE_PAGE_TAB',
- 38:'ROLE_PAGE_TAB_LIST',
- 39:'ROLE_PANEL',
- 40:'ROLE_PASSWORD_TEXT',
- 41:'ROLE_POPUP_MENU',
- 42:'ROLE_PROGRESS_BAR',
- 43:'ROLE_PUSH_BUTTON',
- 44:'ROLE_RADIO_BUTTON',
- 45:'ROLE_RADIO_MENU_ITEM',
- 46:'ROLE_ROOT_PANE',
- 47:'ROLE_ROW_HEADER',
- 48:'ROLE_SCROLL_BAR',
- 49:'ROLE_SCROLL_PANE',
- 50:'ROLE_SEPARATOR',
- 51:'ROLE_SLIDER',
- 52:'ROLE_SPIN_BUTTON',
- 53:'ROLE_SPLIT_PANE',
- 54:'ROLE_STATUS_BAR',
- 55:'ROLE_TABLE',
- 56:'ROLE_TABLE_CELL',
- 57:'ROLE_TABLE_COLUMN_HEADER',
- 58:'ROLE_TABLE_ROW_HEADER',
- 59:'ROLE_TEAROFF_MENU_ITEM',
- 60:'ROLE_TERMINAL',
- 61:'ROLE_TEXT',
- 62:'ROLE_TOGGLE_BUTTON',
- 63:'ROLE_TOOL_BAR',
- 64:'ROLE_TOOL_TIP',
- 65:'ROLE_TREE',
- 66:'ROLE_TREE_TABLE',
- 67:'ROLE_UNKNOWN',
- 68:'ROLE_VIEWPORT',
- 69:'ROLE_WINDOW',
- 70:'ROLE_EXTENDED',
- 71:'ROLE_HEADER',
- 72:'ROLE_FOOTER',
- 73:'ROLE_PARAGRAPH',
- 74:'ROLE_RULER',
- 75:'ROLE_APPLICATION',
- 76:'ROLE_AUTOCOMPLETE',
- 77:'ROLE_EDITBAR',
- 78:'ROLE_EMBEDDED',
- 79:'ROLE_ENTRY',
- 80:'ROLE_CHART',
- 81:'ROLE_CAPTION',
- 82:'ROLE_DOCUMENT_FRAME',
- 83:'ROLE_HEADING',
- 84:'ROLE_PAGE',
- 85:'ROLE_SECTION',
- 86:'ROLE_REDUNDANT_OBJECT',
- 87:'ROLE_FORM',
- 88:'ROLE_LINK',
- 89:'ROLE_INPUT_METHOD_WINDOW',
- 90:'ROLE_LAST_DEFINED',
- }
-
-ROLE_ACCELERATOR_LABEL = Role(1)
-ROLE_ALERT = Role(2)
-ROLE_ANIMATION = Role(3)
-ROLE_APPLICATION = Role(75)
-ROLE_ARROW = Role(4)
-ROLE_AUTOCOMPLETE = Role(76)
-ROLE_CALENDAR = Role(5)
-ROLE_CANVAS = Role(6)
-ROLE_CAPTION = Role(81)
-ROLE_CHART = Role(80)
-ROLE_CHECK_BOX = Role(7)
-ROLE_CHECK_MENU_ITEM = Role(8)
-ROLE_COLOR_CHOOSER = Role(9)
-ROLE_COLUMN_HEADER = Role(10)
-ROLE_COMBO_BOX = Role(11)
-ROLE_DATE_EDITOR = Role(12)
-ROLE_DESKTOP_FRAME = Role(14)
-ROLE_DESKTOP_ICON = Role(13)
-ROLE_DIAL = Role(15)
-ROLE_DIALOG = Role(16)
-ROLE_DIRECTORY_PANE = Role(17)
-ROLE_DOCUMENT_FRAME = Role(82)
-ROLE_DRAWING_AREA = Role(18)
-ROLE_EDITBAR = Role(77)
-ROLE_EMBEDDED = Role(78)
-ROLE_ENTRY = Role(79)
-ROLE_EXTENDED = Role(70)
-ROLE_FILE_CHOOSER = Role(19)
-ROLE_FILLER = Role(20)
-ROLE_FOCUS_TRAVERSABLE = Role(21)
-ROLE_FONT_CHOOSER = Role(22)
-ROLE_FOOTER = Role(72)
-ROLE_FORM = Role(87)
-ROLE_FRAME = Role(23)
-ROLE_GLASS_PANE = Role(24)
-ROLE_HEADER = Role(71)
-ROLE_HEADING = Role(83)
-ROLE_HTML_CONTAINER = Role(25)
-ROLE_ICON = Role(26)
-ROLE_IMAGE = Role(27)
-ROLE_INPUT_METHOD_WINDOW = Role(89)
-ROLE_INTERNAL_FRAME = Role(28)
-ROLE_INVALID = Role(0)
-ROLE_LABEL = Role(29)
-ROLE_LAST_DEFINED = Role(90)
-ROLE_LAYERED_PANE = Role(30)
-ROLE_LINK = Role(88)
-ROLE_LIST = Role(31)
-ROLE_LIST_ITEM = Role(32)
-ROLE_MENU = Role(33)
-ROLE_MENU_BAR = Role(34)
-ROLE_MENU_ITEM = Role(35)
-ROLE_OPTION_PANE = Role(36)
-ROLE_PAGE = Role(84)
-ROLE_PAGE_TAB = Role(37)
-ROLE_PAGE_TAB_LIST = Role(38)
-ROLE_PANEL = Role(39)
-ROLE_PARAGRAPH = Role(73)
-ROLE_PASSWORD_TEXT = Role(40)
-ROLE_POPUP_MENU = Role(41)
-ROLE_PROGRESS_BAR = Role(42)
-ROLE_PUSH_BUTTON = Role(43)
-ROLE_RADIO_BUTTON = Role(44)
-ROLE_RADIO_MENU_ITEM = Role(45)
-ROLE_REDUNDANT_OBJECT = Role(86)
-ROLE_ROOT_PANE = Role(46)
-ROLE_ROW_HEADER = Role(47)
-ROLE_RULER = Role(74)
-ROLE_SCROLL_BAR = Role(48)
-ROLE_SCROLL_PANE = Role(49)
-ROLE_SECTION = Role(85)
-ROLE_SEPARATOR = Role(50)
-ROLE_SLIDER = Role(51)
-ROLE_SPIN_BUTTON = Role(52)
-ROLE_SPLIT_PANE = Role(53)
-ROLE_STATUS_BAR = Role(54)
-ROLE_TABLE = Role(55)
-ROLE_TABLE_CELL = Role(56)
-ROLE_TABLE_COLUMN_HEADER = Role(57)
-ROLE_TABLE_ROW_HEADER = Role(58)
-ROLE_TEAROFF_MENU_ITEM = Role(59)
-ROLE_TERMINAL = Role(60)
-ROLE_TEXT = Role(61)
-ROLE_TOGGLE_BUTTON = Role(62)
-ROLE_TOOL_BAR = Role(63)
-ROLE_TOOL_TIP = Role(64)
-ROLE_TREE = Role(65)
-ROLE_TREE_TABLE = Role(66)
-ROLE_UNKNOWN = Role(67)
-ROLE_VIEWPORT = Role(68)
-ROLE_WINDOW = Role(69)
-
-ROLE_NAMES = {
- ROLE_INVALID:'invalid',
- ROLE_ACCELERATOR_LABEL:'accelerator label',
- ROLE_ALERT:'alert',
- ROLE_ANIMATION:'animation',
- ROLE_ARROW:'arrow',
- ROLE_CALENDAR:'calendar',
- ROLE_CANVAS:'canvas',
- ROLE_CHECK_BOX:'check box',
- ROLE_CHECK_MENU_ITEM:'check menu item',
- ROLE_COLOR_CHOOSER:'color chooser',
- ROLE_COLUMN_HEADER:'column header',
- ROLE_COMBO_BOX:'combo box',
- ROLE_DATE_EDITOR:'dateeditor',
- ROLE_DESKTOP_ICON:'desktop icon',
- ROLE_DESKTOP_FRAME:'desktop frame',
- ROLE_DIAL:'dial',
- ROLE_DIALOG:'dialog',
- ROLE_DIRECTORY_PANE:'directory pane',
- ROLE_DRAWING_AREA:'drawing area',
- ROLE_FILE_CHOOSER:'file chooser',
- ROLE_FILLER:'filler',
- ROLE_FONT_CHOOSER:'font chooser',
- ROLE_FRAME:'frame',
- ROLE_GLASS_PANE:'glass pane',
- ROLE_HTML_CONTAINER:'html container',
- ROLE_ICON:'icon',
- ROLE_IMAGE:'image',
- ROLE_INTERNAL_FRAME:'internal frame',
- ROLE_LABEL:'label',
- ROLE_LAYERED_PANE:'layered pane',
- ROLE_LIST:'list',
- ROLE_LIST_ITEM:'list item',
- ROLE_MENU:'menu',
- ROLE_MENU_BAR:'menu bar',
- ROLE_MENU_ITEM:'menu item',
- ROLE_OPTION_PANE:'option pane',
- ROLE_PAGE_TAB:'page tab',
- ROLE_PAGE_TAB_LIST:'page tab list',
- ROLE_PANEL:'panel',
- ROLE_PASSWORD_TEXT:'password text',
- ROLE_POPUP_MENU:'popup menu',
- ROLE_PROGRESS_BAR:'progress bar',
- ROLE_PUSH_BUTTON:'push button',
- ROLE_RADIO_BUTTON:'radio button',
- ROLE_RADIO_MENU_ITEM:'radio menu item',
- ROLE_ROOT_PANE:'root pane',
- ROLE_ROW_HEADER:'row header',
- ROLE_SCROLL_BAR:'scroll bar',
- ROLE_SCROLL_PANE:'scroll pane',
- ROLE_SEPARATOR:'separator',
- ROLE_SLIDER:'slider',
- ROLE_SPLIT_PANE:'split pane',
- ROLE_SPIN_BUTTON:'spin button',
- ROLE_STATUS_BAR:'status bar',
- ROLE_TABLE:'table',
- ROLE_TABLE_CELL:'table cell',
- ROLE_TABLE_COLUMN_HEADER:'table column header',
- ROLE_TABLE_ROW_HEADER:'table row header',
- ROLE_TEAROFF_MENU_ITEM:'tear off menu item',
- ROLE_TERMINAL:'terminal',
- ROLE_TEXT:'text',
- ROLE_TOGGLE_BUTTON:'toggle button',
- ROLE_TOOL_BAR:'tool bar',
- ROLE_TOOL_TIP:'tool tip',
- ROLE_TREE:'tree',
- ROLE_TREE_TABLE:'tree table',
- ROLE_UNKNOWN:'unknown',
- ROLE_VIEWPORT:'viewport',
- ROLE_WINDOW:'window',
- ROLE_HEADER:'header',
- ROLE_FOOTER:'footer',
- ROLE_PARAGRAPH:'paragraph',
- ROLE_RULER:'ruler',
- ROLE_APPLICATION:'application',
- ROLE_AUTOCOMPLETE:'autocomplete',
- ROLE_EDITBAR:'edit bar',
- ROLE_EMBEDDED:'embedded component',
- ROLE_ENTRY:'entry',
- ROLE_CHART:'chart',
- ROLE_CAPTION:'caption',
- ROLE_DOCUMENT_FRAME:'document frame',
- ROLE_HEADING:'heading',
- ROLE_PAGE:'page',
- ROLE_SECTION:'section',
- ROLE_REDUNDANT_OBJECT:'redundant object',
- ROLE_FORM:'form',
- ROLE_LINK:'link',
- ROLE_INPUT_METHOD_WINDOW:'input method window',
-}
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/selection.py b/pyatspi/selection.py
deleted file mode 100644
index 4751ba5..0000000
--- a/pyatspi/selection.py
+++ /dev/null
@@ -1,136 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from interfaces import *
-from accessible import Accessible
-from factory import accessible_factory
-
-import dbus
-
-__all__ = [
- "Selection",
- ]
-
-#------------------------------------------------------------------------------
-
-class Selection(Accessible):
- """
- An interface which indicates that an object exposes a 'selection'
- model, allowing the selection of one or more of its children.
- Read-only Selection instances are possible, in which case the
- interface is used to programmatically determine the selected-ness
- of its children. A selected child has State::STATE_SELECTED,
- and a child which may hypothetically be selected (though possibly
- not programmatically selectable) has State::STATE_SELECTABLE.
- """
-
- def clearSelection(self):
- """
- Attempt to clear all selections (i.e. deselect all children)
- of a Selection. Not all Selection implementations allow the removal
- of all selections.
- @return True if the selections were successfully cleared, False
- otherwise.
- """
- func = self.get_dbus_method("clearSelection", dbus_interface=ATSPI_SELECTION)
- return func()
-
- def deselectChild(self, childIndex):
- """
- Remove a child from the selected children list of a Selection,
- if the child is currently selected.
- @param : childIndex
- a long integer (the zero offset index into the Accessible object's
- list of children) indicating which child of the Selection is
- to be selected.
- @return True if the child was successfully selected, False otherwise.
- """
- func = self.get_dbus_method("deselectChild", dbus_interface=ATSPI_SELECTION)
- return func(childIndex)
-
- def deselectSelectedChild(self, index):
- """
- Remove a child to the selected children list of a Selection.
- @param : selectedChildIndex
- a long integer indicating which of the selected children of the
- Selection is to be deselected. The index is a zero-offset index
- into the 'selected child list', not a zero-offset index into
- the list of all children of the Selection.
- @return True if the child was successfully deselected, False
- otherwise.
- """
- func = self.get_dbus_method("deselectSelectedChild", dbus_interface=ATSPI_SELECTION)
- return func(index)
-
- def getSelectedChild(self, index):
- """
- Get the i-th selected Accessible child of a Selection.
- @param : selectedChildIndex
- a long integer indicating which of the selected children of an
- object is being requested.
- @return a pointer to a selected Accessible child object, specified
- by selectedChildIndex.
- """
- func = self.get_dbus_method("getSelectedChild", dbus_interface=ATSPI_SELECTION)
- return self._cache.create_accessible(self._app_name, func(index),
- interfaces.ATSPI_ACCESSIBLE)
-
- def isChildSelected(self, index):
- """
- Determine whether a particular child of an Selection implementor
- is currently selected. Note that childIndex is the zero-offset
- index into the standard Accessible container's list of children.
- @param : childIndex
- an index into the Selection's list of children.
- @return True if the specified child is currently selected, False
- otherwise.
- """
- func = self.get_dbus_method("isChildSelected", dbus_interface=ATSPI_SELECTION)
- return func(index)
-
- def selectAll(self):
- """
- Attempt to select all of the children of a Selection implementor.
- Not all Selection implementors support this operation (for instance,
- implementations which support only "single selection" do not
- support this operation).
- @return True if successful, False otherwise.
- """
- func = self.get_dbus_method("selectAll", dbus_interface=ATSPI_SELECTION)
- return func()
-
- def selectChild(self, index):
- """
- Add a child to the selected children list of a Selection.
- @param : childIndex
- a long integer indicating which child of the Selection is to
- be selected.
- @return True if the child was successfully selected, False otherwise.
- """
- func = self.get_dbus_method("selectChild", dbus_interface=ATSPI_SELECTION)
- return func(index)
-
- def get_nSelectedChildren(self):
- return dbus.Int32(self._pgetter(self._dbus_interface, "nSelectedChildren"))
- _nSelectedChildrenDoc = \
- """
- The number of children of a Selection implementor which are currently
- selected.
- """
- nSelectedChildren = property(fget=get_nSelectedChildren, doc=_nSelectedChildrenDoc)
-
-# Register the accessible class with the factory.
-accessible_factory.register_accessible_class(ATSPI_SELECTION, Selection)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/state.py b/pyatspi/state.py
deleted file mode 100644
index fdfb284..0000000
--- a/pyatspi/state.py
+++ /dev/null
@@ -1,256 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-#copyright: Copyright (c) 2005, 2007 IBM Corporation
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-#Portions of this code originally licensed and copyright (c) 2005, 2007
-#IBM Corporation under the BSD license, available at
-#U{http://www.opensource.org/licenses/bsd-license.php}
-
-#authors: Peter Parente, Mark Doffman
-
-from base import Enum as _Enum
-
-#------------------------------------------------------------------------------
-
-class StateType(_Enum):
- _enum_lookup = {
- 0:'STATE_INVALID',
- 1:'STATE_ACTIVE',
- 2:'STATE_ARMED',
- 3:'STATE_BUSY',
- 4:'STATE_CHECKED',
- 5:'STATE_COLLAPSED',
- 6:'STATE_DEFUNCT',
- 7:'STATE_EDITABLE',
- 8:'STATE_ENABLED',
- 9:'STATE_EXPANDABLE',
- 10:'STATE_EXPANDED',
- 11:'STATE_FOCUSABLE',
- 12:'STATE_FOCUSED',
- 13:'STATE_HAS_TOOLTIP',
- 14:'STATE_HORIZONTAL',
- 15:'STATE_ICONIFIED',
- 16:'STATE_MODAL',
- 17:'STATE_MULTI_LINE',
- 18:'STATE_MULTISELECTABLE',
- 19:'STATE_OPAQUE',
- 20:'STATE_PRESSED',
- 21:'STATE_RESIZABLE',
- 22:'STATE_SELECTABLE',
- 23:'STATE_SELECTED',
- 24:'STATE_SENSITIVE',
- 25:'STATE_SHOWING',
- 26:'STATE_SINGLE_LINE',
- 27:'STATE_STALE',
- 28:'STATE_TRANSIENT',
- 29:'STATE_VERTICAL',
- 30:'STATE_VISIBLE',
- 31:'STATE_MANAGES_DESCENDANTS',
- 32:'STATE_INDETERMINATE',
- 33:'STATE_REQUIRED',
- 34:'STATE_TRUNCATED',
- 35:'STATE_ANIMATED',
- 36:'STATE_INVALID_ENTRY',
- 37:'STATE_SUPPORTS_AUTOCOMPLETION',
- 38:'STATE_SELECTABLE_TEXT',
- 39:'STATE_IS_DEFAULT',
- 40:'STATE_VISITED',
- 41:'STATE_LAST_DEFINED',
- }
-
-#------------------------------------------------------------------------------
-
-STATE_ACTIVE = StateType(1)
-STATE_ANIMATED = StateType(35)
-STATE_ARMED = StateType(2)
-STATE_BUSY = StateType(3)
-STATE_CHECKED = StateType(4)
-STATE_COLLAPSED = StateType(5)
-STATE_DEFUNCT = StateType(6)
-STATE_EDITABLE = StateType(7)
-STATE_ENABLED = StateType(8)
-STATE_EXPANDABLE = StateType(9)
-STATE_EXPANDED = StateType(10)
-STATE_FOCUSABLE = StateType(11)
-STATE_FOCUSED = StateType(12)
-STATE_HAS_TOOLTIP = StateType(13)
-STATE_HORIZONTAL = StateType(14)
-STATE_ICONIFIED = StateType(15)
-STATE_INDETERMINATE = StateType(32)
-STATE_INVALID = StateType(0)
-STATE_INVALID_ENTRY = StateType(36)
-STATE_IS_DEFAULT = StateType(39)
-STATE_LAST_DEFINED = StateType(41)
-STATE_MANAGES_DESCENDANTS = StateType(31)
-STATE_MODAL = StateType(16)
-STATE_MULTISELECTABLE = StateType(18)
-STATE_MULTI_LINE = StateType(17)
-STATE_OPAQUE = StateType(19)
-STATE_PRESSED = StateType(20)
-STATE_REQUIRED = StateType(33)
-STATE_RESIZABLE = StateType(21)
-STATE_SELECTABLE = StateType(22)
-STATE_SELECTABLE_TEXT = StateType(38)
-STATE_SELECTED = StateType(23)
-STATE_SENSITIVE = StateType(24)
-STATE_SHOWING = StateType(25)
-STATE_SINGLE_LINE = StateType(26)
-STATE_STALE = StateType(27)
-STATE_SUPPORTS_AUTOCOMPLETION = StateType(37)
-STATE_TRANSIENT = StateType(28)
-STATE_TRUNCATED = StateType(34)
-STATE_VERTICAL = StateType(29)
-STATE_VISIBLE = StateType(30)
-STATE_VISITED = StateType(40)
-
-#------------------------------------------------------------------------------
-
-# Build a dictionary mapping state values to names based on the prefix of the enum constants.
-
-STATE_VALUE_TO_NAME = dict(((value, name[6:].lower().replace('_', ' '))
- for name, value
- in globals().items()
- if name.startswith('STATE_')))
-
-#------------------------------------------------------------------------------
-
-def _marshal_state_set(bitfield):
- """
- The D-Bus protocol has a stateset object passed
- as a 64bit bitfield. The Bits are passed as two 32bit
- integers.
-
- This function marshals the D-Bus message into a
- StateSet object that corresponds to these states.
- """
- (lower, upper) = bitfield
-
- states = []
-
- pos = 0
- while (lower):
- if (1L)&lower:
- states.append(StateType(pos))
- pos+=1
- lower >>= 1
-
- pos = 32
- while (upper):
- if (1L)&upper:
- states.append(StateType(pos))
- pos+=1
- upper >>= 1
-
- return StateSet(*states)
-
-#------------------------------------------------------------------------------
-
-class StateSet(object):
- """
- The StateSet object implements a wrapper around a
- bitmap of Accessible states.
-
- The StateSet object is the instantaneous state of
- the Accessible object and is not updated with its
- container Accessible. This behaviour is different
- to the CORBA version of AT-SPI
- """
- def __init__(self, *states):
- """
- Initializes the state set with the given states.
-
- @param states: States to add immediately
- @type states: list
- """
- self.states = set()
- map(self.add, states)
-
- def contains(self, state):
- """
- Checks if this StateSet contains the given state.
-
- @param state: State to check
- @type state: Accessibility.StateType
- @return: True if the set contains the given state
- @rtype: boolean
- """
- return state in self.states
-
- def add(self, *states):
- """
- Adds states to this set.
-
- @param states: State(s) to add
- @type states: Accessibility.StateType
- """
- for state in states:
- self.states.add(state)
-
- def remove(self, state):
- """
- Removes states from this set.
-
- @param states: State(s) to remove
- @type states: Accessibility.StateType
- """
- self.states.remove(state)
-
- def equals(self, state_set):
- """
- Checks if this StateSet contains exactly the same members as the given
- StateSet.
-
- @param state_set: Another set
- @type state_set: Accessibility.StateSet
- @return: Are the sets equivalent in terms of their contents?
- @rtype: boolean
- """
- return set(state_set.getStates()) == self.states
-
- def compare(self, state_set):
- """
- Finds the symmetric difference between this state set andthe one provided,
- and returns it as a new StateSet.
-
- @note: This does not use L{_StateSetImpl.compare} which cannot be
- implemented at this time
- @param state_set: Set to compare against
- @type state_set: Accessibility.StateSet
- @return: Proxy for the new set
- @rtype: L{StateSet}
- """
- a = set(self.getStates())
- b = set(state_set.getStates())
- diff = a.symmetric_difference(b)
- return StateSet(*diff)
-
- def isEmpty(self):
- """
- Checks if this StateSet is empty.
-
- @return: Is it empty?
- @rtype: boolean
- """
- return len(self.states) == 0
-
- def getStates(self):
- """
- Gets the sequence of all states in this set.
-
- @return: List of states
- @rtype: list
- """
- return list(self.states)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/table.py b/pyatspi/table.py
deleted file mode 100644
index dd8879f..0000000
--- a/pyatspi/table.py
+++ /dev/null
@@ -1,376 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from interfaces import *
-from accessible import Accessible
-from factory import accessible_factory
-
-import dbus
-
-__all__ = [
- "Table",
- ]
-
-#------------------------------------------------------------------------------
-
-class Table(Accessible):
- """
- An interface used by containers whose contained data is arranged
- in a "tabular" (i.e. row-column) fashion. Tables may resemble
- a two-dimensional grid, as in a spreadsheet, or may feature objects
- which span multiple rows and/or columns, but whose bounds are
- aligned on a row/column matrix. Thus, the Table interface may
- be used to represent "spreadsheets" as well as "frames".
- Objects within tables are children of the Table instance, and
- they may be referenced either via a child index or via a row/column
- pair. Their role may be ROLE_TABLE_CELL, but table 'cells' may
- have other roles as well. These 'cells' may implement other interfaces,
- such as Text, Action, Image, and Component, and should do so
- as appropriate to their onscreen representation and/or behavior.
- """
-
- def addColumnSelection(self, column):
- """
- Select the specified column, adding it to the current column
- selection, if the table's selection model permits it.
- @param : column
- @return True if the specified column was successfully selected,
- False if not.
- """
- func = self.get_dbus_method("addColumnSelection", dbus_interface=ATSPI_TABLE)
- return func(column)
-
- def addRowSelection(self, row):
- """
- Select the specified row, adding it to the current row selection,
- if the table's selection model permits it.
- @param : row
- @return True if the specified row was successfully selected,
- False if not.
- """
- func = self.get_dbus_method("addRowSelection", dbus_interface=ATSPI_TABLE)
- return func(row)
-
- def getAccessibleAt(self, row, column):
- """
- Get the table cell at the specified row and column indices.
- @param : row
- the specified table row, zero-indexed.
- @param : column
- the specified table column, zero-indexed.
- @return an Accessible object representing the specified table
- cell.
- """
- func = self.get_dbus_method("getAccessibleAt", dbus_interface=ATSPI_TABLE)
- return self._cache.create_accessible(self._app_name, func(row, column),
- interfaces.ATSPI_ACCESSIBLE)
-
- def getColumnAtIndex(self, index):
- """
- Get the table column index occupied by the child at a particular
- 1-D child index.
- @param : index
- the specified child index, zero-indexed.
- @return a long integer indicating the first column spanned by
- the child of a table, at the specified 1-D (zero-offset) index.
- """
- func = self.get_dbus_method("getColumnAtIndex", dbus_interface=ATSPI_TABLE)
- return func(index)
-
- def getColumnDescription(self, column):
- """
- Get a text description of a particular table column. This differs
- from AccessibleTable_getColumnHeader, which returns an Accessible.
- @param : column
- the specified table column, zero-indexed.
- @return a UTF-8 string describing the specified table column,
- if available.
- """
- func = self.get_dbus_method("getColumnDescription", dbus_interface=ATSPI_TABLE)
- return func(column)
-
- def getColumnExtentAt(self, row, column):
- """
- Get the number of columns spanned by the table cell at the specific
- row and column. (some tables can have cells which span multiple
- rows and/or columns).
- @param : row
- the specified table row, zero-indexed.
- @param : column
- the specified table column, zero-indexed.
- @return a long integer indicating the number of columns spanned
- by the specified cell.
- """
- func = self.get_dbus_method("getColumnExtentAt", dbus_interface=ATSPI_TABLE)
- return func(row, column)
-
- def getColumnHeader(self, index):
- """
- Get the header associated with a table column, if available,
- as an instance of Accessible. This differs from getColumnDescription,
- which returns a string.
- @param : column
- the specified table column, zero-indexed.
- @return an Accessible representatin of the specified table column,
- if available.
- """
- func = self.get_dbus_method("getColumnHeader", dbus_interface=ATSPI_TABLE)
- return self._cache.create_accessible(self._app_name, func(index),
- interfaces.ATSPI_ACCESSIBLE)
-
- def getIndexAt(self, row, column):
- """
- Get the 1-D child index corresponding to the specified 2-D row
- and column indices.
- @param : row
- the specified table row, zero-indexed.
- @param : column
- the specified table column, zero-indexed.
- @return a long integer which serves as the index of a specified
- cell in the table, in a form usable by Accessible::getChildAtIndex.
- """
- func = self.get_dbus_method("getIndexAt", dbus_interface=ATSPI_TABLE)
- return func(row, column)
-
- def getRowAtIndex(self, index):
- """
- Get the table row index occupied by the child at a particular
- 1-D child index.
- @param : index
- the specified child index, zero-indexed.
- @return a long integer indicating the first row spanned by the
- child of a table, at the specified 1-D (zero-offset) index.
- """
- func = self.get_dbus_method("getRowAtIndex", dbus_interface=ATSPI_TABLE)
- return func(index)
-
- def getRowColumnExtentsAtIndex(self, index):
- """
- Given a child index, determine the row and column indices and
- extents, and whether the cell is currently selected. If the child
- at index is not a cell (for instance, if it is a summary, caption,
- etc.), False is returned.
- @param : index
- the index of the Table child whose row/column extents are requested.
- @param : row
- back-filled with the first table row associated with the cell
- with child index index.
- @param : col
- back-filled with the first table column associated with the cell
- with child index index.
- @param : row_extents
- back-filled with the number of table rows across which child
- i extends.
- @param : col_extents
- back-filled with the number of table columns across which child
- i extends.
- @param : is_selected
- a boolean which is back-filled with True if the child at index
- i corresponds to a selected table cell, False otherwise.
- Example: If the Table child at index '6' extends across columns
- 5 and 6 of row 2 of a Table instance, and is currently selected,
- then retval=table::getRowColumnExtentsAtIndex(6,row,col,
- row_extents,
- col_extents,
- is_selected);
- will return True, and after the call row, col, row_extents,
- col_extents, and is_selected will contain 2, 5, 1, 2, and True,
- respectively.
- @return True if the index is associated with a valid table cell,
- False if the index does not correspond to a cell. If False is
- returned, the values of the out parameters are undefined.
- """
- func = self.get_dbus_method("getRowColumnExtentsAtIndex", dbus_interface=ATSPI_TABLE)
- return func(index)
-
- def getRowDescription(self, index):
- """
- Get a text description of a particular table row. This differs
- from AccessibleTable_getRowHeader, which returns an Accessible.
- @param : row
- the specified table row, zero-indexed.
- @return a UTF-8 string describing the specified table row, if
- available.
- """
- func = self.get_dbus_method("getRowDescription", dbus_interface=ATSPI_TABLE)
- return func(index)
-
- def getRowExtentAt(self, row, column):
- """
- Get the number of rows spanned by the table cell at the specific
- row and column. (some tables can have cells which span multiple
- rows and/or columns).
- @param : row
- the specified table row, zero-indexed.
- @param : column
- the specified table column, zero-indexed.
- @return a long integer indicating the number of rows spanned
- by the specified cell.
- """
- func = self.get_dbus_method("getRowExtentAt", dbus_interface=ATSPI_TABLE)
- return func(row, column)
-
- def getRowHeader(self, row):
- """
- Get the header associated with a table row, if available. This
- differs from getRowDescription, which returns a string.
- @param : row
- the specified table row, zero-indexed.
- @return an Accessible representatin of the specified table row,
- if available.
- """
- func = self.get_dbus_method("getRowHeader", dbus_interface=ATSPI_TABLE)
- return self._cache.create_accessible(self._app_name, func(row),
- interfaces.ATSPI_ACCESSIBLE)
-
- def getSelectedColumns(self):
- """
- Obtain the indices of all columns which are currently selected.
- @return a sequence of integers comprising the indices of columns
- currently selected.
- """
- func = self.get_dbus_method("getSelectedColumns", dbus_interface=ATSPI_TABLE)
- return func()
-
- def getSelectedRows(self):
- """
- Obtain the indices of all rows which are currently selected.
- @return a sequence of integers comprising the indices of rows
- currently selected.
- """
- func = self.get_dbus_method("getSelectedRows", dbus_interface=ATSPI_TABLE)
- return func()
-
- def isColumnSelected(self, column):
- """
- Determine whether a table column is selected.
- @param : column
- the column being queried.
- @return True if the specified column is currently selected, False
- if not.
- """
- func = self.get_dbus_method("isColumnSelected", dbus_interface=ATSPI_TABLE)
- return func(column)
-
- def isRowSelected(self, row):
- """
- Determine whether a table row is selected.
- @param : row
- the row being queried.
- @return True if the specified row is currently selected, False
- if not.
- """
- func = self.get_dbus_method("isRowSelected", dbus_interface=ATSPI_TABLE)
- return func(row)
-
- def isSelected(self, row, column):
- """
- Determine whether the cell at a specific row and column is selected.
- @param : row
- a row occupied by the cell whose state is being queried.
- @param : column
- a column occupied by the cell whose state is being queried.
- @return True if the specified cell is currently selected, False
- if not.
- """
- func = self.get_dbus_method("isSelected", dbus_interface=ATSPI_TABLE)
- return func(row, column)
-
- def removeColumnSelection(self, column):
- """
- Remove the specified column from current column selection, if
- the table's selection model permits it.
- @param : column
- @return True if the specified column was successfully de-selected,
- False if not.
- """
- func = self.get_dbus_method("removeColumnSelection", dbus_interface=ATSPI_TABLE)
- return func(column)
-
- def removeRowSelection(self, row):
- """
- Remove the specified row from current row selection, if the table's
- selection model permits it.
- @param : row
- @return True if the specified row was successfully de-selected,
- False if not.
- """
- func = self.get_dbus_method("removeRowSelection", dbus_interface=ATSPI_TABLE)
- return func(row)
-
- def get_caption(self):
- accessible = self._pgetter(self._dbus_interface, "caption")
- return self._cache.create_accessible(self._app_name, accessible,
- interfaces.ATSPI_ACCESSIBLE)
- _captionDoc = \
- """
- An Accessible which represents of a caption for a Table.
- """
- caption = property(fget=get_caption, doc=_captionDoc)
-
- def get_nColumns(self):
- return dbus.Int32(self._pgetter(self._dbus_interface, "nColumns"))
- _nColumnsDoc = \
- """
- The total number of columns in this table (including empty columns),
- exclusive of columns which are programmatically hidden. Columns
- which are scrolled out of view or clipped by the current viewport
- are included.
- """
- nColumns = property(fget=get_nColumns, doc=_nColumnsDoc)
-
- def get_nRows(self):
- return dbus.Int32(self._pgetter(self._dbus_interface, "nRows"))
- _nRowsDoc = \
- """
- The total number of rows in this table (including empty rows),
- exclusive of any rows which are programmatically hidden. Rows
- which are merely scrolled out of view are included.
- """
- nRows = property(fget=get_nRows, doc=_nRowsDoc)
-
- def get_nSelectedColumns(self):
- return dbus.Int32(self._pgetter(self._dbus_interface, "nSelectedColumns"))
- _nSelectedColumnsDoc = \
- """
- The number of columns currently selected. A selected column is
- one in which all included cells are selected.
- """
- nSelectedColumns = property(fget=get_nSelectedColumns, doc=_nSelectedColumnsDoc)
-
- def get_nSelectedRows(self):
- return dbus.Int32(self._pgetter(self._dbus_interface, "nSelectedRows"))
- _nSelectedRowsDoc = \
- """
- The number of rows currently selected. A selected row is one
- in which all included cells are selected.
- """
- nSelectedRows = property(fget=get_nSelectedRows, doc=_nSelectedRowsDoc)
-
- def get_summary(self):
- accessible = self._pgetter(self._dbus_interface, "summary")
- return self._cache.create_accessible(self._app_name, accessible,
- interfaces.ATSPI_ACCESSIBLE)
- _summaryDoc = \
- """
- An accessible object which summarizes the contents of a Table.
- This object is frequently itself a Table instance, albeit a simplified
- one.
- """
- summary = property(fget=get_summary, doc=_summaryDoc)
-
-# Register the accessible class with the factory.
-accessible_factory.register_accessible_class(ATSPI_TABLE, Table)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/text.py b/pyatspi/text.py
deleted file mode 100644
index 7b55ef7..0000000
--- a/pyatspi/text.py
+++ /dev/null
@@ -1,592 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-import dbus
-
-from interfaces import *
-from accessible import Accessible
-from base import Enum
-from factory import accessible_factory
-
-from dbus.types import UInt32
-
-__all__ = [
- "Text",
- "TEXT_BOUNDARY_TYPE",
- "TEXT_BOUNDARY_CHAR",
- "TEXT_BOUNDARY_WORD_START",
- "TEXT_BOUNDARY_WORD_END",
- "TEXT_BOUNDARY_SENTENCE_START",
- "TEXT_BOUNDARY_SENTENCE_END",
- "TEXT_BOUNDARY_LINE_START",
- "TEXT_BOUNDARY_LINE_END",
- "TEXT_CLIP_TYPE",
- "TEXT_CLIP_NONE",
- "TEXT_CLIP_MIN",
- "TEXT_CLIP_MAX",
- "TEXT_CLIP_BOTH",
- ]
-
-#------------------------------------------------------------------------------
-
-class TEXT_BOUNDARY_TYPE(Enum):
- _enum_lookup = {
- 0:'TEXT_BOUNDARY_CHAR',
- 1:'TEXT_BOUNDARY_WORD_START',
- 2:'TEXT_BOUNDARY_WORD_END',
- 3:'TEXT_BOUNDARY_SENTENCE_START',
- 4:'TEXT_BOUNDARY_SENTENCE_END',
- 5:'TEXT_BOUNDARY_LINE_START',
- 6:'TEXT_BOUNDARY_LINE_END',
- }
-
-TEXT_BOUNDARY_CHAR = TEXT_BOUNDARY_TYPE(0)
-TEXT_BOUNDARY_LINE_END = TEXT_BOUNDARY_TYPE(6)
-TEXT_BOUNDARY_LINE_START = TEXT_BOUNDARY_TYPE(5)
-TEXT_BOUNDARY_SENTENCE_END = TEXT_BOUNDARY_TYPE(4)
-TEXT_BOUNDARY_SENTENCE_START = TEXT_BOUNDARY_TYPE(3)
-TEXT_BOUNDARY_WORD_END = TEXT_BOUNDARY_TYPE(2)
-TEXT_BOUNDARY_WORD_START = TEXT_BOUNDARY_TYPE(1)
-
-#------------------------------------------------------------------------------
-
-class TEXT_CLIP_TYPE(Enum):
- _enum_lookup = {
- 0:'TEXT_CLIP_NONE',
- 1:'TEXT_CLIP_MIN',
- 2:'TEXT_CLIP_MAX',
- 3:'TEXT_CLIP_BOTH',
- }
-
-TEXT_CLIP_BOTH = TEXT_CLIP_TYPE(3)
-TEXT_CLIP_MAX = TEXT_CLIP_TYPE(2)
-TEXT_CLIP_MIN = TEXT_CLIP_TYPE(1)
-TEXT_CLIP_NONE = TEXT_CLIP_TYPE(0)
-
-#------------------------------------------------------------------------------
-
-class Text(Accessible):
- """
- The text interface should be implemented by objects which place
- textual information onscreen as character strings or glyphs.
- The text interface allows access to textual content, including
- display attributes and semantic hints associated with runs of
- text, and access to bounding box information for glyphs and substrings.
- It also allows portions of textual content to be selected, if
- the object's StateSet includes STATE_SELECTABLE_TEXT.
- In some cases a Text object may have, as its content, an empty
- string. In particular this can occur in the case of Hypertext
- objects which do not display explicitly textual information onscreen,
- as Hypertext is derived from the Text interface.
- Typographic and semantic attributes of onscreen textual content,
- for instance typeface, weight, language, and such qualities as
- 'emphasis' or 'blockquote', are represented as text attributes.
- Contiguous sequences of characters over which these attributes
- are unchanged are referred to as "attribute runs", and are available
- via Text::getAttributeRun. Where possible, implementing clients
- will report textual attributes which are the same over the entire
- text object, for instance those inherited from a default or document-scope
- style, via getDefaultAttributes instead of reporting them explicitly
- for each character. Therefore, for any span of text, the attributes
- in effect are the union of the set returned by Text::getDefaultAttributes,
- and the set returned at a particular character offset via Text::getAttributeRun.
- """
-
- def addSelection(self, index):
- """
- The result of calling addSelection on objects which already have
- one selection present, and which do not include STATE_MULTISELECTABLE,
- is undefined, other than the return value.
- @return True of the selection was successfully added, False otherwise.
- Selection may fail if the object does not support selection of
- text (see STATE_SELECTABLE_TEXT), if the object does not support
- multiple selections and a selection is already defined, or for
- other reasons (for instance if the user does not have permission
- to copy the text into the relevant selection buffer).
- """
- func = self.get_dbus_method("addSelection", dbus_interface=ATSPI_TEXT)
- return func(index)
-
- def getAttributeRun(self, offset):
- """
- Query a particular text object for the text attributes defined
- at a given offset, obtaining the start and end of the "attribute
- run" over which these attributes are currently invariant. Text
- attributes are those presentational, typographic, or semantic
- attributes or qualitites which apply to a range of text specifyable
- by starting and ending offsets. Attributes relevant to localization
- should be provided in accordance with the w3c "Internationalization
- and Localization Markup Requirements", http://www.w3.org/TR/2005/WD-itsreq-20051122/
- Other text attributes should choose their names and value semantics
- in accordance with relevant standards such as CSS level 2 (http://www.w3.org/TR/1998/REC-CSS2-19980512),
- XHTML 1.0 (http://www.w3.org/TR/2002/REC-xhtml1-20020801), and
- WICD (http://www.w3.org/TR/2005/WD-WICD-20051121/). Those attributes
- from the aforementioned specifications and recommendations which
- do not concern typographic, presentational, or semantic aspects
- of text should be exposed via the more general Accessible::getAttributes()
- API (if at all).
- For example, CSS attributes which should be exposed on text (either
- as default attributes, or as explicitly-set attributes when non-default
- values are specified in the content view) include the Font attributes
- (i.e. "css2:font-weight", "css2:font-style"), the "css2:color"
- and "css2:background-color" attributes, and "css2:text-decoration"
- attribute.
- If includeDefaults is TRUE, then this AttributeSet should include
- the default attributes as well as those which are explicitly
- assigned to the attribute run in question. startOffset and endOffset
- will be back-filled to indicate the start and end of the attribute
- run which contains 'offset' - an attribute run is a contiguous
- section of text whose attributes are homogeneous.
- @param : offset
- the offset of the character whose attributes will be reported.
- @param : startOffset
- backfilled with the starting offset of the character range over
- which all text attributes match those of offset, i.e. the start
- of the homogeneous attribute run including offset.
- @param : endOffset
- backfilled with the offset of the first character past the character
- range over which all text attributes match those of offset, i.e.
- the character immediately after the homogeneous attribute run
- including offset.
- @param : includeDefaults
- if False, the call should only return those attributes which
- are explicitly set on the current attribute run, omitting any
- attributes which are inherited from the default values. See also
- Text::getDefaultAttributes.
- @return the AttributeSet defined at offset, optionally including
- the 'default' attributes.
- """
- func = self.get_dbus_method("getAttributeRun", dbus_interface=ATSPI_TEXT)
- [attrs, startOffset, endOffset] = func(offset, includeDefaults)
- dict = [key + ':' + value for key, value in attrs.values()]
- return [dict, startOffset, endOffset]
-
- def getAttributeValue(self, offset, attributeName):
- """
- Get the string value of a named attribute at a given offset,
- if defined.
- @param : offset
- the offset of the character for which the attribute run is to
- be obtained.
- @param : attributeName
- the name of the attribute for which the value is to be returned,
- if defined.
- @param : startOffset
- back-filled with the offset of the first character in the attribute
- run containing the character at offset.
- @param : endOffset
- back-filled with the offset of the first character past the end
- of the attribute run containing the character at offset.
- @param : defined
- back-filled with True if the attributeName has a defined value
- at offset, False otherwise.
- @return the value of attribute (name-value pair) corresponding
- to "name", if defined.
- """
- func = self.get_dbus_method("getAttributeValue", dbus_interface=ATSPI_TEXT)
- return func(offset, attributeName)
-
- def getAttributes(self, offset):
- """
- getAttributes is deprecated in favor of getAttributeRun.
- @return the attributes at offset, as a semicolon-delimited set
- of colon-delimited name-value pairs.
- """
- func = self.get_dbus_method("getAttributes", dbus_interface=ATSPI_TEXT)
- [attrs, startOffset, endOffset] = func(dbus.Int32(offset))
- dict = [key + ':' + value for key, value in attrs]
- return [dict, startOffset, endOffset]
-
- def getBoundedRanges(self, x, y, width, height, coordType, xClipType, yClipType):
- #TODO Return a list of range structures
- """
- Return the text content within a bounding box, as a list of Range
- structures. Depending on the TEXT_CLIP_TYPE parameters, glyphs
- which are clipped by the bounding box (i.e. which lie partially
- inside and partially outside it) may or may not be included in
- the ranges returned.
- @param : x
- the minimum x ( i.e. leftmost) coordinate of the bounding box.
- @param : y
- the minimum y coordinate of the bounding box.
- @param : width
- the horizontal size of the bounding box. The rightmost bound
- of the bounding box is (x + width);
- @param : height
- the vertical size of the bounding box. The maximum y value of
- the bounding box is (y + height);
- @param : coordType
- If 0, the above coordinates are interpreted as pixels relative
- to corner of the screen; if 1, the coordinates are interpreted
- as pixels relative to the corner of the containing toplevel window.
- @param : xClipType
- determines whether text which intersects the bounding box in
- the x direction is included.
- @param : yClipType
- determines whether text which intersects the bounding box in
- the y direction is included.
- """
- func = self.get_dbus_method("getBoundedRanges", dbus_interface=ATSPI_TEXT)
- return func(x, y, width, height, UInt32(coordType), xClipType, yClipType)
-
- def getCharacterAtOffset(self, offset):
- """
- @param : offset
- position
- @return an unsigned long integer whose value corresponds to the
- UCS-4 representation of the character at the specified text offset,
- or 0 if offset is out of range.
- """
- func = self.get_dbus_method("getCharacterAtOffset", dbus_interface=ATSPI_TEXT)
- return func(offset)
-
- def getCharacterExtents(self, offset, x, y, width, height, coordType):
- """
- Obtain a the bounding box, as x, y, width, and height, of the
- character or glyph at a particular character offset in this object's
- text content. The coordinate system in which the results are
- reported is specified by coordType. If an onscreen glyph corresponds
- to multiple character offsets, for instance if the glyph is a
- ligature, the bounding box reported will include the entire glyph
- and therefore may apply to more than one character offset.
- @param : offset
- the character offset of the character or glyph being queried.
- @param : x
- the minimum horizontal coordinate of the bounding box of the
- glyph representing the character at offset.
- @param : y
- the minimum vertical coordinate of the bounding box of the glyph
- representing the character at offset.
- @param : width
- the horizontal extent of the bounding box of the glyph representing
- the character at offset.
- @param : height
- the vertical extent of the bounding box of the glyph representing
- the character at offset.
- @param : coordType
- If 0, the results will be reported in screen coordinates, i.e.
- in pixels relative to the upper-left corner of the screen, with
- the x axis pointing right and the y axis pointing down. If 1,
- the results will be reported relative to the containing toplevel
- window, with the x axis pointing right and the y axis pointing
- down.
- """
- func = self.get_dbus_method("getCharacterExtents", dbus_interface=ATSPI_TEXT)
- return func(offset, x, y, width, height, UInt32(coordType))
-
- def getDefaultAttributeSet(self):
- """
- Return an AttributeSet containing the text attributes which apply
- to all text in the object by virtue of the default settings of
- the document, view, or user agent; e.g. those attributes which
- are implied rather than explicitly applied to the text object.
- For instance, an object whose entire text content has been explicitly
- marked as 'bold' will report the 'bold' attribute via getAttributeRun(),
- whereas an object whose text weight is inspecified may report
- the default or implied text weight in the default AttributeSet.
- """
- func = self.get_dbus_method("getDefaultAttributeSet", dbus_interface=ATSPI_TEXT)
- return [key + ':' + value for key, value in func().values()]
-
- def getDefaultAttributes(self):
- """
- Deprecated in favor of getDefaultAttributeSet.
- @return the attributes which apply to the entire text content,
- but which were not explicitly specified by the content creator.
- """
- func = self.get_dbus_method("getDefaultAttributes", dbus_interface=ATSPI_TEXT)
- return ';'.join([key + ':' + value for key, value in func().iteritems()])
-
- def getNSelections(self):
- """
- Obtain the number of separate, contiguous selections in the current
- Text object. Text objects which do not implement selection of
- discontiguous text regions will always return '0' or '1'. Note
- that "contiguous" is defined by continuity of the offsets, i.e.
- a text 'selection' is defined by a start/end offset pair. In
- the case of bidirectional text, this means that a continguous
- selection may appear visually discontiguous, and vice-versa.
- @return the number of contiguous selections in the current Text
- object.
- """
- func = self.get_dbus_method("getNSelections", dbus_interface=ATSPI_TEXT)
- return func()
-
- def getOffsetAtPoint(self, x, y, coordType):
- """
- Get the offset of the character at a given onscreen coordinate.
- The coordinate system used to interpret x and y is determined
- by parameter coordType.
- @param : x
- @param : y
- @param : coordType
- if 0, the input coordinates are interpreted relative to the entire
- screen, if 1, they are relative to the toplevel window containing
- this Text object.
- @return the text offset (as an offset into the character array)
- of the glyph whose onscreen bounds contain the point x,y, or
- -1 if the point is outside the bounds of any glyph.
- """
- func = self.get_dbus_method("getOffsetAtPoint", dbus_interface=ATSPI_TEXT)
- return func(x, y, UInt32(coordType))
-
- def getRangeExtents(self, startOffset, endOffset, coordType):
- """
- Obtain the bounding box which entirely contains a given text
- range. Negative values may be returned for the bounding box parameters
- in the event that all or part of the text range is offscreen
- or not mapped to the screen.
- @param : startOffset
- the offset of the first character in the specified range.
- @param : endOffset
- the offset of the character immediately after the last character
- in the specified range.
- @param : x
- an integer parameter which is back-filled with the minimum horizontal
- coordinate of the resulting bounding box.
- @param : y
- an integer parameter which is back-filled with the minimum vertical
- coordinate of the resulting bounding box.
- @param : width
- an integer parameter which is back-filled with the horizontal
- extent of the bounding box.
- @param : height
- an integer parameter which is back-filled with the vertical extent
- of the bounding box.
- @param : coordType
- If 0, the above coordinates are reported in pixels relative to
- corner of the screen; if 1, the coordinates are reported relative
- to the corner of the containing toplevel window.
- """
- func = self.get_dbus_method("getRangeExtents", dbus_interface=ATSPI_TEXT)
- return func(startOffset, endOffset, UInt32(coordType))
-
- def getSelection(self, selectionNum):
- """
- The result of calling getSelection with an out-of-range selectionNum
- (i.e. for a selection which does not exist) is not strictly defined,
- but should set endOffset equal to startOffset.
- @param : selectionNum
- indicates which of a set of non-contiguous selections to modify.
- @param : startOffset
- back-filled with the starting offset of the resulting substring,
- if one exists.
- @param : endOffset
- back-filled with the offset of the character immediately following
- the resulting substring, if one exists.
- """
- func = self.get_dbus_method("getSelection", dbus_interface=ATSPI_TEXT)
- return func(selectionNum)
-
- def getText(self, startOffset, endOffset):
- """
- Obtain all or part of the onscreen textual content of a Text
- object. If endOffset is specified as "-1", then this method will
- return the entire onscreen textual contents of the Text object.
- @param : startOffset
- back-filled with the starting offset of the resulting substring,
- if one exists.
- @param : endOffset
- back-filled with the offset of the character immediately following
- the resulting substring, if one exists.
- @return the textual content of the current Text object beginning
- startOffset (inclusive) up to but not including the character
- at endOffset.
- """
- func = self.get_dbus_method("getText", dbus_interface=ATSPI_TEXT)
- if not endOffset:
- endOffset = -1
- return func(dbus.Int32(startOffset), dbus.Int32(endOffset))
-
- def getTextAfterOffset(self, offset, type):
- """
- Obtain a subset of the text content of an object which entirely
- follows offset, delimited by character, word, line, or sentence
- boundaries as specified by type. The starting and ending offsets
- of the resulting substring are returned in startOffset and endOffset.
- By definition, if such a substring exists, startOffset must be
- greater than offset.
- @param : offset
- the offset from which the substring search begins, and which
- must lie before the returned substring.
- @param : type
- the text-boundary delimiter which determines whether the returned
- text constitures a character, word, line, or sentence (and possibly
- attendant whitespace), and whether the start or ending of such
- a substring forms the boundary condition.
- @param : startOffset
- back-filled with the starting offset of the resulting substring,
- if one exists.
- @param : endOffset
- back-filled with the offset of the character immediately following
- the resulting substring, if one exists.
- @return a string which is a substring of the text content of
- the object, delimited by the specified boundary condition.
- """
- func = self.get_dbus_method("getTextAfterOffset", dbus_interface=ATSPI_TEXT)
- return func(offset, type)
-
- def getTextAtOffset(self, offset, type):
- """
- Obtain a subset of the text content of an object which includes
- the specified offset, delimited by character, word, line, or
- sentence boundaries as specified by type. The starting and ending
- offsets of the resulting substring are returned in startOffset
- and endOffset.
- @param : offset
- the offset from which the substring search begins, and which
- must lie within the returned substring.
- @param : type
- the text-boundary delimiter which determines whether the returned
- text constitures a character, word, line, or sentence (and possibly
- attendant whitespace), and whether the start or ending of such
- a substring forms the boundary condition.
- @param : startOffset
- back-filled with the starting offset of the resulting substring,
- if one exists.
- @param : endOffset
- back-filled with the offset of the character immediately following
- the resulting substring, if one exists.
- @return a string which is a substring of the text content of
- the object, delimited by the specified boundary condition.
- """
- func = self.get_dbus_method("getTextAtOffset", dbus_interface=ATSPI_TEXT)
- return func(offset, type)
-
- def getTextBeforeOffset(self, offset, type):
- """
- Obtain a subset of the text content of an object which entirely
- precedes offset, delimited by character, word, line, or sentence
- boundaries as specified by type. The starting and ending offsets
- of the resulting substring are returned in startOffset and endOffset.
- By definition, if such a substring exists, endOffset is less
- than or equal to offset.
- @param : offset
- the offset from which the substring search begins.
- @param : type
- the text-boundary delimiter which determines whether the returned
- text constitures a character, word, line, or sentence (and possibly
- attendant whitespace), and whether the start or ending of such
- a substring forms the boundary condition.
- @param : startOffset
- back-filled with the starting offset of the resulting substring,
- if one exists.
- @param : endOffset
- back-filled with the offset of the character immediately following
- the resulting substring, if one exists.
- @return a string which is a substring of the text content of
- the object, delimited by the specified boundary condition.
- """
- func = self.get_dbus_method("getTextBeforeOffset", dbus_interface=ATSPI_TEXT)
- return func(offset, type)
-
- def removeSelection(self, selectionNum):
- """
- Deselect the text contained in the specified selectionNum, if
- such a selection exists, otherwise do nothing. Removal of a non-existant
- selectionNum has no effect.
- @param : selectionNum
- indicates which of a set of non-contiguous selections to modify.
- @return True if the selection was successfully removed, False
- otherwise.
- """
- func = self.get_dbus_method("removeSelection", dbus_interface=ATSPI_TEXT)
- return func(selectionNum)
-
- def setCaretOffset(self, offset):
- """
- Programmatically move the text caret (visible or virtual, as
- above) to a given position.
- @param : offset
- a long int indicating the desired character offset. Not all implementations
- of Text will honor setCaretOffset requests, so the return value
- below should be checked by the client.
- @return TRUE if the request was carried out, or FALSE if the
- caret could not be moved to the requested position.
- """
- func = self.get_dbus_method("setCaretOffset", dbus_interface=ATSPI_TEXT)
- return func(offset)
-
- def setSelection(self, selectionNum, startOffset, endOffset):
- """
- Modify an existing selection's start or ending offset.
- Calling setSelection for a selectionNum that is not already defined
- has no effect. The result of calling setSelection with a selectionNum
- greater than 0 for objects that do not include STATE_MULTISELECTABLE
- is undefined.
- @param : selectionNum
- indicates which of a set of non-contiguous selections to modify.
- @param : startOffset
- the new starting offset for the selection
- @param : endOffset
- the new ending offset for the selection
- @return True if the selection corresponding to selectionNum is
- successfully modified, False otherwise.
- """
- func = self.get_dbus_method("setSelection", dbus_interface=ATSPI_TEXT)
- return func(selectionNum, startOffset, endOffset)
-
- def get_caretOffset(self):
- return dbus.Int32(self._pgetter(self._dbus_interface, "caretOffset"))
- _caretOffsetDoc = \
- """
- The current offset of the text caret in the Text object. This
- caret may be virtual, e.g. non-visual and notional-only, but
- if an onscreen representation of the caret position is visible,
- it will correspond to this offset. The caret offset is given
- as a character offset, as opposed to a byte offset into a text
- buffer or a column offset.
- """
- caretOffset = property(fget=get_caretOffset, doc=_caretOffsetDoc)
-
- def get_characterCount(self):
- return dbus.Int32(self._pgetter(self._dbus_interface, "characterCount"))
- _characterCountDoc = \
- """
- The total current number of characters in the Text object, including
- whitespace and non-spacing characters.
- """
- characterCount = property(fget=get_characterCount, doc=_characterCountDoc)
-
- class Range(list):
- def __new__(cls, startOffset, endOffset, content, data):
- list.__new__(cls, (startOffset, endOffset, content, data))
- def __init__(self, startOffset, endOffset, content, data):
- list.__init__(self, (startOffset, endOffset, content, data))
-
- def _get_startOffset(self):
- return self[0]
- def _set_startOffset(self, val):
- self[0] = val
- startOffset = property(fget=_get_startOffset, fset=_set_startOffset)
- def _get_endOffset(self):
- return self[1]
- def _set_endOffset(self, val):
- self[1] = val
- endOffset = property(fget=_get_endOffset, fset=_set_endOffset)
- def _get_content(self):
- return self[2]
- def _set_content(self, val):
- self[2] = val
- content = property(fget=_get_content, fset=_set_content)
- def _get_data(self):
- return self[3]
- def _set_data(self, val):
- self[3] = val
- data = property(fget=_get_data, fset=_set_data)
-
-# Register the accessible class with the factory.
-accessible_factory.register_accessible_class(ATSPI_TEXT, Text)
-
-#END----------------------------------------------------------------------------
diff --git a/pyatspi/utils.py b/pyatspi/utils.py
deleted file mode 100644
index 61cad1e..0000000
--- a/pyatspi/utils.py
+++ /dev/null
@@ -1,331 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-#copyright: Copyright (c) 2005, 2007 IBM Corporation
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-#Portions of this code originally licensed and copyright (c) 2005, 2007
-#IBM Corporation under the BSD license, available at
-#U{http://www.opensource.org/licenses/bsd-license.php}
-
-#authors: Peter Parente, Mark Doffman
-
-import relation
-import state
-import registry
-
-__all__ = [
- "setCacheLevel",
- "getCacheLevel",
- "clearCache",
- "printCache",
- "getInterfaceIID",
- "getInterfaceName",
- "listInterfaces",
- "stringToConst",
- "stateToString",
- "relationToString",
- "allModifiers",
- "findDescendant",
- "findAllDescendants",
- "findAncestor",
- "getPath",
- ]
-
-def setCacheLevel(level):
- pass
-
-def getCacheLevel():
- return None
-
-def clearCache():
- pass
-
-def printCache():
- print "Print cache function is deprecated";
-
-def getInterfaceIID(obj):
- """
- Gets the ID of an interface class or object in string format for use in
- queryInterface.
-
- @param obj: Class representing an AT-SPI interface or instance
- @type obj: object
- @return: IID for the interface
- @rtype: string
- @raise AttributeError: When the parameter does not provide typecode info
-
- WARNING!! DEPRECATED!!
-
- In current D-Bus version of pyatspi this simply returns a null string.
- """
- return ""
-
-def getInterfaceName(obj):
- """
- Gets the human readable name of an interface class or object in string
- format.
-
- @param obj: Class representing an AT-SPI interface or instance
- @type obj: class
- @return: Name of the interface
- @rtype: string
- @raise AttributeError: When the parameter does not provide typecode info
- """
- return obj._dbus_interface.lstrip("org.freedesktop.atspi.")
-
-def listInterfaces(obj):
- """
- Gets a list of the names of all interfaces supported by this object. The
- names are the short-hand interface names like "Accessible" and "Component",
- not the full interface identifiers.
-
- @param obj: Arbitrary object to query for all accessibility related
- interfaces. Must provide a queryInterface method.
- @type obj: object
- @return: Set of supported interface names
- @rtype: set
- @raise AttributeError: If the object provide does not implement
- queryInterface
- """
- return [itf.lstrip("org.freedesktop.atspi.") for itf in obj.interfaces]
-
-def stringToConst(prefix, suffix):
- """
- Maps a string name to an AT-SPI constant. The rules for the mapping are as
- follows:
- - The prefix is captalized and has an _ appended to it.
- - All spaces in the suffix are mapped to the _ character.
- - All alpha characters in the suffix are mapped to their uppercase.
-
- The resulting name is used with getattr to look up a constant with that name
- in the L{constants} module. If such a constant does not exist, the string
- suffix is returned instead.
-
- This method allows strings to be used to refer to roles, relations, etc.
- without direct access to the constants. It also supports the future expansion
- of roles, relations, etc. by allowing arbitrary strings which may or may not
- map to the current standard set of roles, relations, etc., but may still
- match some non-standard role, relation, etc. being reported by an
- application.
-
- @param prefix: Prefix of the constant name such as role, relation, state,
- text, modifier, key
- @type prefix: string
- @param suffix: Name of the role, relation, etc. to use to lookup the constant
- @type suffix: string
- @return: The matching constant value
- @rtype: object
- """
- name = prefix.upper()+'_'+suffix.upper().replace(' ', '_')
- return getattr(constants, name, suffix)
-
-def stateToString(value):
- """
- Converts a state value to a string based on the name of the state constant in
- the L{constants} module that has the given value.
-
- @param value: An AT-SPI state
- @type value: Accessibility.StateType
- @return: Human readable, untranslated name of the state
- @rtype: string
- """
- return state.STATE_VALUE_TO_NAME.get(value)
-
-def relationToString(value):
- """
- Converts a relation value to a string based on the name of the state constant
- in the L{constants} module that has the given value.
-
- @param value: An AT-SPI relation
- @type value: Accessibility.RelationType
- @return: Human readable, untranslated name of the relation
- @rtype: string
- """
- return relation.RELATION_VALUE_TO_NAME.get(value)
-
-def allModifiers():
- """
- Generates all possible keyboard modifiers for use with
- L{registry.Registry.registerKeystrokeListener}.
- """
- mask = 0
- while mask <= (1 << registry.MODIFIER_NUMLOCK):
- yield mask
- mask += 1
-
-def findDescendant(acc, pred, breadth_first=False):
- """
- Searches for a descendant node satisfying the given predicate starting at
- this node. The search is performed in depth-first order by default or
- in breadth first order if breadth_first is True. For example,
-
- my_win = findDescendant(lambda x: x.name == 'My Window')
-
- will search all descendants of x until one is located with the name 'My
- Window' or all nodes are exausted. Calls L{_findDescendantDepth} or
- L{_findDescendantBreadth} to start the recursive search.
-
- @param acc: Root accessible of the search
- @type acc: Accessibility.Accessible
- @param pred: Search predicate returning True if accessible matches the
- search criteria or False otherwise
- @type pred: callable
- @param breadth_first: Search breadth first (True) or depth first (False)?
- @type breadth_first: boolean
- @return: Accessible matching the criteria or None if not found
- @rtype: Accessibility.Accessible or None
- """
- if breadth_first:
- return _findDescendantBreadth(acc, pred)
-
- for child in acc:
- try:
- ret = _findDescendantDepth(acc, pred)
- except Exception:
- ret = None
- if ret is not None: return ret
-
-def _findDescendantBreadth(acc, pred):
- """
- Internal function for locating one descendant. Called by L{findDescendant} to
- start the search.
-
- @param acc: Root accessible of the search
- @type acc: Accessibility.Accessible
- @param pred: Search predicate returning True if accessible matches the
- search criteria or False otherwise
- @type pred: callable
- @return: Matching node or None to keep searching
- @rtype: Accessibility.Accessible or None
- """
- for child in acc:
- try:
- if pred(child): return child
- except Exception:
- pass
- for child in acc:
- try:
- ret = _findDescendantBreadth(child, pred)
- except Exception:
- ret = None
- if ret is not None: return ret
-
-def _findDescendantDepth(acc, pred):
- """
- Internal function for locating one descendant. Called by L{findDescendant} to
- start the search.
-
- @param acc: Root accessible of the search
- @type acc: Accessibility.Accessible
- @param pred: Search predicate returning True if accessible matches the
- search criteria or False otherwise
- @type pred: callable
- @return: Matching node or None to keep searching
- @rtype: Accessibility.Accessible or None
- """
- try:
- if pred(acc): return acc
- except Exception:
- pass
- for child in acc:
- try:
- ret = _findDescendantDepth(child, pred)
- except Exception:
- ret = None
- if ret is not None: return ret
-
-def findAllDescendants(acc, pred):
- """
- Searches for all descendant nodes satisfying the given predicate starting at
- this node. Does an in-order traversal. For example,
-
- pred = lambda x: x.getRole() == pyatspi.ROLE_PUSH_BUTTON
- buttons = pyatspi.findAllDescendants(node, pred)
-
- will locate all push button descendants of node.
-
- @param acc: Root accessible of the search
- @type acc: Accessibility.Accessible
- @param pred: Search predicate returning True if accessible matches the
- search criteria or False otherwise
- @type pred: callable
- @return: All nodes matching the search criteria
- @rtype: list
- """
- matches = []
- _findAllDescendants(acc, pred, matches)
- return matches
-
-def _findAllDescendants(acc, pred, matches):
- """
- Internal method for collecting all descendants. Reuses the same matches
- list so a new one does not need to be built on each recursive step.
- """
- for child in acc:
- try:
- if pred(child): matches.append(child)
- except Exception:
- pass
- _findAllDescendants(child, pred, matches)
-
-def findAncestor(acc, pred):
- """
- Searches for an ancestor satisfying the given predicate. Note that the
- AT-SPI hierarchy is not always doubly linked. Node A may consider node B its
- child, but B is not guaranteed to have node A as its parent (i.e. its parent
- may be set to None). This means some searches may never make it all the way
- up the hierarchy to the desktop level.
-
- @param acc: Starting accessible object
- @type acc: Accessibility.Accessible
- @param pred: Search predicate returning True if accessible matches the
- search criteria or False otherwise
- @type pred: callable
- @return: Node matching the criteria or None if not found
- @rtype: Accessibility.Accessible
- """
- if acc is None:
- # guard against bad start condition
- return None
- while 1:
- if acc.parent is None:
- # stop if there is no parent and we haven't returned yet
- return None
- try:
- if pred(acc.parent): return acc.parent
- except Exception:
- pass
- # move to the parent
- acc = acc.parent
-
-def getPath(acc):
- """
- Gets the path from the application ancestor to the given accessible in
- terms of its child index at each level.
-
- @param acc: Target accessible
- @type acc: Accessibility.Accessible
- @return: Path to the target
- @rtype: list of integer
- @raise LookupError: When the application accessible cannot be reached
- """
- path = []
- while 1:
- if acc.parent is None:
- path.reverse()
- return path
- try:
- path.append(acc.getIndexInParent())
- except Exception:
- raise LookupError
- acc = acc.parent
diff --git a/pyatspi/value.py b/pyatspi/value.py
deleted file mode 100644
index 121d5c8..0000000
--- a/pyatspi/value.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#This library is free software; you can redistribute it and/or
-#modify it under the terms of the GNU Lesser General Public
-#License version 2 as published by the Free Software Foundation.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU Lesser General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from interfaces import *
-from accessible import Accessible
-from factory import accessible_factory
-
-import dbus
-
-__all__ = [
- "Value",
- ]
-
-#------------------------------------------------------------------------------
-
-class Value(Accessible):
- """
- An interface supporting controls which allow a one-dimensional,
- scalar quantity to be modified or which reflect a scalar quantity.
- (If STATE_EDITABLE is not present, the valuator is treated as
- "read only".
- """
-
- def get_currentValue(self):
- return dbus.Double(self._pgetter(self._dbus_interface, "currentValue"))
- def set_currentValue(self, value):
- self._psetter(self._dbus_interface, "currentValue", dbus.Double(value, variant_level=1))
- _currentValueDoc = \
- """
- The current value of the valuator.
- """
- currentValue = property(fget=get_currentValue, fset=set_currentValue, doc=_currentValueDoc)
-
- def get_maximumValue(self):
- return dbus.Double(self._pgetter(self._dbus_interface, "maximumValue"))
- _maximumValueDoc = \
- """
- The maximum value allowed by this valuator.
- """
- maximumValue = property(fget=get_maximumValue, doc=_maximumValueDoc)
-
- def get_minimumIncrement(self):
- return dbus.Double(self._pgetter(self._dbus_interface, "minimumIncrement"))
- _minimumIncrementDoc = \
- """
- The smallest incremental change which this valuator allows. If
- 0, the incremental changes to the valuator are limited only by
- the precision of a double precision value on the platform.
- """
- minimumIncrement = property(fget=get_minimumIncrement, doc=_minimumIncrementDoc)
-
- def get_minimumValue(self):
- return dbus.Double(self._pgetter(self._dbus_interface, "minimumValue"))
- _minimumValueDoc = \
- """
- The minimum value allowed by this valuator.
- """
- minimumValue = property(fget=get_minimumValue, doc=_minimumValueDoc)
-
-# Register the accessible class with the factory.
-accessible_factory.register_accessible_class(ATSPI_VALUE, Value)
-
-#END----------------------------------------------------------------------------
diff --git a/tests/Makefile.am b/tests/Makefile.am
deleted file mode 100644
index 8daea17..0000000
--- a/tests/Makefile.am
+++ /dev/null
@@ -1,11 +0,0 @@
-SUBDIRS = dummyatk apps data pyatspi cspi
-
-#TESTS=testrunner.py
-TESTS_ENVIRONMENT = PYTHONPATH=$(abs_top_srcdir)/python \
- ATSPI_INTROSPECTION_PATH=$(top_srcdir)/xml/introspection \
- TEST_DATA_DIRECTORY=$(abs_top_srcdir)/tests/data \
- TEST_ATSPI_LIBRARY=$(abs_top_srcdir)/atk-adaptor/.libs/libspiatk.so \
- TEST_MODULES_DIRECTORY=$(abs_top_srcdir)/tests/apps/.libs \
- TEST_APPLICATION=$(abs_top_srcdir)/tests/apps/test-application
-
-CLEANFILES = *.pyc
diff --git a/tests/apps/Makefile.am b/tests/apps/Makefile.am
deleted file mode 100644
index 12a3257..0000000
--- a/tests/apps/Makefile.am
+++ /dev/null
@@ -1,47 +0,0 @@
-check_PROGRAMS = test-application
-check_LTLIBRARIES = libnoopapp.la \
- libaccessibleapp.la \
- libcomponentapp.la \
- libactionapp.la \
- librelationapp.la
-
-test_application_CFLAGS = $(DBUS_GLIB_CFLAGS) \
- $(ATK_CFLAGS) \
- $(GMODULE_CFLAGS) \
- -I$(top_srcdir)
-
-test_application_LDADD = $(DBUS_GLIB_LIBS) \
- $(GMODULE_LIBS) \
- $(ATK_LIBS)
-
-test_application_SOURCES = test-application.c
-
-
-TEST_APP_CFLAGS = $(ATK_CFLAGS) $(GMODULE_CFLAGS) -I$(top_srcdir) -I$(top_srcdir)/tests/dummyatk/
-TEST_APP_LDFLAGS = -no-undefined -module -avoid-version -rpath /a/fake/path
-TEST_APP_LIBADD = $(ATK_LIBS) $(GMODULE_LIBS) $(top_builddir)/tests/dummyatk/libdummyatk.la
-
-libnoopapp_la_CFLAGS = $(TEST_APP_CFLAGS)
-libnoopapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
-libnoopapp_la_LIBADD = $(TEST_APP_LIBADD)
-libnoopapp_la_SOURCES = noop-app.c
-
-libaccessibleapp_la_CFLAGS = $(TEST_APP_CFLAGS) $(LIB_XML_CFLAGS)
-libaccessibleapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
-libaccessibleapp_la_LIBADD = $(TEST_APP_LIBADD) $(LIB_XML_LIBS)
-libaccessibleapp_la_SOURCES = accessible-app.c atk-object-xml-loader.c atk-object-xml-loader.h
-
-libcomponentapp_la_CFLAGS = $(TEST_APP_CFLAGS)
-libcomponentapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
-libcomponentapp_la_LIBADD = $(TEST_APP_LIBADD)
-libcomponentapp_la_SOURCES = component-app.c
-
-libactionapp_la_CFLAGS = $(TEST_APP_CFLAGS)
-libactionapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
-libactionapp_la_LIBADD = $(TEST_APP_LIBADD)
-libactionapp_la_SOURCES = action-app.c
-
-librelationapp_la_CFLAGS = $(TEST_APP_CFLAGS)
-librelationapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
-librelationapp_la_LIBADD = $(TEST_APP_LIBADD)
-librelationapp_la_SOURCES = relation-app.c
diff --git a/tests/apps/accessible-app.c b/tests/apps/accessible-app.c
deleted file mode 100644
index 2796bf5..0000000
--- a/tests/apps/accessible-app.c
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <gmodule.h>
-#include <atk/atk.h>
-#include <my-atk.h>
-
-#include "atk-object-xml-loader.h"
-
-static gchar *tdata_path = NULL;
-
-static AtkObject *root_accessible;
-
-static AtkStateType states[] =
-{
- ATK_STATE_MULTI_LINE,
- ATK_STATE_MODAL,
- ATK_STATE_INDETERMINATE,
- ATK_STATE_SUPPORTS_AUTOCOMPLETION,
- ATK_STATE_VERTICAL
-};
-
-#define OBJECT_TEST_1 "accessible-test.xml"
-
-G_MODULE_EXPORT void
-test_init (gchar *path)
-{
- AtkStateSet *ss;
- gchar *td;
-
- if (path == NULL)
- g_error("No test data path provided");
- tdata_path = path;
-
- td = g_build_path(G_DIR_SEPARATOR_S, tdata_path, OBJECT_TEST_1, NULL);
- root_accessible = ATK_OBJECT(atk_object_xml_parse(td));
- g_free(td);
-
- ss = atk_object_ref_state_set(ATK_OBJECT(root_accessible));
- atk_state_set_add_states(ss, states, 5);
- g_object_unref(G_OBJECT(ss));
-}
-
-G_MODULE_EXPORT void
-test_next (int argc, char *argv[])
-{
- ;
-}
-
-G_MODULE_EXPORT void
-test_finished (int argc, char *argv[])
-{
- ;
-}
-
-G_MODULE_EXPORT AtkObject *
-test_get_root (void)
-{
- return root_accessible;
-}
diff --git a/tests/apps/action-app.c b/tests/apps/action-app.c
deleted file mode 100644
index 612cd59..0000000
--- a/tests/apps/action-app.c
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <gmodule.h>
-#include <atk/atk.h>
-#include <my-atk.h>
-
-static AtkObject *root_accessible;
-
-G_MODULE_EXPORT void
-test_init (gchar *path)
-{
- root_accessible = g_object_new(MY_TYPE_ATK_ACTION, NULL);
-}
-
-G_MODULE_EXPORT void
-test_next (int argc, char *argv[])
-{
- g_print("Moving to next stage\n");
-}
-
-G_MODULE_EXPORT void
-test_finished (int argc, char *argv[])
-{
- g_print("Test has completed\n");
-}
-
-G_MODULE_EXPORT AtkObject *
-test_get_root (void)
-{
- return root_accessible;
-}
diff --git a/tests/apps/atk-object-xml-loader.c b/tests/apps/atk-object-xml-loader.c
deleted file mode 100644
index 5fa2354..0000000
--- a/tests/apps/atk-object-xml-loader.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2008 Codethink Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <glib.h>
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-
-#include <my-atk.h>
-
-#define ACCESSIBLE_NODE ((const xmlChar *) "accessible")
-#define INTERFACE_NODE ((const xmlChar *) "interface")
-
-#define NAME_ATTR ((const xmlChar *) "name")
-#define DESC_ATTR ((const xmlChar *) "description")
-#define ROLE_ATTR ((const xmlChar *) "role")
-
-static MyAtkObject *
-create_atk_object_from_element(xmlNode *element)
-{
- xmlNode *child_node;
-
- MyAtkObject *obj = NULL;
- MyAtkObject *child_obj;
-
- xmlChar *name;
- xmlChar *description;
- xmlChar *role_text;
- gint role;
-
- name = xmlGetProp(element, NAME_ATTR);
- description = xmlGetProp(element, DESC_ATTR);
- role_text = xmlGetProp(element, ROLE_ATTR);
- role = atoi(role_text);
-
- obj = MY_ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT,
- "accessible-name", name,
- "accessible-description", description,
- "accessible-role", role,
- NULL));
-
- child_node = element->xmlChildrenNode;
- while (child_node != NULL)
- {
- if (!xmlStrcmp(child_node->name, ACCESSIBLE_NODE))
- {
- child_obj = create_atk_object_from_element(child_node);
- my_atk_object_add_child(obj, child_obj);
- }
- child_node = child_node->next;
- }
- return obj;
-}
-
-/*
- * Reads the XML from filename and uses it
- * to create a tree of MyAtkObjects.
- *
- * returns: The root object of the tree.
- */
-MyAtkObject *
-atk_object_xml_parse(gchar *filename)
-{
- xmlDoc *doc;
- xmlNode *root_element;
- MyAtkObject *new_atk_object = NULL;
-
- doc = xmlReadFile(filename, NULL, 0);
- g_assert(doc != NULL);
-
- root_element = xmlDocGetRootElement(doc);
-
- if (!xmlStrcmp(root_element->name, ACCESSIBLE_NODE))
- new_atk_object = create_atk_object_from_element(root_element);
-
- xmlFreeDoc(doc);
- return new_atk_object;
-}
diff --git a/tests/apps/atk-object-xml-loader.h b/tests/apps/atk-object-xml-loader.h
deleted file mode 100644
index ce707bd..0000000
--- a/tests/apps/atk-object-xml-loader.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2008 Codethink Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef ATK_OBJECT_XML_LOADER_H
-#define ATK_OBJECT_XML_LOADER_H
-
-#include <glib.h>
-#include <my-atk.h>
-
-MyAtkObject *
-atk_object_xml_parse(gchar *filename);
-
-#endif /*ATK_OBJECT_XML_LOADER_H*/
diff --git a/tests/apps/component-app.c b/tests/apps/component-app.c
deleted file mode 100644
index d51e1ac..0000000
--- a/tests/apps/component-app.c
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <gmodule.h>
-#include <atk/atk.h>
-#include <my-atk.h>
-
-static gchar *tdata_path = NULL;
-
-static AtkComponent *comps[] = {NULL, NULL, NULL};
-static const AtkRectangle extents[] = {{0,0,30,20}, {40,30,30,40}, {0,0,70,70}};
-static const AtkLayer layers[] = {ATK_LAYER_WINDOW, ATK_LAYER_WIDGET, ATK_LAYER_MDI};
-static const guint zorders[] = {0, -100, 100};
-static const gboolean extent_may_changed[] = {TRUE, FALSE, TRUE};
-
-G_MODULE_EXPORT void
-test_init (gchar *path)
-{
- int i;
-
- if (path == NULL)
- g_error("No test data path provided");
- tdata_path = path;
-
- g_type_init();
- for(i = 0; i < sizeof(comps) / sizeof(comps[0]); i++)
- {
- MyAtkComponent *mycomp = MY_ATK_COMPONENT(g_object_new(MY_TYPE_ATK_COMPONENT, NULL));
-
- mycomp->extent = extents[i];
- mycomp->is_extent_may_changed = extent_may_changed[i];
- mycomp->layer = layers[i];
- mycomp->zorder = zorders[i];
-
- comps[i] = ATK_COMPONENT(mycomp);
- }
-
- my_atk_object_add_child(MY_ATK_OBJECT(comps[2]), MY_ATK_OBJECT(comps[0]));
- my_atk_object_add_child(MY_ATK_OBJECT(comps[2]), MY_ATK_OBJECT(comps[1]));
-}
-
-G_MODULE_EXPORT void
-test_next (int argc, char *argv[])
-{
- g_print("Moving to next stage\n");
-}
-
-G_MODULE_EXPORT void
-test_finished (int argc, char *argv[])
-{
- g_print("Test has completed\n");
-}
-
-G_MODULE_EXPORT AtkObject *
-test_get_root (void)
-{
- return ATK_COMPONENT(comps[2]);
-}
diff --git a/tests/apps/noop-app.c b/tests/apps/noop-app.c
deleted file mode 100644
index f2a5f51..0000000
--- a/tests/apps/noop-app.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <gmodule.h>
-#include <atk/atk.h>
-
-G_MODULE_EXPORT void
-test_init (int argc, char *argv[])
-{
- ;
-}
-
-G_MODULE_EXPORT void
-test_next (int argc, char *argv[])
-{
- ;
-}
-
-G_MODULE_EXPORT void
-test_finished (int argc, char *argv[])
-{
- ;
-}
-
-G_MODULE_EXPORT AtkObject *
-test_get_root (void)
-{
- return NULL;
-}
diff --git a/tests/apps/relation-app.c b/tests/apps/relation-app.c
deleted file mode 100644
index 5734ffe..0000000
--- a/tests/apps/relation-app.c
+++ /dev/null
@@ -1,90 +0,0 @@
-#include <gmodule.h>
-#include <atk/atk.h>
-#include <my-atk.h>
-
-static AtkObject *root_accessible;
-
-G_MODULE_EXPORT void
-test_init (gchar *path)
-{
- AtkObject *r1, *r2, *r3;
- AtkObject *m1, *m2, *m3;
- AtkRelationSet *rset;
- AtkRelation *rel;
- AtkObject *rls[3];
-
- root_accessible = g_object_new(MY_TYPE_ATK_OBJECT, NULL);
-
- r1 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT,
- "accessible-name", "r1",
- "accessible-description", "",
- "accessible-role", ATK_ROLE_INVALID,
- NULL));
- my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(r1));
-
- r2 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT,
- "accessible-name", "r2",
- "accessible-description", "",
- "accessible-role", ATK_ROLE_INVALID,
- NULL));
- my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(r2));
-
- r3 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT,
- "accessible-name", "r3",
- "accessible-description", "",
- "accessible-role", ATK_ROLE_INVALID,
- NULL));
- my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(r3));
-
- m1 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT,
- "accessible-name", "m1",
- "accessible-description", "",
- "accessible-role", ATK_ROLE_INVALID,
- NULL));
- my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(m1));
-
- m2 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT,
- "accessible-name", "m2",
- "accessible-description", "",
- "accessible-role", ATK_ROLE_INVALID,
- NULL));
- my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(m2));
-
- m3 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT,
- "accessible-name", "m3",
- "accessible-description", "",
- "accessible-role", ATK_ROLE_INVALID,
- NULL));
- my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(m3));
-
- atk_object_add_relationship(root_accessible, ATK_RELATION_EMBEDS, r1);
- atk_object_add_relationship(root_accessible, ATK_RELATION_PARENT_WINDOW_OF, r2);
- atk_object_add_relationship(root_accessible, ATK_RELATION_DESCRIBED_BY, r3);
-
- rls[0] = m1;
- rls[1] = m2;
- rls[2] = m3;
-
- rset = atk_object_ref_relation_set(root_accessible);
- rel = atk_relation_new(rls, 3, ATK_RELATION_POPUP_FOR);
- atk_relation_set_add(rset, rel);
- g_object_unref(G_OBJECT(rset));
-}
-
-G_MODULE_EXPORT void
-test_next (int argc, char *argv[])
-{
- g_print("Moving to next stage\n");
-}
-
-G_MODULE_EXPORT void
-test_finished (int argc, char *argv[])
-{
- g_print("Test has completed\n");
-}
-
-G_MODULE_EXPORT AtkObject *
-test_get_root (void)
-{
- return root_accessible;
-}
diff --git a/tests/apps/test-application.c b/tests/apps/test-application.c
deleted file mode 100644
index 9c0bd3c..0000000
--- a/tests/apps/test-application.c
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * AT-SPI - Assistive Technology Service Provider Interface
- * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
- *
- * Copyright 2008 Codethink Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Testing AT-SPI requires both a test application and AT client.
- * Test applications are built using the Dummy ATK implementation: MyAtk.
- * This file contains the entry point for all test applications.
- * Each test is built as a GModule, and this program loads the
- * test module, as well as the AT-SPI module. The test module will
- * provide its own implementation of atk_get_root, and as such provide
- * all the application state for the test.
- */
-
-#include <stdlib.h>
-#include <glib.h>
-#include <gmodule.h>
-#include <atk/atk.h>
-#include <dbus/dbus.h>
-
-/* The test module, GModule containing interface for an atk-test */
-static GModule *test_module;
-static gpointer test_module_get_root;
-static gpointer test_module_next;
-static gpointer test_module_finished;
-
-static DBusConnection *dbus_bus;
-static GMainLoop *mainloop;
-
-/* Test module interface */
-/*************************/
-
-typedef AtkObject *(*TestModuleGetRoot) (void);
-
-/* Calls into the test module to get the root atk object */
-static AtkObject *
-get_root(void)
-{
- return ((TestModuleGetRoot) test_module_get_root)();
-}
-
-typedef void (*VoidVoid) (void);
-
-/* Called to move to next stage of test.*/
-static void
-next(void)
-{
- ((VoidVoid) test_module_next)();
-}
-
-
-/*************************/
-
-/* The AtkUtil class is called to find the root accessible and to deal
- * with events. Its an incomplete class, its v-table needs to be filled in.
- */
-static void
-setup_atk_util(void)
-{
- AtkUtilClass *klass;
-
- klass = g_type_class_ref(ATK_TYPE_UTIL);
- klass->get_root = get_root;
- g_type_class_unref(klass);
-}
-
-typedef void (*GtkModuleInit) (int *argc, char **argv[]);
-
-/* AT-SPI is a gtk module that must be loaded and initialized */
-static void
-load_atspi_module(const char *path, int *argc, char **argv[])
-{
- GModule *bridge;
- gpointer init;
-
- bridge = g_module_open(path, G_MODULE_BIND_LOCAL|G_MODULE_BIND_LAZY);
- if (!bridge)
- g_error("Couldn't load atk-bridge module : %s\n", g_module_error());
-
- if (!g_module_symbol(bridge, "gtk_module_init", &init))
- g_error("Couldn't load symbol \"gtk_module_init\"\n");
-
- ((GtkModuleInit) init)(argc, argv);
-}
-
-typedef void (*TestModuleInit) (gchar *path);
-
-static void
-load_test_module(const char *path, const char *tdpath)
-{
- gpointer init;
-
- test_module = g_module_open(path, G_MODULE_BIND_LOCAL|G_MODULE_BIND_LAZY);
- if (!test_module)
- g_error("Couldn't load test module : %s\n", path);
-
- if (!g_module_symbol(test_module, "test_init", &init))
- g_error("Couldn't load symbol \"test_init\"\n");
-
- if (!g_module_symbol(test_module, "test_get_root", &test_module_get_root))
- g_error("Couldn't load symbol \"test_get_root\"\n");
-
- if (!g_module_symbol(test_module, "test_next", &test_module_next))
- g_error("Couldn't load symbol \"test_next\"\n");
-
- if (!g_module_symbol(test_module, "test_finished", &test_module_finished))
- g_error("Couldn't load symbol \"test_finished\"\n");
-
- ((TestModuleInit) init)((gchar *)tdpath);
-}
-
-static const char* introspection_string =
-"<node name=\"/org/codethink/atspi/test\">"
-" <interface name=\"org.codethink.atspi.test\">"
-" <method name=\"next\"/>"
-" <method name=\"finish\"/>"
-" <signal name=\"started\"/>"
-" </interface>"
-"</node>";
-
-static DBusHandlerResult
-message_handler (DBusConnection *bus, DBusMessage *message, void *user_data)
-{
- const char *iface = dbus_message_get_interface (message);
- const char *member = dbus_message_get_member (message);
- DBusHandlerResult result = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- gboolean exit = FALSE;
-
- DBusMessage *reply = NULL;
-
- g_return_val_if_fail(iface != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
-
- if (!strcmp(iface, "org.codethink.atspi.test"))
- {
- if (!strcmp(member, "next"))
- {
- next();
- reply = dbus_message_new_method_return (message);
- g_assert(reply != NULL);
- result = DBUS_HANDLER_RESULT_HANDLED;
- }
-
- if (!strcmp(member, "finish"))
- {
- ((VoidVoid) test_module_finished)();
- reply = dbus_message_new_method_return (message);
- g_assert(reply != NULL);
- result = DBUS_HANDLER_RESULT_HANDLED;
- exit = TRUE;
- }
- }
-
- if (!strcmp(iface, "org.freedesktop.DBus.Introspectable"))
- {
- if (!strcmp(member, "Introspect"))
- {
- reply = dbus_message_new_method_return (message);
- g_assert(reply != NULL);
- dbus_message_append_args(reply, DBUS_TYPE_STRING, &introspection_string,
- DBUS_TYPE_INVALID);
- result = DBUS_HANDLER_RESULT_HANDLED;
- }
- }
-
- if (reply)
- {
- dbus_connection_send (bus, reply, NULL);
- dbus_message_unref (reply);
- }
-
- if (exit == TRUE)
- {
- dbus_connection_flush(bus);
- dbus_connection_unref(bus);
- g_main_loop_quit(mainloop);
- }
- return result;
-}
-
-static DBusObjectPathVTable test_vtable =
-{
- NULL,
- &message_handler,
- NULL, NULL, NULL, NULL
-};
-
-static void
-init_dbus_interface(void)
-{
- DBusError error;
-
- dbus_error_init(&error);
- dbus_bus = dbus_bus_get(DBUS_BUS_SESSION, &error);
- g_print("\nUnique D-Bus name is: %s\n", dbus_bus_get_unique_name(dbus_bus));
-
- if (!dbus_bus)
- g_error("Couldn't get the session bus - %s\n", error.message);
-
- g_assert(dbus_connection_register_object_path(dbus_bus,
- "/org/codethink/atspi/test",
- &test_vtable,
- NULL));
-
- dbus_connection_setup_with_g_main(dbus_bus, g_main_context_default());
-}
-
-static void
-send_started_signal(void)
-{
- DBusMessage* sig;
- DBusMessageIter args;
-
- sig = dbus_message_new_signal("/org/codethink/atspi/test", "org.codethink.atspi.test", "started");
- g_assert(sig != NULL);
- if (!dbus_connection_send(dbus_bus, sig, NULL))
- g_error("Out of memory");
- dbus_connection_flush(dbus_bus);
- dbus_message_unref(sig);
-}
-
-/*Command line data*/
-static gchar *tmodule_path = NULL;
-static gchar *amodule_path = NULL;
-static gchar *tdata_path = NULL;
-
-static GOptionEntry optentries[] =
-{
- {"test-module", 0, 0, G_OPTION_ARG_STRING, &tmodule_path, "Module containing test scenario", NULL},
- {"test-atspi-library", 0, 0, G_OPTION_ARG_STRING, &amodule_path, "Gtk module with atk-atspi adaptor", NULL},
- {"test-data-directory", 0, 0, G_OPTION_ARG_STRING, &tdata_path, "Path to directory of test data", NULL},
- {NULL}
-};
-
-/* main
- *
- * Entry point for all test applications.
- */
-main(int argc, char *argv[])
-{
- GOptionContext *opt;
- GError *err = NULL;
-
- /*Parse command options*/
- opt = g_option_context_new(NULL);
- g_option_context_add_main_entries(opt, optentries, NULL);
- g_option_context_set_ignore_unknown_options(opt, TRUE);
-
- if (!g_option_context_parse(opt, &argc, &argv, &err))
- g_error("Option parsing failed: %s\n", err->message);
-
- if (tmodule_path == NULL)
- g_error("No test module provided");
- if (amodule_path == NULL)
- g_error("No atspi module provided");
-
- g_type_init();
-
- setup_atk_util();
- load_test_module(tmodule_path, tdata_path);
- load_atspi_module(amodule_path, &argc, &argv);
- init_dbus_interface();
- send_started_signal();
-
- mainloop = g_main_loop_new (NULL, FALSE);
- g_main_loop_run (mainloop);
-
- return 0;
-}
diff --git a/tests/cspi/Makefile.am b/tests/cspi/Makefile.am
deleted file mode 100644
index 316cbe4..0000000
--- a/tests/cspi/Makefile.am
+++ /dev/null
@@ -1,19 +0,0 @@
-noinst_PROGRAMS = key-listener-test keysynth-test simple-at test-simple
-
-key_listener_test_SOURCES = key-listener-test.c
-keysynth_test_SOURCES = keysynth-test.c
-simple_at_SOURCES = simple-at.c
-test_simple_SOURCES = test-simple.c
-
-INCLUDES = -I$(top_srcdir) \
- -I$(top_builddir) \
- $(DBUS_CFLAGS) \
- $(GLIB_CFLAGS) \
- $(GTK_CFLAGS) \
- $(ATK_CFLAGS) \
- $(DBIND_CFLAGS) \
- $(DEBUG_CFLAGS)
-
-LDADD = $(top_builddir)/common/libspicommon.la \
- $(top_builddir)/cspi/libcspi.la \
- $(TESTS_LIBS) $(X_LIBS) $(XINPUT_LIBS) $(ATK_LIBS) $(GTK_LIBS) $(DBIND_LIBS)
diff --git a/tests/cspi/accessible-test.c b/tests/cspi/accessible-test.c
deleted file mode 100644
index ab490db..0000000
--- a/tests/cspi/accessible-test.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2008 Codethink Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-#include <glib.h>
-#include <string.h>
-#include <stdlib.h>
-
-typedef struct {
- gchar *none;
-} AccessibleObjectFixture;
-
-static void
-test_getChildAtIndex (AccessibleObjectFixture *fix, gconstpointer test_data)
-{
- return;
-}
-
-int
-main (int argc, char *argv[])
-{
- return 0;
-}
diff --git a/tests/cspi/classy-test-suite.c b/tests/cspi/classy-test-suite.c
deleted file mode 100644
index dd22e7a..0000000
--- a/tests/cspi/classy-test-suite.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (C) 2008 Codethink Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <glib-object.h>
-#include <string.h>
-#include <stdio.h>
-
-#include "classy-test.h"
-#include "classy-test-suite.h"
-
-/*---------------------------------------------------------------------------*/
-
-static gboolean
-run_test_app(gchar *module_name, gchar *dbus_name)
-{
- gboolean result;
- GPid pid;
- GError *err = NULL;
-
- const gchar *test_data_directory;
- const gchar *test_modules_directory;
- const gchar *test_atspi_library;
- const gchar *test_application;
- gchar *test_module;
- gchar *command_line;
-
- test_data_directory = g_getenv("TEST_DATA_DIRECTORY");
- test_modules_directory = g_getenv("TEST_MODULES_DIRECTORY");
- test_atspi_library = g_getenv("TEST_ATSPI_LIBRARY");
- test_application = g_getenv("TEST_APPLICATION");
-
- test_module = g_build_path("/", test_modules_directory, module_name, NULL);
-
- command_line = g_build_path(" ", test_application,
- "--atspi-dbus-name", dbus_name,
- "--test-atspi-library", test_atspi_library,
- "--test-module", test_module,
- "--test-data-directory", test_data_directory,
- NULL);
-
- if (!(result = g_spawn_command_line_async(NULL, &err)))
- {
- fprintf(stderr, "\nCould not spawn test application - %s", err->message);
- }
-
- g_free(test_module);
- g_free(command_line);
-
- return result;
-}
-
-/*---------------------------------------------------------------------------*/
-
-static gboolean
-suite_idle_handler(gpointer data);
-
-static void
-suite_finished_handler(gpointer data)
-{
- ClassyTestSuite *suite = CLASSY_TEST_SUITE(data);
- ClassyTest *test = CLASSY_TEST(g_array_index(suite->cases, gpointer, suite->current));
-
- if ((classy_test_state(test) == CLASSY_TEST_WIN) || suite->cont) {
- g_idle_add(suite_idle_handler, suite);
- }
- /* TODO If test has failed remember to send signal saying so */
-}
-
-static gboolean
-suite_idle_handler(gpointer data)
-{
- ClassyTestSuite *suite = CLASSY_TEST_SUITE(data);
-
- suite->current++;
- if (suite->current >= suite->cases->len) {
- /* No more tests, check for success or fail */
- gboolean succeeded = TRUE;
- gint i;
- for (i=0; i < suite->cases->len; i++) {
- ClassyTest *test;
- test = CLASSY_TEST(g_array_index(suite->cases, gpointer, i));
- succeeded = succeeded && (classy_test_state(test) == CLASSY_TEST_WIN);
- }
- if (succeeded == TRUE)
- classy_test_pass(CLASSY_TEST(suite));
- else
- classy_test_fail(CLASSY_TEST(suite), "Sub-test has failed");
- } else {
- /* More tests, run this one*/
- ClassyTest *test;
- test = CLASSY_TEST(g_array_index(suite->cases, gpointer, suite->current));
- g_signal_connect(test, "finished", (GCallback) suite_finished_handler, data);
- classy_test_run(test);
- }
- return FALSE;
-}
-
-static void
-suite_run(ClassyTest *test)
-{
- g_idle_add(suite_idle_handler, test);
-}
-
-/*---------------------------------------------------------------------------*/
-
-static gchar *
-suite_report(ClassyTest *test)
-{
- ClassyTestSuite *suite = CLASSY_TEST_SUITE(test);
- GString *report;
- gint i;
-
- report = g_string_new("");
-
- switch (classy_test_state(test)) {
- case CLASSY_TEST_FAIL:
- g_string_printf(report, "FAIL : %s\n : %s\n ", test->name);
- case CLASSY_TEST_WIN:
- g_string_printf(report, "PASS : %s\n", test->name);
- default:
- g_string_printf(report, "INCOMPLETE : %s\n", test->name);
- }
-
- for (i=0; i < suite->cases->len; i++) {
- ClassyTest *subtest = CLASSY_TEST(g_array_index(suite->cases, gpointer, i));
- g_string_append_printf(report, " ");
- g_string_append_printf(report, "%s", classy_test_report(subtest));
- }
- return g_string_free(report, FALSE);
-}
-
-/*---------------------------------------------------------------------------*/
-
-G_DEFINE_TYPE (ClassyTestSuite, classy_test_suite, TYPE_CLASSY_TEST)
-
-static void
-classy_test_suite_finalize (GObject *obj)
-{
- ClassyTestSuite *suite = CLASSY_TEST_SUITE(obj);
- gint i;
-
- for (i=0; i < suite->cases->len; i++) {
- ClassyTest *test;
- test = CLASSY_TEST(g_array_index(suite->cases, gpointer, i));
- g_object_unref(test);
- }
- g_free(suite->data);
-
- G_OBJECT_CLASS (classy_test_suite_parent_class)->finalize (obj);
-}
-
-static void
-classy_test_suite_class_init (ClassyTestSuiteClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- ClassyTestClass *test_class = CLASSY_TEST_CLASS(klass);
-
- gobject_class->finalize = classy_test_suite_finalize;
-
- test_class->report = suite_report;
- test_class->run = suite_run;
-}
-
-static void
-classy_test_suite_init (ClassyTestSuite *suite)
-{
- suite->cases = g_array_new(FALSE, FALSE, sizeof(gpointer));
- suite->current = -1;
-}
-
-/*---------------------------------------------------------------------------*/
-
-ClassyTestSuite *
-classy_test_suite_new(gchar *name, gint dsize, gboolean cont)
-{
- ClassyTestSuite *suite;
- ClassyTest *test;
-
- suite = g_object_new(TYPE_CLASSY_TEST_SUITE, NULL);
- suite->cont = cont;
- suite->data = g_malloc0(dsize);
-
- test = CLASSY_TEST(suite);
- test->name = g_strdup(name);
-
- return suite;
-}
-
-void
-classy_test_suite_add(ClassyTestSuite *suite, ClassyTest *test)
-{
- g_array_append(suite->cases, test);
-}
-
-/*---------------------------------------------------------------------------*/
diff --git a/tests/cspi/classy-test-suite.h b/tests/cspi/classy-test-suite.h
deleted file mode 100644
index d27aad0..0000000
--- a/tests/cspi/classy-test-suite.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Classy Test - Terrible framework for testing asyncronous interface
- *
- * Copyright (C) 2008 Codethink Ltd
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-#ifndef CLASSY_TEST_SUITE_H
-#define CLASSY_TEST_SUITE_H
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-GType classy_test_suite_get_type(void);
-
-#define TYPE_CLASSY_TEST_SUITE (classy_test_suite_get_type())
-
-#define CLASSY_TEST_SUITE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- TYPE_CLASSY_TEST_SUITE, \
- ClassyTestSuite))
-
-#define CLASSY_TEST_SUITE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \
- TYPE_CLASSY_TEST_SUITE, \
- ClassyTestSuiteClass))
-
-#define IS_CLASSY_TEST_SUITE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- TYPE_CLASSY_TEST_SUITE))
-
-#define IS_CLASSY_TEST_SUITE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), \
- TYPE_CLASSY_TEST_SUITE))
-
-#define CLASSY_TEST_SUITE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), \
- TYPE_CLASSY_TEST_SUITE, \
- ClassyTestSuiteClass))
-
-typedef struct _ClassyTestSuite ClassyTestSuite;
-typedef struct _ClassyTestSuiteClass ClassyTestSuiteClass;
-
-struct _ClassyTestSuite {
- ClassyTest parent;
-
- GArray *cases;
- gint current;
- gboolean cont;
-
- gpointer data;
-};
-
-struct _ClassyTestSuiteClass {
- ClassyTestClass parent;
-};
-
-ClassyTestSuite *
-classy_test_suite_new(gchar *name, gint dsize, gboolean cont);
-
-void
-classy_test_suite_add(ClassyTestSuite *suite, ClassyTest *test);
-
-/*---------------------------------------------------------------------------*/
-
-G_END_DECLS
-#endif /* CLASSY_TEST_SUITE_H */
diff --git a/tests/cspi/classy-test.c b/tests/cspi/classy-test.c
deleted file mode 100644
index e5ef266..0000000
--- a/tests/cspi/classy-test.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Classy Test - Terrible framework for testing asyncronous interface
- *
- * Copyright (C) 2008 Codethink Ltd
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <glib-object.h>
-
-#include "classy-test.h"
-
-static gchar *
-classy_test_report(ClassyTest *test)
-{
- switch (classy_test_state(test)) {
- case CLASSY_TEST_FAIL:
- return g_strdup_printf("FAIL : %s - %s\n ", test->name, test->failm);
- case CLASSY_TEST_WIN:
- return g_strdup_printf("PASS : %s\n", test->name);
- default:
- return g_strdup_printf("INCOMPLETE : %s\n", test->name);
- }
-}
-
-/*---------------------------------------------------------------------------*/
-
-static void
-classy_test_run(ClassyTest *test)
-{
- test->tstate = CLASSY_TEST_IN_PROGRESS;
- (test->entry)(test, test->data);
-}
-
-/*---------------------------------------------------------------------------*/
-
-G_DEFINE_TYPE (ClassyTest, classy_test, G_TYPE_OBJECT)
-
-static void
-classy_test_finalize (GObject *obj)
-{
- ClassyTest *test = CLASSY_TEST(obj);
-
- g_free(test->name);
- if (test->failm) {
- g_free(test->failm);
- test->failm = NULL;
- }
- G_OBJECT_CLASS (classy_test_parent_class)->finalize (obj);
-}
-
-static void
-classy_test_class_init (ClassyTestClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = classy_test_finalize;
-
- klass->report = classy_test_report;
- klass->run = classy_test_run;
-
- /*Signals*/
- klass->finished = g_signal_newv("finished",
- TYPE_CLASSY_TEST,
- G_SIGNAL_RUN_LAST | G_SIGNAL_NO_HOOKS,
- NULL,
- NULL,
- NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0,
- NULL);
-}
-
-static void
-classy_test_init (ClassyTest *test)
-{
- test->failm = NULL;
- test->tstate = CLASSY_TEST_NOT_STARTED;
-}
-
-/*---------------------------------------------------------------------------*/
-
-ClassyTest *
-classy_test_new(gchar *name,
- void (*entry) (ClassyTest*, gpointer data),
- gint istate,
- gpointer data)
-{
- ClassyTest *test;
-
- test = g_object_new(TYPE_CLASSY_TEST, NULL);
-
- test->name = g_strdup(name);
- test->entry = entry;
- test->data = data;
-
- return test;
-}
-
-/*---------------------------------------------------------------------------*/
-
-void
-classy_test_pass(ClassyTest *test)
-{
- test->tstate = CLASSY_TEST_WIN;
- g_signal_emit (test, CLASSY_TEST_CLASS(test)->finished, 0, NULL);
-}
-
-/*---------------------------------------------------------------------------*/
-
-void
-classy_test_fail(ClassyTest *test, gchar *fmt, ...)
-{
- va_list args;
-
- va_start(args, fmt);
- test->failm = g_strdup_vprintf(fmt, args);
- va_end(args);
- test->tstate = CLASSY_TEST_FAIL;
- g_signal_emit (test, CLASSY_TEST_CLASS(test)->finished, 0, NULL);
-}
-
-/*---------------------------------------------------------------------------*/
-
-gint
-classy_test_state(ClassyTest *test)
-{
- return test->tstate;
-}
-
-/*---------------------------------------------------------------------------*/
diff --git a/tests/cspi/classy-test.h b/tests/cspi/classy-test.h
deleted file mode 100644
index 68e59e1..0000000
--- a/tests/cspi/classy-test.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Classy Test - Terrible framework for testing asyncronous interface
- *
- * Copyright (C) 2008 Codethink Ltd
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-#ifndef CLASSY_TEST_H
-#define CLASSY_TEST_H
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-GType classy_test_get_type(void);
-
-#define TYPE_CLASSY_TEST (classy_test_get_type())
-
-#define CLASSY_TEST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- TYPE_CLASSY_TEST, \
- ClassyTest))
-
-#define CLASSY_TEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \
- TYPE_CLASSY_TEST, \
- ClassyTestClass))
-
-#define IS_CLASSY_TEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- TYPE_CLASSY_TEST))
-
-#define IS_CLASSY_TEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), \
- TYPE_CLASSY_TEST))
-
-#define CLASSY_TEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), \
- TYPE_CLASSY_TEST, \
- ClassyTestClass))
-
-typedef struct _ClassyTest ClassyTest;
-typedef struct _ClassyTestClass ClassyTestClass;
-
-enum {
- CLASSY_TEST_NOT_STARTED,
- CLASSY_TEST_IN_PROGRESS,
- CLASSY_TEST_FAIL,
- CLASSY_TEST_WIN
-};
-
-struct _ClassyTest {
- GObject parent;
-
- gchar *name;
- gchar *failm;
- gint tstate;
-
- void (*entry) (ClassyTest *tc, gpointer data);
-
- gpointer data;
-};
-
-struct _ClassyTestClass {
- GObjectClass parent;
-
- /*Virtuals*/
- gchar *(*report) (ClassyTest *test);
- void (*run) (ClassyTest *test);
-
- /*Signals*/
- gint finished;
-};
-
-ClassyTest *
-classy_test_new(gchar *name,
- void (*entry) (ClassyTest*, gpointer data),
- gint istate,
- gpointer data);
-
-void
-classy_test_pass(ClassyTest *test);
-
-void
-classy_test_fail(ClassyTest *test, gchar *fmt, ...);
-
-gint
-classy_test_state(ClassyTest *test);
-
-G_END_DECLS
-#endif /* CLASSY_TEST_H */
diff --git a/tests/cspi/key-listener-test.c b/tests/cspi/key-listener-test.c
deleted file mode 100644
index b212a21..0000000
--- a/tests/cspi/key-listener-test.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * AT-SPI - Assistive Technology Service Provider Interface
- * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
- *
- * 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
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <sys/un.h>
-#include "../../cspi/spi.h"
-
-static SPIBoolean report_command_key_event (const AccessibleKeystroke *stroke, void *user_data);
-static SPIBoolean report_ordinary_key_event (const AccessibleKeystroke *stroke, void *user_data);
-static SPIBoolean report_synchronous_key_event (const AccessibleKeystroke *stroke, void *user_data);
-static SPIBoolean report_tab_key_event (const AccessibleKeystroke *stroke, void *user_data);
-static SPIBoolean report_all_key_event (const AccessibleKeystroke *stroke, void *user_data);
-
-static AccessibleKeystrokeListener *command_key_listener;
-static AccessibleKeystrokeListener *ordinary_key_listener;
-static AccessibleKeystrokeListener *synchronous_key_listener;
-static AccessibleKeystrokeListener *tab_key_listener;
-static AccessibleKeystrokeListener *all_key_listener;
-static AccessibleKeySet *command_keyset;
-static AccessibleKeySet *async_keyset;
-static AccessibleKeySet *sync_keyset;
-static AccessibleKeySet *tab_keyset;
-
-int
-main (int argc, char **argv)
-{
- const char *tab_strings[1] = {"Tab"};
- short keycodes[] = {65, 64, 23};
- SPIBoolean retval = FALSE;
-
- SPI_init ();
-
- /* prepare the keyboard snoopers */
- command_key_listener = SPI_createAccessibleKeystrokeListener (report_command_key_event, NULL);
- ordinary_key_listener = SPI_createAccessibleKeystrokeListener (report_ordinary_key_event, NULL);
- synchronous_key_listener = SPI_createAccessibleKeystrokeListener (report_synchronous_key_event, NULL);
- tab_key_listener = SPI_createAccessibleKeystrokeListener (report_tab_key_event, NULL);
- all_key_listener = SPI_createAccessibleKeystrokeListener (report_all_key_event, NULL);
-
- command_keyset = SPI_createAccessibleKeySet (1, "q", NULL, NULL);
- async_keyset = SPI_createAccessibleKeySet (3, NULL, keycodes, NULL);
- sync_keyset = SPI_createAccessibleKeySet (3, "def", NULL, NULL);
- tab_keyset = SPI_createAccessibleKeySet (1, NULL, NULL, tab_strings);
- retval = SPI_registerAccessibleKeystrokeListener(command_key_listener,
- command_keyset,
- SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL,
- (unsigned long) ( SPI_KEY_PRESSED ),
- SPI_KEYLISTENER_ALL_WINDOWS);
- fprintf (stderr, "Command key registry: result %s\n", retval ? "succeeded" :
- "failed");
- retval = SPI_registerAccessibleKeystrokeListener(ordinary_key_listener,
- async_keyset,
- SPI_KEYMASK_UNMODIFIED,
- (unsigned long) ( SPI_KEY_PRESSED | SPI_KEY_RELEASED ),
- SPI_KEYLISTENER_NOSYNC);
-
- retval = SPI_registerAccessibleKeystrokeListener(synchronous_key_listener,
- sync_keyset,
- SPI_KEYMASK_UNMODIFIED,
- (unsigned long) ( SPI_KEY_PRESSED | SPI_KEY_RELEASED ),
- SPI_KEYLISTENER_CANCONSUME);
-
- retval = SPI_registerAccessibleKeystrokeListener(tab_key_listener,
- tab_keyset,
- SPI_KEYMASK_ALT,
- (unsigned long) ( SPI_KEY_PRESSED | SPI_KEY_RELEASED ),
- SPI_KEYLISTENER_ALL_WINDOWS);
- fprintf (stderr, "tab listener registry: %s\n", retval ? "succeeded" : "failed");
-
- retval = SPI_registerAccessibleKeystrokeListener(all_key_listener,
- SPI_KEYSET_ALL_KEYS,
- SPI_KEYMASK_CONTROL | SPI_KEYMASK_SHIFT,
- (unsigned long) ( SPI_KEY_PRESSED | SPI_KEY_RELEASED ),
- SPI_KEYLISTENER_ALL_WINDOWS);
-
- fprintf (stderr, "all key registry: %s\n", retval ? "succeeded" : "failed" );
-
- SPI_registerAccessibleKeystrokeListener(all_key_listener,
- SPI_KEYSET_ALL_KEYS,
- SPI_KEYMASK_SHIFT,
- (unsigned long) ( SPI_KEY_PRESSED ),
- SPI_KEYLISTENER_NOSYNC | SPI_KEYLISTENER_CANCONSUME);
-
- SPI_event_main ();
-
- putenv ("AT_BRIDGE_SHUTDOWN=1");
-
- return SPI_exit ();
-}
-
-static void
-simple_at_exit (void)
-{
- SPI_deregisterAccessibleKeystrokeListener (command_key_listener, SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL);
- AccessibleKeystrokeListener_unref (command_key_listener);
- SPI_freeAccessibleKeySet (command_keyset);
-
-/*
- SPI_deregisterAccessibleKeystrokeListener (ordinary_key_listener, SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL); */
- AccessibleKeystrokeListener_unref (ordinary_key_listener);
- SPI_freeAccessibleKeySet (async_keyset);
-
-/* SPI_deregisterAccessibleKeystrokeListener (synchronous_key_listener, SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL); */
- AccessibleKeystrokeListener_unref (synchronous_key_listener);
- SPI_freeAccessibleKeySet (sync_keyset);
-
- SPI_deregisterAccessibleKeystrokeListener (tab_key_listener, SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL);
- AccessibleKeystrokeListener_unref (tab_key_listener);
- SPI_freeAccessibleKeySet (tab_keyset);
-
- SPI_event_quit ();
-}
-
-static SPIBoolean
-is_command_key (const AccessibleKeystroke *key)
-{
- switch (key->keyID)
- {
- case 'Q':
- case 'q':
- simple_at_exit();
- return TRUE; /* not reached */
- default:
- return FALSE;
- }
-}
-
-static void
-print_key_event (const AccessibleKeystroke *key, char *prefix)
-{
- fprintf (stderr, "%s KeyEvent %s%c (keycode %d); string=%s; time=%lx\n",
- prefix,
- (key->modifiers & SPI_KEYMASK_ALT)?"Alt-":"",
- ((key->modifiers & SPI_KEYMASK_SHIFT)^(key->modifiers & SPI_KEYMASK_SHIFTLOCK))?
- (char) toupper((int) key->keyID) : (char) tolower((int) key->keyID),
- (int) key->keycode,
- key->keystring,
- (long int) key->timestamp);
-}
-
-static SPIBoolean
-report_command_key_event (const AccessibleKeystroke *key, void *user_data)
-{
- print_key_event (key, "command");
- return is_command_key (key);
-}
-
-static SPIBoolean
-report_ordinary_key_event (const AccessibleKeystroke *key, void *user_data)
-{
- print_key_event (key, "ordinary");
- return FALSE;
-}
-
-static SPIBoolean
-report_synchronous_key_event (const AccessibleKeystroke *key, void *user_data)
-{
- /* consume 'd' key, let others pass through */
- print_key_event (key, "synchronous (consumable) ");
- return ( key->keyID == 'd' ) ? TRUE : FALSE;
-}
-
-static SPIBoolean
-report_tab_key_event (const AccessibleKeystroke *key, void *user_data)
-{
- print_key_event (key, "[TAB]");
- return FALSE;
-}
-
-static SPIBoolean
-report_all_key_event (const AccessibleKeystroke *key, void *user_data)
-{
- fprintf(stderr, "(%ld)", key->keyID);
- return FALSE;
-}
-
diff --git a/tests/cspi/keysynth-test.c b/tests/cspi/keysynth-test.c
deleted file mode 100644
index 73aa240..0000000
--- a/tests/cspi/keysynth-test.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * AT-SPI - Assistive Technology Service Provider Interface
- * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
- *
- * 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
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <unistd.h>
-#include <stdlib.h>
-#include "../../cspi/spi-private.h" /* A hack for now */
-#include <glib-object.h>
-#include <gtk/gtk.h>
-#include <atk/atk.h>
-#include <atk/atknoopobject.h>
-#include "common/spi-dbus.h"
-
-typedef struct {
- long int val;
- char *string;
- AccessibleKeySynthType type;
-} TextTest;
-
-static TextTest text[] = {
- {65, NULL, SPI_KEY_PRESSRELEASE},
- {64, NULL, SPI_KEY_SYM},
- {0, "--hello!", SPI_KEY_STRING},
- {0, "StudlyCaps!", SPI_KEY_STRING}
-};
-
-static void
-test_key_synthesis (void)
-{
- int i;
- for (i = 0; i < G_N_ELEMENTS (text); ++i) {
- SPI_generateKeyboardEvent (text[i].val, text[i].string, text[i].type);
- }
-}
-
-int
-main (int argc, char **argv)
-{
- gtk_init (&argc, &argv);
- SPI_init ();
-
- test_key_synthesis ();
-
- return SPI_exit ();
-}
-
diff --git a/tests/cspi/simple-at.c b/tests/cspi/simple-at.c
deleted file mode 100644
index 23cb0ec..0000000
--- a/tests/cspi/simple-at.c
+++ /dev/null
@@ -1,615 +0,0 @@
-/*
- * AT-SPI - Assistive Technology Service Provider Interface
- * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
- *
- * 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
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-#include <stdio.h>
-#include <strings.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <sys/un.h>
-#undef MAGNIFIER_ENABLED
-#include "../../cspi/spi-private.h" /* A hack for now */
-
-#define PRINT_TREE
-
-static void report_focus_event (const AccessibleEvent *event, void *user_data);
-static void report_generic_event (const AccessibleEvent *event, void *user_data);
-static void report_window_event (const AccessibleEvent *event, void *user_data);
-static void report_text_event (const AccessibleEvent *event, void *user_data);
-static void report_button_press (const AccessibleEvent *event, void *user_data);
-static void check_property_change (const AccessibleEvent *event, void *user_data);
-static SPIBoolean report_command_key_event (const AccessibleKeystroke *stroke, void *user_data);
-static SPIBoolean report_ordinary_key_event (const AccessibleKeystroke *stroke, void *user_data);
-static void get_environment_vars (void);
-
-static int _festival_init (void);
-static void _festival_say (const char *text, const char *voice, SPIBoolean shutup);
-static void _festival_write (const char *buff, int fd);
-
-#ifdef PRINT_TREE
-static void print_accessible_tree (Accessible *accessible, char *prefix);
-#endif
-
-#ifdef MAGNIFIER_ENABLED
-static SPIBoolean use_magnifier = FALSE;
-#endif
-
-static SPIBoolean use_festival = FALSE;
-static SPIBoolean festival_chatty = FALSE;
-static SPIBoolean name_changed = FALSE;
-
-static AccessibleEventListener *focus_listener;
-static AccessibleEventListener *property_listener;
-static AccessibleEventListener *generic_listener;
-static AccessibleEventListener *window_listener;
-static AccessibleEventListener *button_listener;
-static AccessibleEventListener *text_listener;
-static AccessibleKeystrokeListener *command_key_listener;
-static AccessibleKeystrokeListener *ordinary_key_listener;
-static AccessibleKeySet *command_keyset;
-
-int
-main (int argc, char **argv)
-{
- int i, j;
- int n_desktops;
- int n_apps;
- char *s;
- Accessible *desktop;
- Accessible *application;
- const char *modules;
-
- if ((argc > 1) && (!strncmp (argv[1], "-h", 2)))
- {
- printf ("Usage: simple-at\n");
- printf ("\tEnvironment variables used:\n\t\tFESTIVAL\n\t\tMAGNIFIER\n\t\tFESTIVAL_CHATTY\n");
- exit (0);
- }
-
- modules = g_getenv ("GTK_MODULES");
- if (!modules || modules [0] == '\0')
- {
- putenv ("GTK_MODULES=");
- }
- modules = NULL;
-
- SPI_init ();
-
- focus_listener = SPI_createAccessibleEventListener (report_focus_event, NULL);
- property_listener = SPI_createAccessibleEventListener (check_property_change, NULL);
- generic_listener = SPI_createAccessibleEventListener (report_generic_event, NULL);
- window_listener = SPI_createAccessibleEventListener (report_window_event, NULL);
- text_listener = SPI_createAccessibleEventListener (report_text_event, NULL);
- button_listener = SPI_createAccessibleEventListener (report_button_press, NULL);
- SPI_registerGlobalEventListener (focus_listener, "focus:");
- SPI_registerGlobalEventListener (property_listener, "object:property-change");
-/* :accessible-selection"); */
- SPI_registerGlobalEventListener (property_listener, "object:property-change:accessible-name");
- SPI_registerGlobalEventListener (generic_listener, "object:selection-changed");
- SPI_registerGlobalEventListener (generic_listener, "object:children-changed");
- SPI_registerGlobalEventListener (generic_listener, "object:visible-data-changed");
- SPI_registerGlobalEventListener (generic_listener, "object:text-selection-changed");
- SPI_registerGlobalEventListener (text_listener, "object:text-caret-moved");
- SPI_registerGlobalEventListener (text_listener, "object:text-changed");
- SPI_registerGlobalEventListener (button_listener, "Gtk:GtkWidget:button-press-event");
- SPI_registerGlobalEventListener (window_listener, "window:minimize");
- SPI_registerGlobalEventListener (window_listener, "window:activate");
- n_desktops = SPI_getDesktopCount ();
-
- for (i=0; i<n_desktops; ++i)
- {
- desktop = SPI_getDesktop (i);
- s = Accessible_getName (desktop);
- fprintf (stderr, "desktop %d name: %s\n", i, s);
- SPI_freeString (s);
- n_apps = Accessible_getChildCount (desktop);
- for (j=0; j<n_apps; ++j)
- {
- application = Accessible_getChildAtIndex (desktop, j);
- s = Accessible_getName (application);
- fprintf (stderr, "app %d name: %s\n", j, s ? s : "(nil)");
-#ifdef PRINT_TREE
- print_accessible_tree (application, "*");
-#endif
- SPI_freeString (s);
- Accessible_unref (application);
- }
- Accessible_unref (desktop);
- }
-
- /* prepare the keyboard snoopers */
- command_key_listener = SPI_createAccessibleKeystrokeListener (report_command_key_event, NULL);
- ordinary_key_listener = SPI_createAccessibleKeystrokeListener (report_ordinary_key_event, NULL);
-
- command_keyset = SPI_createAccessibleKeySet (11, "qmf23456789", NULL, NULL);
-
- /* will listen only to Control-Alt-q KeyPress events */
- SPI_registerAccessibleKeystrokeListener(command_key_listener,
- command_keyset,
- SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL,
- (unsigned long) ( SPI_KEY_PRESSED ),
- SPI_KEYLISTENER_ALL_WINDOWS);
-
- /* will listen only to CAPSLOCK key events, both press and release */
- SPI_registerAccessibleKeystrokeListener(ordinary_key_listener,
- (AccessibleKeySet *) SPI_KEYSET_ALL_KEYS,
- SPI_KEYMASK_SHIFTLOCK,
- (unsigned long) ( SPI_KEY_PRESSED | SPI_KEY_RELEASED ),
- SPI_KEYLISTENER_NOSYNC);
-
- get_environment_vars ();
-
- SPI_event_main ();
-
- putenv ("AT_BRIDGE_SHUTDOWN=1");
-
- return SPI_exit ();
-}
-
-static void
-get_environment_vars (void)
-{
- if (g_getenv ("FESTIVAL"))
- {
- fprintf (stderr, "Using festival\n");
- use_festival = TRUE;
- if (g_getenv ("FESTIVAL_CHATTY"))
- {
- festival_chatty = TRUE;
- }
- }
-#ifdef MAGNIFIER_ENABLED
- if (g_getenv ("MAGNIFIER"))
- {
- fprintf (stderr, "Using magnifier\n");
- use_magnifier = TRUE;
- }
- else
- {
- fprintf (stderr, "Not using magnifier\n");
- }
-#endif
-
- if (!use_festival)
- {
- fprintf (stderr, "No speech output\n");
- }
-}
-
-#ifdef PRINT_TREE
-static void
-print_accessible_tree (Accessible *accessible, char *prefix)
-{
- int n_children;
- int i;
- char *name;
- char *role_name;
- char *parent_name = NULL;
- char *parent_role = NULL;
- char child_prefix[100];
- Accessible *child;
- Accessible *parent;
-
- strncpy (child_prefix, prefix, 98);
- strcat (child_prefix, "*");
- parent = Accessible_getParent (accessible);
- if (parent)
- {
- parent_name = Accessible_getName (parent);
- parent_role = Accessible_getRoleName (parent);
- Accessible_unref (parent);
- }
- name = Accessible_getName (accessible);
- role_name = Accessible_getRoleName (accessible);
- fprintf (stdout, "%sAccessible [%s] \"%s\"; parent [%s] %s.\n",
- prefix, role_name, name ? name : "(nil)",
- parent_role ? parent_role : "(nil)",
- parent_name ? parent_name : "(nil)");
- SPI_freeString (name);
- SPI_freeString (role_name);
- SPI_freeString (parent_name);
- SPI_freeString (parent_role);
- n_children = Accessible_getChildCount (accessible);
- for (i = 0; i < n_children; ++i)
- {
- child = Accessible_getChildAtIndex (accessible, i);
- print_accessible_tree (child, child_prefix);
- Accessible_unref (child);
- }
-}
-#endif
-
-void
-report_focussed_accessible (Accessible *obj, SPIBoolean shutup_previous_speech)
-{
- char *s;
- int len;
- long x, y, width, height;
- /* hack for GUADEC demo, to make sure name changes are spoken */
- shutup_previous_speech = (shutup_previous_speech && !name_changed);
-
- if (use_festival)
- {
- if (festival_chatty)
- {
- s = Accessible_getRoleName (obj);
- _festival_say (s, "voice_don_diphone", shutup_previous_speech);
- SPI_freeString (s);
- }
- fprintf (stderr, "getting Name\n");
- s = Accessible_getName (obj);
- _festival_say (s, "voice_kal_diphone",
- shutup_previous_speech || festival_chatty);
- SPI_freeString (s);
- }
-
- if (Accessible_isComponent (obj))
- {
- AccessibleComponent *component = Accessible_getComponent (obj);
- AccessibleComponent_getExtents (component, &x, &y, &width, &height,
- SPI_COORD_TYPE_SCREEN);
- fprintf (stderr, "Bounding box: (%ld, %ld) ; (%ld, %ld)\n",
- x, y, x+width, y+height);
- if (Accessible_isText (obj))
- {
- long x0, y0, xN, yN, w0, h0, wN, hN, nchars;
- AccessibleText *text = Accessible_getText (obj);
- nchars = AccessibleText_getCharacterCount (text);
- if (nchars > 0)
- {
- AccessibleText_getCharacterExtents (text, 0, &x0, &y0, &w0, &h0,
- SPI_COORD_TYPE_SCREEN);
- AccessibleText_getCharacterExtents (text, nchars-1, &xN, &yN, &wN, &hN,
- SPI_COORD_TYPE_SCREEN);
- x = MIN (x0, xN);
- width = MAX (x0 + w0, xN + wN) - x;
- fprintf (stderr, "Text bounding box: (%ld, %ld) ; (%ld, %ld)\n",
- x, y, x+width, y+height);
- }
- }
-#ifdef MAGNIFIER_ENABLED
- if (use_magnifier) {
- magnifier_set_roi ((short) 0, x, y, width, height);
- }
-#endif
- }
-
-
- if (Accessible_isValue (obj))
- {
- AccessibleValue *value = Accessible_getValue (obj);
- fprintf (stderr, "Current value = %f, min = %f; max = %f\n",
- AccessibleValue_getCurrentValue (value),
- AccessibleValue_getMinimumValue (value),
- AccessibleValue_getMaximumValue (value));
- }
- /* if this is a text object, speak the first sentence. */
-
- if (Accessible_isText(obj))
-
- {
- AccessibleText *text_interface;
- long start_offset, end_offset;
- char *first_sentence = "empty";
- text_interface = Accessible_getText (obj);
- first_sentence = AccessibleText_getTextAtOffset (
- text_interface, (long) 0, SPI_TEXT_BOUNDARY_SENTENCE_START, &start_offset, &end_offset);
- if (first_sentence && use_festival)
- {
- _festival_say(first_sentence, "voice_don_diphone", FALSE);
- SPI_freeString (first_sentence);
- }
- len = AccessibleText_getCharacterCount (text_interface);
- s = AccessibleText_getText (text_interface, 0, len);
- fprintf (stderr, "done reporting on focussed object, text=%s\n", s);
- }
-}
-
-void
-report_focus_event (const AccessibleEvent *event, void *user_data)
-{
- char *s;
-
- g_return_if_fail (event->source != NULL);
- s = Accessible_getName (event->source);
- if (s)
- {
- fprintf (stderr, "%s event from %s\n", event->type, s);
- SPI_freeString (s);
- report_focussed_accessible (event->source, TRUE);
- }
- Accessible_getParent (event->source);
- name_changed = FALSE;
-}
-
-void
-report_generic_event (const AccessibleEvent *event, void *user_data)
-{
- fprintf (stderr, "%s event received\n", event->type);
-}
-
-void
-report_window_event (const AccessibleEvent *event, void *user_data)
-{
- fprintf (stderr, "%s event received\n", event->type);
- if (!strcmp (event->type, "window:activate"))
- {
- print_accessible_tree (event->source, "window");
- }
-}
-
-void
-report_text_event (const AccessibleEvent *event, void *user_data)
-{
- AccessibleText *text = Accessible_getText (event->source);
- fprintf (stderr, "%s event received\n", event->type);
-#ifdef MAGNIFIER_ENABLED
- if (use_magnifier && strcmp (event->type, "object:text-changed"))
- {
- long offset = AccessibleText_getCaretOffset (text);
- long x, y, w, h;
- fprintf (stderr, "offset %d\n", (int) offset);
- AccessibleText_getCharacterExtents (text, offset, &x, &y, &w, &h,
- SPI_COORD_TYPE_SCREEN);
- fprintf (stderr, "new roi %d %d %d %d\n", (int) x, (int) y, (int) w, (int) h);
- magnifier_set_roi ((short) 0, x, y, w, h);
- }
-#endif
- if (!strcmp (event->type, "object:text-changed"))
- {
- long start, end;
- char *new_text = AccessibleText_getTextAtOffset (text, (long) event->detail1, SPI_TEXT_BOUNDARY_WORD_START, &start, &end);
- _festival_say (new_text, "voice_kal_diphone", FALSE);
- fprintf (stderr, "text changed: %s", new_text ? new_text : "");
- SPI_freeString (new_text);
- }
- else
- {
- long start, end;
- char *word_text = AccessibleText_getTextAtOffset (text, (long) event->detail1, SPI_TEXT_BOUNDARY_WORD_START, &start, &end);
- char *sentence_text = AccessibleText_getTextAtOffset (text, (long) event->detail1, SPI_TEXT_BOUNDARY_SENTENCE_START, &start, &end);
- fprintf (stderr, "text changed: word %s; sentence %s at %ld",
- (word_text ? word_text : ""),
- (sentence_text ? sentence_text : ""),
- event->detail1);
- if (word_text) SPI_freeString (word_text);
- if (sentence_text) SPI_freeString (sentence_text);
- }
-}
-
-void
-report_button_press (const AccessibleEvent *event, void *user_data)
-{
- char *s;
-
- g_return_if_fail (event->source != NULL);
-
- s = Accessible_getName (event->source);
-
- fprintf (stderr, "%s event from %s\n", event->type, s);
- SPI_freeString (s);
- s = Accessible_getDescription (event->source);
- fprintf (stderr, "Object description %s\n", s);
- SPI_freeString (s);
-}
-
-void
-check_property_change (const AccessibleEvent *event, void *user_data)
-{
- AccessibleSelection *selection = Accessible_getSelection (event->source);
- int n_selections;
- int i;
- char *s;
- fprintf (stderr, "property change event!\n");
- if (selection)
- {
- n_selections = (int) AccessibleSelection_getNSelectedChildren (selection);
- s = Accessible_getName (event->source);
- fprintf (stderr, "(Property) %s event from %s, %d selected children\n",
- event->type, s, n_selections);
- SPI_freeString (s);
- /* for now, speak entire selection set */
- for (i=0; i<n_selections; ++i)
- {
- Accessible *obj = AccessibleSelection_getSelectedChild (selection, (long) i);
- g_return_if_fail (obj);
- s = Accessible_getName (obj);
- fprintf (stderr, "Child %d, name=%s\n", i, s);
- SPI_freeString (s);
- report_focussed_accessible (obj, i==0);
- }
- }
- else if (!strcmp (event->type, "object:property-change:accessible-name"))
- {
- name_changed = TRUE;
- report_focussed_accessible (event->source, TRUE);
- }
- else
- {
- fprintf (stderr, "Property change %s received\n", event->type);
- }
-}
-
-static void
-simple_at_exit (void)
-{
- SPI_deregisterGlobalEventListenerAll (focus_listener);
- AccessibleEventListener_unref (focus_listener);
-
- SPI_deregisterGlobalEventListenerAll (property_listener);
- AccessibleEventListener_unref (property_listener);
-
- SPI_deregisterGlobalEventListenerAll (generic_listener);
- AccessibleEventListener_unref (generic_listener);
-
- SPI_deregisterGlobalEventListenerAll (text_listener);
- AccessibleEventListener_unref (text_listener);
-
- SPI_deregisterGlobalEventListenerAll (button_listener);
- AccessibleEventListener_unref (button_listener);
-
- SPI_deregisterAccessibleKeystrokeListener (command_key_listener, SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL);
- AccessibleKeystrokeListener_unref (command_key_listener);
- SPI_freeAccessibleKeySet (command_keyset);
-
- SPI_deregisterAccessibleKeystrokeListener (ordinary_key_listener, SPI_KEYMASK_SHIFTLOCK);
- AccessibleKeystrokeListener_unref (ordinary_key_listener);
-
- SPI_event_quit ();
-}
-
-static SPIBoolean
-is_command_key (const AccessibleKeystroke *key)
-{
- switch (key->keyID)
- {
- case 'Q':
- case 'q':
- simple_at_exit();
- return TRUE; /* not reached */
-#ifdef MAGNIFIER_ENABLED
- case 'M':
- case 'm':
- use_magnifier = ! use_magnifier;
- fprintf (stderr, "%ssing magnifier\n", use_magnifier ? "U" : "Not u");
- return TRUE;
-#endif
- case 'F':
- case 'f':
- use_festival = ! use_festival;
- fprintf (stderr, "%speech output\n", use_festival ? "S" : "No s");
- return TRUE;
- default:
- return FALSE;
- }
-}
-
-static SPIBoolean
-report_command_key_event (const AccessibleKeystroke *key, void *user_data)
-{
- fprintf (stderr, "Command KeyEvent %s%c (keycode %d); string=%s; time=%lx\n",
- (key->modifiers & SPI_KEYMASK_ALT)?"Alt-":"",
- ((key->modifiers & SPI_KEYMASK_SHIFT)^(key->modifiers & SPI_KEYMASK_SHIFTLOCK))?
- (char) toupper((int) key->keyID) : (char) tolower((int) key->keyID),
- (int) key->keycode,
- key->keystring,
- (long int) key->timestamp);
- return is_command_key (key);
-}
-
-
-static SPIBoolean
-report_ordinary_key_event (const AccessibleKeystroke *key, void *user_data)
-{
- fprintf (stderr, "Received key event:\tsym %ld\n\tmods %x\n\tcode %d\n\tstring=\'%s\'\n\ttime %lx\n",
- (long) key->keyID,
- (unsigned int) key->modifiers,
- (int) key->keycode,
- key->keystring,
- (long int) key->timestamp);
- return FALSE;
-}
-
-static int
-_festival_init (void)
-{
- int fd;
- struct sockaddr_in name;
- int tries = 2;
-
- name.sin_family = AF_INET;
- name.sin_port = htons (1314);
- name.sin_addr.s_addr = htonl(INADDR_ANY);
- fd = socket (PF_INET, SOCK_STREAM, 0);
-
- while (connect(fd, (struct sockaddr *) &name, sizeof (name)) < 0) {
- if (!tries--) {
- perror ("connect");
- return -1;
- }
- }
-
- _festival_write ("(audio_mode'async)\n", fd);
- _festival_write ("(Parameter.set 'Duration_Model 'Tree_ZScore)\n", fd);
- _festival_write ("(Parameter.set 'Duration_Stretch 0.75)\n", fd);
- return fd;
-}
-
-static void
-_festival_say (const char *text, const char *voice, SPIBoolean shutup)
-{
- static int fd = 0;
- gchar *quoted;
- gchar *p;
- gchar prefix[50];
- static gchar voice_spec[32];
-
- if (!fd)
- {
- fd = _festival_init ();
- }
-
- fprintf (stderr, "saying text: %s\n", text);
-
- quoted = g_malloc(64+strlen(text)*2);
-
- sprintf (prefix, "(SayText \"");
-
- strncpy(quoted, prefix, 10);
- p = quoted+strlen(prefix);
- while (*text) {
- if ( *text == '\\' || *text == '"' )
- *p = '\\';
- *p++ = *text++;
- }
- *p++ = '"';
- *p++ = ')';
- *p++ = '\n';
- *p = 0;
-
- if (shutup) _festival_write ("(audio_mode'shutup)\n", fd);
- if (voice && (strncmp (voice, (char *) (voice_spec+1), strlen(voice))))
- {
- snprintf (voice_spec, 32, "(%s)\n", voice);
- _festival_write (voice_spec, fd);
- _festival_write ("(Parameter.set 'Duration_Model 'Tree_ZScore)\n", fd);
- _festival_write ("(Parameter.set 'Duration_Stretch 0.75)\n", fd);
- }
-
- _festival_write (quoted, fd);
-
- g_free(quoted);
-}
-
-static void
-_festival_write (const gchar *command_string, int fd)
-{
- fprintf(stderr, command_string);
- if (fd < 0) {
- perror("socket");
- return;
- }
- write(fd, command_string, strlen(command_string));
-}
-
diff --git a/tests/cspi/simple-test.c b/tests/cspi/simple-test.c
deleted file mode 100644
index 21c74a6..0000000
--- a/tests/cspi/simple-test.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2008 Codethink Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <glib.h>
-#include <cspi/spi.h>
-
-#include <stdio.h>
-
-int
-main (int argc, char **argv)
-{
- gint i;
- gint n_desktops;
- gchar *s;
-
- SPI_init ();
-
- n_desktops = SPI_getDesktopCount ();
-
- for (i=0; i<n_desktops; ++i) {
- Accessible *desktop;
-
- desktop = SPI_getDesktop (i);
- s = Accessible_getName (desktop);
- fprintf (stderr, "desktop %d name: %s\n", i, s);
- SPI_freeString (s);
- Accessible_unref (desktop);
- }
- return SPI_exit ();
-}
diff --git a/tests/cspi/test-simple.c b/tests/cspi/test-simple.c
deleted file mode 100644
index 62bcb31..0000000
--- a/tests/cspi/test-simple.c
+++ /dev/null
@@ -1,816 +0,0 @@
-/*
- * test-simple.c: A set of simple regression tests
- * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
- *
- * Copyright 2001 Ximian, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * ******** Do not copy this code as an example *********
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <locale.h>
-#include <gtk/gtk.h>
-#include <cspi/spi.h>
-#include <cspi/spi-private.h>
-
-#include "dbus/dbus.h"
-
-/* Known bugs */
-#define WHOLE_STRING -1
-
-static void validate_accessible (Accessible *accessible,
- gboolean has_parent,
- gboolean recurse_down);
-
-#define WINDOW_MAGIC 0x123456a
-#define TEST_STRING_A "A test string"
-#define TEST_STRING_A_OBJECT "A_test_string_object"
-#define TEST_STRING_B "Another test string"
-
-static int print_tree_depth = 0;
-static gboolean print_tree = FALSE;
-static gboolean do_poke = FALSE;
-static gboolean key_press_received = FALSE;
-static gboolean key_release_received = FALSE;
-
-typedef struct {
- gulong magic;
- GtkWidget *window;
-} TestWindow;
-
-static gboolean
-focus_me (GtkWidget *widget)
-{
- AtkObject *aobject = atk_implementor_ref_accessible (
- ATK_IMPLEMENTOR (widget));
-
- /* Force a focus event - even if the WM focused
- * us before our at-bridge's idle handler registered
- * our interest */
- if (!GTK_WIDGET_HAS_FOCUS (widget))
- gtk_widget_grab_focus (widget);
-/* else: FIXME - gtk_widget_grab_focus should send a notify */
- atk_focus_tracker_notify (aobject);
-
- g_object_unref (G_OBJECT (aobject));
-
- return FALSE;
-}
-
-static void
-test_window_add_and_show (GtkContainer *container, GtkWidget *widget)
-{
- gtk_container_add (container, widget);
- gtk_widget_show (widget);
-}
-
-static GtkWidget *
-create_tree (void)
-{
- GtkWidget *widget;
- GtkTreeIter iter;
- GtkListStore *store;
- GtkTreeViewColumn *column;
-
- store = gtk_list_store_new (1, G_TYPE_STRING);
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter, 0, TEST_STRING_A, -1);
- column = gtk_tree_view_column_new_with_attributes ("String",
- gtk_cell_renderer_text_new (), "text", 0, NULL);
- widget = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
- g_object_unref (G_OBJECT (store));
- gtk_tree_view_append_column (GTK_TREE_VIEW (widget), column);
-
- return widget;
-}
-
-static TestWindow *
-create_test_window (void)
-{
- TestWindow *win = g_new0 (TestWindow, 1);
- GtkWidget *widget, *vbox;
- AtkObject *obj;
-
- win->magic = WINDOW_MAGIC;
- win->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
- gtk_widget_show (win->window);
-
- vbox = gtk_vbox_new (0, 0);
- gtk_container_add (GTK_CONTAINER (win->window), vbox);
- gtk_widget_show (vbox);
-
- widget = gtk_entry_new ();
- gtk_entry_set_text (GTK_ENTRY (widget), TEST_STRING_A);
- obj = gtk_widget_get_accessible (widget);
- atk_object_set_name (obj, TEST_STRING_A_OBJECT);
-
- test_window_add_and_show (GTK_CONTAINER (vbox), widget);
-
- widget = gtk_button_new_with_label ("_Foobar");
- test_window_add_and_show (GTK_CONTAINER (vbox), widget);
-
- widget = gtk_hseparator_new ();
- test_window_add_and_show (GTK_CONTAINER (vbox), widget);
-
- widget = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION,
- GTK_ICON_SIZE_LARGE_TOOLBAR);
- test_window_add_and_show (GTK_CONTAINER (vbox), widget);
-
- widget = g_object_new (GTK_TYPE_HSCALE, NULL);
- gtk_range_set_range (GTK_RANGE (widget), 0.0, 100.0);
- test_window_add_and_show (GTK_CONTAINER (vbox), widget);
-
- widget = create_tree ();
- test_window_add_and_show (GTK_CONTAINER (vbox), widget);
-
- g_idle_add ((GSourceFunc) focus_me, win->window);
-
- return win;
-}
-
-static void
-test_window_destroy (TestWindow *win)
-{
- gtk_widget_destroy (win->window);
- g_free (win);
-}
-
-static void
-test_roles (void)
-{
- int i;
-
- fprintf (stderr, "Testing roles...\n");
- for (i = -1; i < 1000; i++)
- g_assert (AccessibleRole_getName (i) != NULL);
-
- g_assert (!strcmp (AccessibleRole_getName (SPI_ROLE_FILE_CHOOSER), "file-chooser"));
- g_assert (!strcmp (AccessibleRole_getName (SPI_ROLE_RADIO_BUTTON), "radio-button"));
- g_assert (!strcmp (AccessibleRole_getName (SPI_ROLE_TABLE), "table"));
- g_assert (!strcmp (AccessibleRole_getName (SPI_ROLE_WINDOW), "window"));
-}
-
-static void
-test_action (AccessibleAction *action)
-{
- gint n_actions, i;
- gchar *s, *sd;
- g_assert ((n_actions = AccessibleAction_getNActions (action)) >= 0);
-
- fprintf (stderr, "Testing actions...");
- for (i = 0; i < n_actions; ++i)
- {
- s = AccessibleAction_getName (action, i);
- g_assert (s);
- sd = AccessibleAction_getDescription (action, i);
- g_assert (sd);
- fprintf (stderr, "%d: %s (%s); ", i, s, sd);
- SPI_freeString (s);
- SPI_freeString (sd);
- g_assert (AccessibleAction_doAction (action, i));
- }
- fprintf (stderr, "\n");
-}
-
-static void
-test_desktop (void)
-{
- Accessible *desktop;
- Accessible *application;
- Accessible **list;
-
- fprintf (stderr, "Testing desktop...\n");
-
- g_assert (SPI_getDesktop (-1) == NULL);
- desktop = SPI_getDesktop (0);
- g_assert (desktop != NULL);
-
- g_assert ((SPI_getDesktopList (&list)) > 0);
- g_assert (list[0] == desktop);
- SPI_freeDesktopList (list);
-
- validate_accessible (desktop, FALSE, FALSE);
-
- application = Accessible_getChildAtIndex (desktop, 0);
- g_assert (application != NULL);
- AccessibleApplication_unref (application);
-
- Accessible_unref (desktop);
-}
-
-static void
-test_application (Accessible *application)
-{
- char *str;
-
- fprintf (stderr, "Testing application ...\n");
- g_assert (Accessible_isApplication (application));
- g_assert (Accessible_getApplication (application) ==
- application);
- AccessibleApplication_unref (application);
-
- str = AccessibleApplication_getToolkitName (application);
- g_assert (str != NULL);
- g_assert (!strcmp (str, "GAIL"));
- SPI_freeString (str);
-
- str = AccessibleApplication_getLocale (application, LC_MESSAGES);
- g_assert (!strcmp (str, setlocale (LC_MESSAGES, NULL)));
- SPI_freeString (str);
-
- str = AccessibleApplication_getVersion (application);
- g_assert (str != NULL);
- SPI_freeString (str);
-
- AccessibleApplication_getID (application);
-}
-
-static void
-test_editable_text (AccessibleEditableText *etext)
-{
- char *str;
- AccessibleText *text;
-
- fprintf (stderr, "Testing editable text ...\n");
-
- g_assert (Accessible_isText (etext));
- text = Accessible_getText (etext);
-
- AccessibleEditableText_setTextContents (
- etext, TEST_STRING_B);
-
- str = AccessibleText_getText (text, 0, WHOLE_STRING);
- g_assert (!strcmp (str, TEST_STRING_B));
-
- SPI_freeString (str);
-
- /* FIXME: lots more editing here */
-
- AccessibleEditableText_setTextContents (
- etext, TEST_STRING_A);
-
- AccessibleText_unref (text);
-}
-
-static void
-test_table (AccessibleTable *table)
-{
- Accessible *header;
- gint index;
- gint rows, columns;
-
- fprintf (stderr, "Testing table ...\n");
-
- rows = AccessibleTable_getNRows (table);
- g_assert (rows > 0);
-
- columns = AccessibleTable_getNColumns (table);
- g_assert (columns > 0);
-
- index = AccessibleTable_getIndexAt (table, rows - 1, columns - 1);
-
- g_assert (AccessibleTable_getRowAtIndex (table, index) == rows - 1);
-
- g_assert (AccessibleTable_getColumnAtIndex (table, index) == columns - 1);
-
- g_assert ((header = AccessibleTable_getColumnHeader (table, 0)));
- Accessible_unref (header);
-
- AccessibleTable_isSelected (table, 0, 0);
-
- /* FIXME: lots more tests */
-}
-
-static void
-test_text (AccessibleText *text)
-{
- char *str;
-
- fprintf (stderr, "Testing text ...\n");
-
- g_assert (AccessibleText_getCharacterCount (text) ==
- strlen (TEST_STRING_A));
-
- str = AccessibleText_getText (text, 0, WHOLE_STRING);
- g_assert (!strcmp (str, TEST_STRING_A));
- SPI_freeString (str);
-
- str = AccessibleText_getText (text, 0, 5);
- g_assert (!strncmp (str, TEST_STRING_A, 5));
- SPI_freeString (str);
-
- AccessibleText_setCaretOffset (text, 7);
- g_assert (AccessibleText_getCaretOffset (text) == 7);
-
- /* FIXME: lots more tests - selections etc. etc. */
-}
-
-static void
-test_value (AccessibleValue *value)
-{
- float original_value;
-
- fprintf (stderr, "Testing value ...\n");
-
- original_value = AccessibleValue_getCurrentValue (value);
-
- g_assert (AccessibleValue_getCurrentValue (value) <=
- AccessibleValue_getMaximumValue (value));
-
- g_assert (AccessibleValue_getCurrentValue (value) >=
- AccessibleValue_getMinimumValue (value));
-
- AccessibleValue_setCurrentValue (value,
- AccessibleValue_getMinimumValue (value));
-
- g_assert (AccessibleValue_getCurrentValue (value) ==
- AccessibleValue_getMinimumValue (value));
-
- AccessibleValue_setCurrentValue (value,
- AccessibleValue_getMaximumValue (value));
-
- g_assert (AccessibleValue_getCurrentValue (value) ==
- AccessibleValue_getMaximumValue (value));
-
- AccessibleValue_setCurrentValue (value, original_value);
-
- g_assert (AccessibleValue_getCurrentValue (value) == original_value);
-}
-
-static void
-test_component (AccessibleComponent *component)
-{
- long x, y, width, height;
-
- fprintf (stderr, "Testing component...\n");
-
- AccessibleComponent_getExtents (
- component, &x, &y, &width, &height, SPI_COORD_TYPE_SCREEN);
-
- AccessibleComponent_getPosition (
- component, &x, &y, SPI_COORD_TYPE_SCREEN);
-
- AccessibleComponent_getSize (component, &width, &height);
-
- if (width > 0 && height > 0) {
-#ifdef FIXME
- Accessible *accessible, *componentb;
-#endif
-
- g_assert (AccessibleComponent_contains (
- component, x, y, SPI_COORD_TYPE_SCREEN));
-
- g_assert (AccessibleComponent_contains (
- component, x + width - 1, y, SPI_COORD_TYPE_SCREEN));
-
- g_assert (AccessibleComponent_contains (
- component, x + width - 1, y + height - 1,
- SPI_COORD_TYPE_SCREEN));
-
-#ifdef FIXME
- accessible = AccessibleComponent_getAccessibleAtPoint (
- component, x, y, SPI_COORD_TYPE_SCREEN);
-
- g_assert (Accessible_isComponent (accessible));
- componentb = Accessible_getComponent (accessible);
- g_assert (componentb == component);
-
- AccessibleComponent_unref (componentb);
- Accessible_unref (accessible);
-#endif
- }
-
- AccessibleComponent_getLayer (component);
- AccessibleComponent_getMDIZOrder (component);
-/* AccessibleComponent_grabFocus (component); */
-}
-
-static void
-test_image (AccessibleImage *image)
-{
- char *desc;
- long int x = -1, y = -1, width = -1, height = -1;
-
- desc = AccessibleImage_getImageDescription (image);
- g_assert (desc != NULL);
- SPI_freeString (desc);
-
- AccessibleImage_getImagePosition (image, &x, &y,
- SPI_COORD_TYPE_SCREEN);
- AccessibleImage_getImageSize (image, &width, &height);
- AccessibleImage_getImageExtents (image, &x, &y, &width, &height,
- SPI_COORD_TYPE_WINDOW);
-}
-
-static void
-validate_tree (Accessible *accessible,
- gboolean has_parent,
- gboolean recurse_down)
-{
- Accessible *parent;
- long len, i;
-
- parent = Accessible_getParent (accessible);
- if (has_parent) {
- long index;
- Accessible *child_at_index;
-
- g_assert (parent != NULL);
-
- index = Accessible_getIndexInParent (accessible);
- g_assert (index >= 0);
-
- child_at_index = Accessible_getChildAtIndex (parent, index);
-
- g_assert (child_at_index == accessible);
-
- Accessible_unref (child_at_index);
- Accessible_unref (parent);
- }
-
- len = Accessible_getChildCount (accessible);
- print_tree_depth++;
- for (i = 0; i < len; i++) {
- Accessible *child;
-
- child = Accessible_getChildAtIndex (accessible, i);
-#ifdef ROPEY
- if (!child)
- fprintf (stderr, "Unusual - ChildGone at %ld\n", i);
-
- g_assert (Accessible_getIndexInParent (child) == i);
- g_assert (Accessible_getParent (child) == accessible);
-#endif
-
- if (recurse_down && child)
- validate_accessible (child, has_parent, recurse_down);
-
- Accessible_unref (child);
- }
- print_tree_depth--;
-}
-
-static void
-validate_accessible (Accessible *accessible,
- gboolean has_parent,
- gboolean recurse_down)
-{
- Accessible *tmp;
- char *name, *descr;
- AccessibleRole role;
- AccessibleRelation **relations;
- char *role_name;
- GString *item_str = g_string_new ("");
- int i;
-
- name = Accessible_getName (accessible);
- g_assert (name != NULL);
-
- descr = Accessible_getDescription (accessible);
- g_assert (descr != NULL);
-
- role = Accessible_getRole (accessible);
- g_assert (role != SPI_ROLE_INVALID);
- role_name = Accessible_getRoleName (accessible);
- g_assert (role_name != NULL);
-
- relations = Accessible_getRelationSet (accessible);
- g_assert (relations != NULL);
-
- for (i = 0; relations [i]; i++) {
- AccessibleRelationType type;
- int targets;
-
- fprintf (stderr, "relation %d\n", i);
-
- type = AccessibleRelation_getRelationType (relations [i]);
- g_assert (type != SPI_RELATION_NULL);
-
- targets = AccessibleRelation_getNTargets (relations [i]);
- g_assert (targets != -1);
-
- AccessibleRelation_unref (relations [i]);
- relations [i] = NULL;
- }
- free (relations);
-
- if (print_tree) {
- int i;
-
- for (i = 0; i < print_tree_depth; i++)
- fputc (' ', stderr);
- fputs ("|-> [ ", stderr);
- }
-
- if (Accessible_isAction (accessible)) {
- tmp = Accessible_getAction (accessible);
- g_assert (tmp != NULL);
- if (print_tree)
- fprintf (stderr, "At");
- else
- test_action (tmp);
- AccessibleAction_unref (tmp);
- }
-
- if (Accessible_isApplication (accessible)) {
- tmp = Accessible_getApplication (accessible);
- if (print_tree)
- fprintf (stderr, "Ap");
- else
- test_application (tmp);
- AccessibleApplication_unref (tmp);
- }
-
- if (Accessible_isComponent (accessible)) {
- tmp = Accessible_getComponent (accessible);
- g_assert (tmp != NULL);
- if (print_tree)
- fprintf (stderr, "Co");
- else
- test_component (tmp);
- AccessibleComponent_unref (tmp);
- }
-
- if (Accessible_isEditableText (accessible)) {
- tmp = Accessible_getEditableText (accessible);
- g_assert (tmp != NULL);
- if (print_tree)
- fprintf (stderr, "Et");
- else
- test_editable_text (tmp);
- AccessibleEditableText_unref (tmp);
- }
-
- if (Accessible_isHypertext (accessible)) {
- tmp = Accessible_getHypertext (accessible);
- g_assert (tmp != NULL);
- if (print_tree)
- fprintf (stderr, "Ht");
- AccessibleHypertext_unref (tmp);
- }
-
- if (Accessible_isImage (accessible)) {
- tmp = Accessible_getImage (accessible);
- g_assert (tmp != NULL);
- if (print_tree) {
- char *desc;
-
- fprintf (stderr, "Im");
-
- desc = AccessibleImage_getImageDescription (tmp);
- g_string_append_printf (
- item_str, " image descr: '%s'", desc);
- SPI_freeString (desc);
- } else
- test_image (tmp);
-
- AccessibleImage_unref (tmp);
- }
-
- if (Accessible_isSelection (accessible)) {
- tmp = Accessible_getSelection (accessible);
- g_assert (tmp != NULL);
- if (print_tree)
- fprintf (stderr, "Se");
- AccessibleSelection_unref (tmp);
- }
-
- if (Accessible_isTable (accessible)) {
- tmp = Accessible_getTable (accessible);
- g_assert (tmp != NULL);
- if (print_tree)
- fprintf (stderr, "Ta");
- else
- test_table (tmp);
- AccessibleTable_unref (tmp);
- }
-
- if (Accessible_isText (accessible)) {
- tmp = Accessible_getText (accessible);
- g_assert (tmp != NULL);
- if (print_tree)
- fprintf (stderr, "Te");
- else {
- if (strcmp (name, TEST_STRING_A_OBJECT) == 0)
- test_text (tmp);
- }
- AccessibleText_unref (tmp);
- }
-
- if (Accessible_isValue (accessible)) {
- tmp = Accessible_getValue (accessible);
- g_assert (tmp != NULL);
- if (print_tree)
- fprintf (stderr, "Va");
- else
- test_value (tmp);
- AccessibleValue_unref (tmp);
- }
-
- if (print_tree)
- fprintf (stderr, " ] '%s' (%s) - %s: %s\n",
- name, descr, role_name, item_str->str);
-
- SPI_freeString (name);
- SPI_freeString (descr);
- SPI_freeString (role_name);
- g_string_free (item_str, TRUE);
-
- validate_tree (accessible, has_parent, recurse_down);
-}
-
-static void
-test_misc (void)
-{
- fprintf (stderr, "Testing misc bits ...\n");
-
- g_assert (!Accessible_isComponent (NULL));
- g_assert (Accessible_getComponent (NULL) == NULL);
- SPI_freeString (NULL);
-}
-
-static void
-global_listener_cb (const AccessibleEvent *event,
- void *user_data)
-{
- TestWindow *win = user_data;
- Accessible *desktop;
- AccessibleApplication *application;
-
- g_assert (win->magic == WINDOW_MAGIC);
- g_assert (!strcmp (event->type, "focus:"));
-
- fprintf (stderr, "Fielded focus event ...\n");
-
- if (!do_poke) {
- desktop = SPI_getDesktop (0);
- application = Accessible_getChildAtIndex (desktop, 0);
- g_assert (application != NULL);
- Accessible_unref (desktop);
-
- test_application (application);
-
- AccessibleApplication_unref (application);
-
- print_tree = FALSE;
-
- validate_accessible (event->source, TRUE, TRUE);
-
- fprintf (stderr, "quitting mainloop.\n");
- gtk_main_quit ();
- }
-
- print_tree = TRUE;
- validate_accessible (event->source, TRUE, TRUE);
-}
-
-static SPIBoolean
-key_listener_cb (const AccessibleKeystroke *stroke,
- void *user_data)
-{
- AccessibleKeystroke *s = user_data;
-
- *s = *stroke;
- if (stroke->keystring) s->keystring = g_strdup (stroke->keystring);
-
- if (s->type == SPI_KEY_PRESSED)
- key_press_received = TRUE;
- else if (s->type == SPI_KEY_RELEASED)
- key_release_received = TRUE;
-
- return TRUE;
-}
-
-
-static void
-test_keylisteners (void)
-{
- int i;
- AccessibleKeystroke stroke;
- AccessibleKeystrokeListener *key_listener;
- AccessibleKeySet *test_keyset;
-
- fprintf (stderr, "Testing keyboard listeners ...\n");
-
- key_listener = SPI_createAccessibleKeystrokeListener (
- key_listener_cb, &stroke);
-
- test_keyset = SPI_createAccessibleKeySet (1, "=", NULL, NULL);
-
- g_assert (SPI_registerAccessibleKeystrokeListener (
- key_listener,
- test_keyset,
- 0,
- SPI_KEY_PRESSED | SPI_KEY_RELEASED,
- SPI_KEYLISTENER_CANCONSUME | SPI_KEYLISTENER_ALL_WINDOWS));
-
- for (i = 0; i < 3; i++) {
- memset (&stroke, 0, sizeof (AccessibleKeystroke));
- g_assert (SPI_generateKeyboardEvent ('=', NULL, SPI_KEY_SYM));
- while (!(key_press_received))
- g_main_context_iteration (NULL, TRUE);
- fprintf (stderr, "p [%s]", stroke.keystring);
- g_assert (!strcmp (stroke.keystring, "="));
- while (!(key_release_received))
- g_main_context_iteration (NULL, TRUE);
- fprintf (stderr, "r [%s]", stroke.keystring);
- key_press_received = FALSE;
- key_release_received = FALSE;
- }
- g_assert (SPI_deregisterAccessibleKeystrokeListener (key_listener, 0));
- SPI_freeAccessibleKeySet (test_keyset);
-
- fprintf (stderr, "\n");
-
- AccessibleKeystrokeListener_unref (key_listener);
-
- g_assert (SPI_generateMouseEvent (100, 100, "rel"));
- g_assert (SPI_generateMouseEvent (-50, -50, "rel"));
- g_assert (SPI_generateMouseEvent (-50, -50, "rel"));
- g_assert (SPI_generateMouseEvent (-1, -1, "b1c"));
-}
-
-int
-main (int argc, char **argv)
-{
- int leaked, i;
- TestWindow *win;
- const char *modules;
- AccessibleEventListener *global_listener;
-
- modules = g_getenv ("GTK_MODULES");
- if (!modules || modules [0] == '\0')
- putenv ("GTK_MODULES=gail:atk-bridge");
- modules = NULL;
-
- for (i = 1; i < argc; i++) {
- if (!g_strcasecmp (argv [i], "--poke"))
- do_poke = TRUE;
- }
-
- gtk_init (&argc, &argv);
-
- g_assert (!SPI_init ());
- g_assert (SPI_init ());
- g_assert (SPI_getDesktopCount () == 1);
-
- test_roles ();
- test_misc ();
- test_desktop ();
- test_keylisteners ();
-
- win = create_test_window ();
-
- global_listener = SPI_createAccessibleEventListener (global_listener_cb, win);
-
- g_assert (SPI_registerGlobalEventListener (global_listener, "focus:"));
-
- fprintf (stderr, "Waiting for focus event ...\n");
- gtk_main ();
-
- g_assert (SPI_deregisterGlobalEventListenerAll (global_listener));
- AccessibleEventListener_unref (global_listener);
-
- test_window_destroy (win);
-
- /* Wait for any pending events from the registry */
- g_usleep (500*1000);
- for (i = 0; i < 100; i++)
- dbus_connection_read_write_dispatch (SPI_bus(), 5);
-
- if ((leaked = SPI_exit ()))
- g_error ("Leaked %d SPI handles", leaked);
-
- g_assert (!SPI_exit ());
-
- fprintf (stderr, "All tests passed\n");
-
- if (g_getenv ("_MEMPROF_SOCKET")) {
- fprintf (stderr, "Waiting for memprof\n");
- gtk_main ();
- }
-
- putenv ("AT_BRIDGE_SHUTDOWN=1");
-
- return 0;
-}
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
deleted file mode 100644
index b06736b..0000000
--- a/tests/data/Makefile.am
+++ /dev/null
@@ -1,3 +0,0 @@
-EXTRA_DIST = \
- accessible-test.xml\
- accessible-test-results.xml
diff --git a/tests/data/accessible-test-results.xml b/tests/data/accessible-test-results.xml
deleted file mode 100644
index a522187..0000000
--- a/tests/data/accessible-test-results.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" ?>
-<accessible description="The main accessible object, root of the accessible tree" name="main" role="69">
- <accessible description="" name="gnome-settings-daemon" role="79"/>
- <accessible description="" name="gnome-panel" role="79">
- <accessible description="" name="Bottom Expanded Edge Panel" role="25"/>
- <accessible description="" name="Top Expanded Edge Panel" role="25"/>
- </accessible>
- <accessible description="" name="nautilus" role="79">
- <accessible description="" name="Desktop" role="25"/>
- </accessible>
- <accessible description="" name="metacity" role="79"/>
- <accessible description="" name="tracker-applet" role="79"/>
- <accessible description="" name="empathy" role="79">
- <accessible description="" name="Contact List" role="25"/>
- </accessible>
- <accessible description="" name="nm-applet" role="79"/>
- <accessible description="" name="gnome-power-manager" role="79"/>
- <accessible description="" name="update-notifier" role="79"/>
- <accessible description="Firefox Application Accessible" name="Firefox" role="79">
- <accessible description="Firefox Application Accessible" name="Google Reader - Mozilla Firefox 3 Beta 5" role="25">
- <accessible description="" name="" role="35"/>
- <accessible description="" name="Strip originally conceived in conversation with Jeph Jacques. Soon to be a major motion picture." role="66"/>
- <accessible description="" name="" role="68">
- <accessible description="" name="" role="33">
- <accessible description="" name="" role="10"/>
- <accessible description="" name="" role="10"/>
- </accessible>
- </accessible>
- <accessible description="" name="" role="35">
- <accessible description="" name="" role="69"/>
- </accessible>
- <accessible description="" name="" role="35"/>
- <accessible description="" name="" role="35"/>
- <accessible description="" name="" role="35"/>
- <accessible description="" name="" role="35"/>
- <accessible description="" name="" role="35"/>
- <accessible description="" name="" role="66"/>
- <accessible description="" name="" role="66"/>
- <accessible description="" name="" role="65">
- <accessible description="" name="Application" role="36"/>
- <accessible description="" name="" role="53"/>
- <accessible description="" name="Activity Indicator" role="45"/>
- </accessible>
- <accessible description="" name="" role="65">
- <accessible description="Go back one page" name="Back" role="45"/>
- <accessible description="Go forwards one page" name="Forward" role="45"/>
- <accessible description="" name="" role="45"/>
- <accessible description="Reload current page" name="Reload" role="45"/>
- <accessible description="Stop loading this page" name="Stop" role="45"/>
- <accessible description="chrome://ubufox/content/startpage.html" name="Home" role="45"/>
- <accessible description="" name="Location" role="80"/>
- <accessible description="" name="Search using Google" role="80"/>
- </accessible>
- <accessible description="" name="" role="65">
- <accessible description="" name="Smart Bookmarks" role="45"/>
- <accessible description="" name="Getting Started" role="45"/>
- <accessible description="" name="Latest Headlines" role="45"/>
- </accessible>
- <accessible description="" name="" role="41">
- <accessible description="" name="Google Reader" role="66"/>
- <accessible description="" name="" role="35"/>
- <accessible description="" name="" role="40"/>
- <accessible description="" name="" role="51"/>
- <accessible description="" name="" role="51">
- <accessible description="" name="Google Reader" role="30">
- <accessible description="" name="Google Reader" role="86">
- <accessible description="" name="Click here for ARIA enhanced Google Reader." role="72"/>
- <accessible description="" name="" role="89"/>
- <accessible description="" name="" role="89"/>
- <accessible description="" name="" role="89"/>
- <accessible description="" name="Google Reader" role="72"/>
- <accessible description="" name="" role="63"/>
- <accessible description="" name="" role="89"/>
- <accessible description="" name="" role="89">
- <accessible description="" name="" role="89"/>
- <accessible description="" name="" role="89"/>
- <accessible description="" name="" role="89">
- <accessible description="" name="" role="57"/>
- <accessible description="" name="" role="89">
- <accessible description="" name="" role="89">
- <accessible description="" name="" role="89">
- <accessible description="" name="" role="57"/>
- <accessible description="" name="" role="57">
- <accessible description="" name="" role="58">
- <accessible description="" name="" role="89">
- <accessible description="" name="" role="89"/>
- <accessible description="" name="" role="63"/>
- <accessible description="" name="Google News" role="72"/>
- <accessible description="" name="" role="89">
- <accessible description="" name="" role="89"/>
- <accessible description="" name="" role="89">
- <accessible description="" name="Reader and ARIA: A new way to read" role="72"/>
- </accessible>
- <accessible description="" name="" role="89">
- <accessible description="" name="Official Google Reader Blog" role="72"/>
- </accessible>
- <accessible description="" name="" role="89"/>
- </accessible>
- </accessible>
- </accessible>
- <accessible description="" name="" role="58"/>
- </accessible>
- </accessible>
- <accessible description="" name="" role="89">
- <accessible description="" name="Google Reader Blog" role="72"/>
- <accessible description="" name="Discuss" role="72"/>
- <accessible description="" name="Privacy Policy" role="72"/>
- <accessible description="" name="Help" role="72"/>
- <accessible description="" name="" role="89"/>
- </accessible>
- </accessible>
- </accessible>
- </accessible>
- </accessible>
- <accessible description="" name="" role="89">
- <accessible description="" name="" role="29"/>
- <accessible description="" name="" role="29"/>
- <accessible description="" name="" role="29"/>
- <accessible description="" name="" role="29"/>
- <accessible description="" name="" role="29"/>
- </accessible>
- </accessible>
- </accessible>
- </accessible>
- </accessible>
- <accessible description="" name="" role="35"/>
- <accessible description="" name="" role="56">
- <accessible description="" name="Done" role="45"/>
- <accessible description="" name="" role="45"/>
- </accessible>
- </accessible>
- </accessible>
- <accessible description="" name="gnome-terminal" role="79">
- <accessible description="" name="mdoff@silver-wind: ~/Projects/accessibility/dbus-atspi/test" role="25"/>
- </accessible>
-</accessible>
diff --git a/tests/data/accessible-test.xml b/tests/data/accessible-test.xml
deleted file mode 100644
index c881873..0000000
--- a/tests/data/accessible-test.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" ?>
-<accessible description="The main accessible object, root of the accessible tree" name="main" role="68">
- <accessible description="" name="gnome-settings-daemon" role="77"/>
- <accessible description="" name="gnome-panel" role="77">
- <accessible description="" name="Bottom Expanded Edge Panel" role="24"/>
- <accessible description="" name="Top Expanded Edge Panel" role="24"/>
- </accessible>
- <accessible description="" name="nautilus" role="77">
- <accessible description="" name="Desktop" role="24"/>
- </accessible>
- <accessible description="" name="metacity" role="77"/>
- <accessible description="" name="tracker-applet" role="77"/>
- <accessible description="" name="empathy" role="77">
- <accessible description="" name="Contact List" role="24"/>
- </accessible>
- <accessible description="" name="nm-applet" role="77"/>
- <accessible description="" name="gnome-power-manager" role="77"/>
- <accessible description="" name="update-notifier" role="77"/>
- <accessible description="Firefox Application Accessible" name="Firefox" role="77">
- <accessible description="Firefox Application Accessible" name="Google Reader - Mozilla Firefox 3 Beta 5" role="24">
- <accessible description="" name="" role="34"/>
- <accessible description="" name="Strip originally conceived in conversation with Jeph Jacques. Soon to be a major motion picture." role="65"/>
- <accessible description="" name="" role="67">
- <accessible description="" name="" role="32">
- <accessible description="" name="" role="10"/>
- <accessible description="" name="" role="10"/>
- </accessible>
- </accessible>
- <accessible description="" name="" role="34">
- <accessible description="" name="" role="68"/>
- </accessible>
- <accessible description="" name="" role="34"/>
- <accessible description="" name="" role="34"/>
- <accessible description="" name="" role="34"/>
- <accessible description="" name="" role="34"/>
- <accessible description="" name="" role="34"/>
- <accessible description="" name="" role="65"/>
- <accessible description="" name="" role="65"/>
- <accessible description="" name="" role="64">
- <accessible description="" name="Application" role="35"/>
- <accessible description="" name="" role="51"/>
- <accessible description="" name="Activity Indicator" role="44"/>
- </accessible>
- <accessible description="" name="" role="64">
- <accessible description="Go back one page" name="Back" role="44"/>
- <accessible description="Go forwards one page" name="Forward" role="44"/>
- <accessible description="" name="" role="44"/>
- <accessible description="Reload current page" name="Reload" role="44"/>
- <accessible description="Stop loading this page" name="Stop" role="44"/>
- <accessible description="chrome://ubufox/content/startpage.html" name="Home" role="44"/>
- <accessible description="" name="Location" role="78"/>
- <accessible description="" name="Search using Google" role="78"/>
- </accessible>
- <accessible description="" name="" role="64">
- <accessible description="" name="Smart Bookmarks" role="44"/>
- <accessible description="" name="Getting Started" role="44"/>
- <accessible description="" name="Latest Headlines" role="44"/>
- </accessible>
- <accessible description="" name="" role="40">
- <accessible description="" name="Google Reader" role="65"/>
- <accessible description="" name="" role="34"/>
- <accessible description="" name="" role="39"/>
- <accessible description="" name="" role="50"/>
- <accessible description="" name="" role="50">
- <accessible description="" name="Google Reader" role="29">
- <accessible description="" name="Google Reader" role="84">
- <accessible description="" name="Click here for ARIA enhanced Google Reader." role="70"/>
- <accessible description="" name="" role="87"/>
- <accessible description="" name="" role="87"/>
- <accessible description="" name="" role="87"/>
- <accessible description="" name="Google Reader" role="70"/>
- <accessible description="" name="" role="62"/>
- <accessible description="" name="" role="87"/>
- <accessible description="" name="" role="87">
- <accessible description="" name="" role="87"/>
- <accessible description="" name="" role="87"/>
- <accessible description="" name="" role="87">
- <accessible description="" name="" role="56"/>
- <accessible description="" name="" role="87">
- <accessible description="" name="" role="87">
- <accessible description="" name="" role="87">
- <accessible description="" name="" role="56"/>
- <accessible description="" name="" role="56">
- <accessible description="" name="" role="57">
- <accessible description="" name="" role="87">
- <accessible description="" name="" role="87"/>
- <accessible description="" name="" role="62"/>
- <accessible description="" name="Google News" role="70"/>
- <accessible description="" name="" role="87">
- <accessible description="" name="" role="87"/>
- <accessible description="" name="" role="87">
- <accessible description="" name="Reader and ARIA: A new way to read" role="70"/>
- </accessible>
- <accessible description="" name="" role="87">
- <accessible description="" name="Official Google Reader Blog" role="70"/>
- </accessible>
- <accessible description="" name="" role="87"/>
- </accessible>
- </accessible>
- </accessible>
- <accessible description="" name="" role="57"/>
- </accessible>
- </accessible>
- <accessible description="" name="" role="87">
- <accessible description="" name="Google Reader Blog" role="70"/>
- <accessible description="" name="Discuss" role="70"/>
- <accessible description="" name="Privacy Policy" role="70"/>
- <accessible description="" name="Help" role="70"/>
- <accessible description="" name="" role="87"/>
- </accessible>
- </accessible>
- </accessible>
- </accessible>
- </accessible>
- <accessible description="" name="" role="87">
- <accessible description="" name="" role="28"/>
- <accessible description="" name="" role="28"/>
- <accessible description="" name="" role="28"/>
- <accessible description="" name="" role="28"/>
- <accessible description="" name="" role="28"/>
- </accessible>
- </accessible>
- </accessible>
- </accessible>
- </accessible>
- <accessible description="" name="" role="34"/>
- <accessible description="" name="" role="55">
- <accessible description="" name="Done" role="44"/>
- <accessible description="" name="" role="44"/>
- </accessible>
- </accessible>
- </accessible>
- <accessible description="" name="gnome-terminal" role="77">
- <accessible description="" name="mdoff@silver-wind: ~/Projects/accessibility/dbus-atspi/test" role="24"/>
- </accessible>
-</accessible>
diff --git a/tests/dummyatk/Makefile.am b/tests/dummyatk/Makefile.am
deleted file mode 100644
index 2e93052..0000000
--- a/tests/dummyatk/Makefile.am
+++ /dev/null
@@ -1,38 +0,0 @@
-check_LTLIBRARIES = libdummyatk.la
-
-libdummyatk_la_CFLAGS = $(ATK_CFLAGS) \
- -I$(top_srcdir)
-
-libdummyatk_la_LDFLAGS = -no-undefined \
- -module \
- -avoid-version
-
-libdummyatk_la_LIBADD = $(ATK_LIBS)
-
-libdummyatk_la_SOURCES = my-atk-action.c \
- my-atk-action.h \
- my-atk-component.c \
- my-atk-component.h \
- my-atk-hyperlink.c \
- my-atk-hyperlink.h \
- my-atk-hypertext.c \
- my-atk-hypertext.h \
- my-atk-object.c \
- my-atk-object.h \
- my-atk-selection.c \
- my-atk-selection.h \
- my-atk-streamable-content.c \
- my-atk-streamable-content.h \
- my-atk-table.c \
- my-atk-table.h \
- my-atk-text.c \
- my-atk-text.h \
- my-atk-value.c \
- my-atk-value.h \
- my-atk.h \
- resources_storage.c \
- resources_storage.h \
- useful_functions.c \
- useful_functions.h \
- user_marshal.c \
- user_marshal.h
diff --git a/tests/dummyatk/my-atk-action.c b/tests/dummyatk/my-atk-action.c
deleted file mode 100644
index 363356a..0000000
--- a/tests/dummyatk/my-atk-action.c
+++ /dev/null
@@ -1,222 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <atk/atk.h>
-
-#include "my-atk-object.h"
-#include "my-atk-action.h"
-
-static GObjectClass *parent_class = NULL;
-//implementaion of the interface
-static gboolean my_atk_action_do_action(AtkAction *action, gint i)
-{
- MyAtkAction *self = (MyAtkAction*)action;
- gboolean result = (i>=0) && (i < self->n);
- self->last_performed_action = result? i : -1;
- return result;
-}
-static gint my_atk_action_get_n_actions(AtkAction *action)
-{
- MyAtkAction *self = (MyAtkAction*)action;
- return self->n;
-}
-static const gchar* my_atk_action_get_description(AtkAction *action, gint i)
-{
- MyAtkAction *self = (MyAtkAction*)action;
- if((i>=0) && (i<self->n))
- {
- return self->actions[i].description;
- }
- else
- {
- printf("get_description: Wrong index.\n");
- return NULL;
- }
-}
-static const gchar* my_atk_action_get_name(AtkAction *action, gint i)
-{
- MyAtkAction *self = (MyAtkAction*)action;
- if((i >= 0) && (i < self->n))
- {
- return self->actions[i].name;
- }
- else
- {
- printf("get_name: Wrong index.\n");
- return NULL;
- }
-}
-static const gchar* my_atk_action_get_localized_name(AtkAction *action, gint i)
-{
- return my_atk_action_get_name(action,i);
-}
-
-static const gchar* my_atk_action_get_keybinding(AtkAction *action, gint i)
-{
- MyAtkAction *self = (MyAtkAction*)action;
- if((i >= 0) && (i < self->n))
- {
- gchar* keyb = self->actions[i].keybinding;
- if(keyb == NULL || keybinding_note_define == NULL)
- {
- //anywhere(if action has keybinding or not) NULL will return
- return NULL;
- }
- else
- {
- //verify, if string mean "no keybinding"
- return strcmp(keyb, keybinding_note_define) != 0 ? keyb : NULL;
- }
- }
- else
- {
- printf("get_keybinding: Wrong index.\n");
- return NULL;
- }
-}
-static gboolean my_atk_action_set_description(AtkAction *action, gint i, const gchar *desc)
-{
- MyAtkAction *self = (MyAtkAction*)action;
-
- if(!((i >= 0) && (i < self->n)) )
- {
- //index out of range, but this is not application error according documentation
- return FALSE;
- }
- //index in correct range
- if(self->actions[i].description == desc)
- {
- //self assignment - return immediately
- return TRUE;
- }
- if(self->actions[i].description != NULL)
- {
- //free old value of description if it is not NULL
- free(self->actions[i].description);
- }
- if(desc != NULL)
- {
- //dump new value of description if it is not NULL
- self->actions[i].description = (gchar*)strdup((const char*)desc);
- }
- return TRUE;
-}
-//////////
-static void my_atk_action_instance_init(GTypeInstance *instance, gpointer g_class)
-{
- int i;
- MyAtkAction *self = (MyAtkAction*)instance;
- self->n = DEFAULT_NUMBER_ACTIONS;
- self->actions = g_new(struct OneAction, self->n);
- if(self->actions == NULL)
- {
- self->n = 0;
- return;
- }
- //init fields of action 0 with values which differ from others actions
- self->actions[0].name = (gchar*)strdup(FIRST_ACTION_NAME);
- self->actions[0].description = (gchar*)strdup(FIRST_ACTION_DESCRIPTION);
- self->actions[0].keybinding = (gchar*)strdup(FIRST_ACTION_KEYBINDING);
-
- for(i = 1; i < self->n; i++)
- {
- self->actions[i].name = (gchar*)strdup(DEFAULT_ACTION_NAME);
- self->actions[i].description = (gchar*)strdup(DEFAULT_ACTION_DESCRIPTION);
- self->actions[i].keybinding = g_strdup_printf("%d", i);
- }
- self->disposed = FALSE;
- self->last_performed_action = -1;
-}
-
-static void
-my_atk_action_interface_init(gpointer g_iface, gpointer iface_data)
-{
- AtkActionIface *klass = (AtkActionIface *)g_iface;
-
- klass->do_action = my_atk_action_do_action;
- klass->get_n_actions = my_atk_action_get_n_actions;
- klass->get_description = my_atk_action_get_description;
- klass->get_name = my_atk_action_get_name;
- klass->get_localized_name = my_atk_action_get_localized_name;
- klass->get_keybinding = my_atk_action_get_keybinding;
- klass->set_description = my_atk_action_set_description;
-}
-
-static void
-my_atk_action_dispose(GObject *obj)
-{
- MyAtkAction *self = (MyAtkAction*)obj;
-
- if(self->disposed)
- {
- return;
- }
- self->disposed = TRUE;
-
- G_OBJECT_CLASS(parent_class)->dispose(obj);
-}
-
-static void
-my_atk_action_finalize(GObject *obj)
-{
- MyAtkAction *self = (MyAtkAction*)obj;
- int i;
-
- for(i = 0; i < self->n; i++)
- {
- struct OneAction oneAction = self->actions[i];
- if(oneAction.name != NULL)
- free(oneAction.name);
- if(oneAction.description != NULL)
- free(oneAction.description);
- if(oneAction.keybinding != NULL)
- free(oneAction.keybinding);
- }
- if(self->actions != NULL)
- g_free(self->actions);
-
- G_OBJECT_CLASS(parent_class)->finalize(obj);
-}
-static void
-my_atk_action_class_init (gpointer g_class, gpointer g_class_data)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS(g_class);
- MyAtkActionClass *klass = MY_ATK_ACTION_CLASS (g_class);
-
- gobject_class->dispose = my_atk_action_dispose;
- gobject_class->finalize = my_atk_action_finalize;
-
- parent_class = g_type_class_peek_parent(klass);
-}
-GType my_atk_action_get_type(void)
-{
- static GType type = 0;
- if(type == 0)
- {
- static const GTypeInfo info =
- {
- sizeof (MyAtkActionClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- my_atk_action_class_init, /* class_init */
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (MyAtkAction),
- 0, /* n_preallocs */
- my_atk_action_instance_init /* instance_init */
- };
-
- static const GInterfaceInfo iface_info =
- {
- (GInterfaceInitFunc) my_atk_action_interface_init, /* interface_init */
- NULL, /* interface_finalize */
- NULL /* interface_data */
- };
- type = g_type_register_static (MY_TYPE_ATK_OBJECT,
- "MyAtkAction",
- &info, 0);
- g_type_add_interface_static (type,
- ATK_TYPE_ACTION,
- &iface_info);
- }
- return type;
-}
diff --git a/tests/dummyatk/my-atk-action.h b/tests/dummyatk/my-atk-action.h
deleted file mode 100644
index f33e75d..0000000
--- a/tests/dummyatk/my-atk-action.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef MY_ATK_ACTION_H
-#define MY_ATK_ACTION_H
-//Object, which implement interface AtkAction(all functions)
-#include <glib.h>
-#include <glib-object.h>
-#include <atk/atk.h>
-
-#include "my-atk-object.h"
-
-//declarations
-#define MY_TYPE_ATK_ACTION (my_atk_action_get_type ())
-#define MY_ATK_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_ACTION, MyAtkAction))
-#define MY_ATK_ACTION_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_ACTION, MyAtkActionClass))
-#define MY_IS_ATK_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_ACTION))
-#define MY_IS_ATK_ACTION_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_ACTION))
-#define MY_ATK_ACTION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_ACTION, MyAtkActionClass))
-
-static const gchar* keybinding_note_define = "none";
-
-#define FIRST_ACTION_NAME "First action"
-#define FIRST_ACTION_DESCRIPTION "First action performed"
-#define FIRST_ACTION_KEYBINDING "0"
-
-#define DEFAULT_NUMBER_ACTIONS 10
-#define DEFAULT_ACTION_NAME "Action"
-#define DEFAULT_ACTION_DESCRIPTION "Description of action"
-#define DEFAULT_ACTION_KEYBINDING keybinding_note_define
-
-
-//for external using
-#define LAST_PERFORMED_ACTION(myAtkAction) (MY_ATK_ACTION(myAtkAction)->last_performed_action)
-#define CLEAR_LAST_PERFOMED_ACTION(myAtkAction) (MY_ATK_ACTION(myAtkAction)->last_performed_action = -1
-
-typedef struct _MyAtkAction MyAtkAction;
-typedef struct _MyAtkActionClass MyAtkActionClass;
-
-struct _MyAtkAction
-{
- MyAtkObject parent;
-
- gboolean disposed;
- struct OneAction
- {
- gchar *name;
- gchar *description;
- gchar *keybinding;
- }*actions;
- gint n;
- gint last_performed_action;//this field is changed when perfoms action
-};
-
-struct _MyAtkActionClass
-{
- MyAtkObjectClass parent;
-};
-GType my_atk_action_get_type(void);
-
-#endif /*MY_ATK_ACTION_H*/
diff --git a/tests/dummyatk/my-atk-component.c b/tests/dummyatk/my-atk-component.c
deleted file mode 100644
index e304c7d..0000000
--- a/tests/dummyatk/my-atk-component.c
+++ /dev/null
@@ -1,403 +0,0 @@
-#include <stdio.h>
-#include <atk/atk.h>
-#include <limits.h>
-
-#include "my-atk-object.h"
-#include "my-atk-component.h"
-
-//*************************implementation***********************
-static MyAtkObjectClass *component_parent_class = NULL;
-//current focus object
-static AtkComponent* focus_object = NULL;
-
-static guint focus_signal_id = 0;
-/*
- * Because of implementation of AtkUtils, we need to ensure that list of focus_trackers
- * is not empty. Otherwise function atk_focus_tracker_notify will not change focus.
- */
-static guint focus_tracker_id = 0;
-static void my_event_listener(AtkObject* obj)
-{
- //simply exist for register as focus_tracker
-}
-/*
- * If this flag is TRUE, then focus cannot be changed until someone clears the flag
- * via my_atk_component_set_modal(FALSE).
- */
-static gboolean is_modal = FALSE;
-//for debug
-void print_extent(AtkRectangle *extent)
-{
- printf("{%d,%d,%d,%d}", extent->x, extent->y, extent->width, extent->height);
-}
-//for internal use
-static void emit_bounds_changed(MyAtkComponent *component)
-{
- static guint bounds_changed_id = 0;
- if(bounds_changed_id == 0)
- {
- bounds_changed_id = g_signal_lookup("bounds-changed", ATK_TYPE_COMPONENT);
- }
- AtkRectangle *param = g_boxed_copy(ATK_TYPE_RECTANGLE, &(component->extent));
- g_signal_emit(component, bounds_changed_id, 0, param);
-}
-static void change_focus(AtkComponent* component, gboolean is_gain)
-{
- const gchar* state_name = atk_state_type_get_name(ATK_STATE_FOCUSED);
-
- g_signal_emit_by_name(component, "focus-event", is_gain);
- g_signal_emit_by_name(component, "state-change::focused",
- state_name, is_gain);
-
- AtkObject* parent = atk_object_get_parent((AtkObject*)component);
- if(parent != NULL)
- {
- AtkStateSet* stateSet = atk_object_ref_state_set(parent);
- if(atk_state_set_contains_state(stateSet, ATK_STATE_MANAGES_DESCENDANTS))
- g_signal_emit_by_name(parent, "active-descendant-changed",
- atk_get_focus_object());
- g_object_unref(stateSet);
- }
-}
-//implementation of virtual functions
-//******************ref_state_set(AtkObject)*****************************
-static AtkStateSet* my_atk_component_ref_state_set(AtkObject *object)
-{
- MyAtkComponent *self = (MyAtkComponent*)object;
-
- AtkStateSet* result = ((AtkObjectClass*)component_parent_class)->
- ref_state_set(object);
- if(self->is_manage_descendants)
- atk_state_set_add_state(result, ATK_STATE_MANAGES_DESCENDANTS);
- return result;
-}
-//******************get_size*******************
-static void my_atk_component_get_size(AtkComponent *component, gint *width, gint *height)
-{
- g_return_if_fail(MY_IS_ATK_COMPONENT(component));
-
- MyAtkComponent *self = MY_ATK_COMPONENT(component);
- *width = self->extent.width;
- *height = self->extent.height;
-}
-//*********************get_position*******************
-static void my_atk_component_get_position(AtkComponent *component, gint *x, gint *y, AtkCoordType coord_type)
-{
- g_return_if_fail(MY_IS_ATK_COMPONENT(component));
-
- MyAtkComponent *self = MY_ATK_COMPONENT(component);
- *x = self->extent.x;
- *y = self->extent.y;
-
-//**********************get_extents*******************
-}
-static void my_atk_component_get_extents(AtkComponent *component, gint *x, gint *y,
- gint *width, gint *height, AtkCoordType coord_type)
-{
- g_return_if_fail(MY_IS_ATK_COMPONENT(component));
-
- MyAtkComponent *self = MY_ATK_COMPONENT(component);
- *x = self->extent.x;
- *y = self->extent.y;
- *width = self->extent.width;
- *height = self->extent.height;
-}
-
-//**************************set_size*******************
-static gboolean my_atk_component_set_size(AtkComponent *component, gint width, gint height)
-{
- g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), FALSE);
-
- MyAtkComponent *self = MY_ATK_COMPONENT(component);
- if(self->is_extent_may_changed)
- {
- self->extent.width = width;
- self->extent.height = height;
-
- emit_bounds_changed(self);
-
- return TRUE;
- }
- return FALSE;
-}
-//**************************set_position********************
-static gboolean my_atk_component_set_position(AtkComponent *component,
- gint x, gint y, AtkCoordType coord_type)
-{
- g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), FALSE);
-
- MyAtkComponent *self = MY_ATK_COMPONENT(component);
- if(self->is_extent_may_changed)
- {
- self->extent.x = x;
- self->extent.y = y;
-
- emit_bounds_changed(self);
-
- return TRUE;
- }
- return FALSE;
-}
-//*************************************set_extents***************
-static gboolean my_atk_component_set_extents(AtkComponent *component,
- gint x, gint y, gint width, gint height, AtkCoordType coord_type)
-{
- g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), FALSE);
-
- MyAtkComponent *self = MY_ATK_COMPONENT(component);
-
- if(self->is_extent_may_changed)
- {
- self->extent.x = x;
- self->extent.y = y;
- self->extent.width = width;
- self->extent.height = height;
-
- emit_bounds_changed(self);
-
- return TRUE;
- }
- return FALSE;
-}
-//**************************get_layer****************
-static AtkLayer my_atk_component_get_layer(AtkComponent *component)
-{
- g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), ATK_LAYER_INVALID);
-
- MyAtkComponent *self = MY_ATK_COMPONENT(component);
- return self->layer;
-}
-//**************************get_mdi_zorder****************
-static gint my_atk_component_get_mdi_zorder(AtkComponent *component)
-{
- g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), G_MININT);
-
- MyAtkComponent *self = MY_ATK_COMPONENT(component);
- return self->zorder;
-}
-//***********************contains**********************
-static gboolean my_atk_component_contains(AtkComponent *component,
- gint x, gint y, AtkCoordType coord_type)
-{
- g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), FALSE);
- //for extract extent
- gint x_tmp, y_tmp, width_tmp, height_tmp;
- my_atk_component_get_extents(component, &x_tmp, &y_tmp, &width_tmp, &height_tmp, coord_type);
-
- if( (x >= x_tmp) &&(y >= y_tmp) &&(x < x_tmp + width_tmp) && (y < y_tmp + height_tmp) )
- {
- return TRUE;
- }
- else
- {
- return FALSE;
- }
-}
-//**********************ref_accessible_at_point***********************
-/*
- * Retuns accessible child that implements AtkCOmponent and contains the given point.
- */
-static AtkObject* my_atk_component_ref_accessible_at_point(AtkComponent* component,
- gint x, gint y, AtkCoordType coord_type)
-{
- g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), NULL);
- gint i;
-
- gint n_children = atk_object_get_n_accessible_children((AtkObject*)component);
- for(i = 0; i < n_children; i++)
- {
- AtkObject *child = atk_object_ref_accessible_child((AtkObject*)component, i);
- if(ATK_IS_COMPONENT(child)
- && atk_component_contains((AtkComponent*)child, x, y, coord_type))
- {
- return child;
- }
- g_object_unref(child);
- }
- return NULL;
-}
-//*************************************grab_focus*********************************
-static gboolean my_atk_component_grab_focus(AtkComponent* component)
-{
- if(component == focus_object)
- {
- //Already has focus
- return TRUE;
- }
- if(is_modal)
- {
- //cannot grab focus
- return FALSE;
- }
- AtkComponent *focus_object_old = focus_object;
- focus_object = component;
-
- atk_focus_tracker_notify((AtkObject*)component);
-
- if(focus_object_old != NULL)
- {
- //signals for object which lost focus
- change_focus(focus_object_old, FALSE);
- }
- if(component != NULL)
- {
- //signals for object which grab focus
- change_focus(component, TRUE);
- }
- return TRUE;
-}
-//***********************my_atk_component_add_focus_handler*********************
-static guint my_atk_component_add_focus_handler(AtkComponent *component, AtkFocusHandler handler)
-{
- g_return_val_if_fail(MY_IS_ATK_COMPONENT(component),0);
- //verify whether handler already connect to object
- gulong found_handler_id = g_signal_handler_find(component,
- G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC,
- focus_signal_id,
- 0,
- NULL,
- (gpointer)handler,
- NULL);
- if(found_handler_id == 0)
- {
- //handler hasn't been connected yet
- return g_signal_connect_closure_by_id(component,
- focus_signal_id,
- 0,
- g_cclosure_new( (GCallback)handler,
- NULL,
- NULL),
- FALSE);
- }
- else/* found_handler_id != 0*/
- {
- //handler has already been connected
- return 0;
- }
-
-}
-//***********************my_atk_component_remove_focus_handler*********************
-static void my_atk_component_remove_focus_handler(AtkComponent *component, guint handler_id)
-{
- g_signal_handler_disconnect(component, handler_id);
-}
-//***********************my_atk_component_set_modal(my function)***************
-void my_atk_component_set_modal(gboolean value)
-{
- is_modal = value;
-}
-//******************my_atk_component_set_manage_descendants(my_function)*******
-void my_atk_component_set_manage_descendants(MyAtkComponent* component, gboolean value)
-{
- if(component->is_manage_descendants == value)return;
- component->is_manage_descendants = value;
- g_signal_emit_by_name(component, "state-change::manages-descendants",
- "manages-descendants", value);
-}
-//Others funtions
-static void my_atk_component_instance_init(GTypeInstance *obj, gpointer g_class)
-{
- MyAtkComponent *self = (MyAtkComponent*)obj;
- //set defaults values
- self->extent.x = 0;
- self->extent.y = 0;
- self->extent.width = 10;
- self->extent.height = 10;
- self->is_extent_may_changed = TRUE;
- self->layer = ATK_LAYER_INVALID;
- self->zorder = -2147;
-}
-static void my_atk_component_instance_finalize(GObject* obj)
-{
- MyAtkComponent* component = (MyAtkComponent*)obj;
-
- if(((AtkObject*)component) == atk_get_focus_object())
- {
- atk_focus_tracker_notify(NULL);
- }
-}
-
-static void my_atk_component_class_init(gpointer g_class, gpointer class_data)
-{
- GObjectClass* g_object_class = (GObjectClass*)g_class;
- AtkObjectClass* atkObject_class = (AtkObjectClass*)g_class;
- //GObject virtual table
- g_object_class->finalize = my_atk_component_instance_finalize;
- //AtkObject virtual table
- atkObject_class->ref_state_set = my_atk_component_ref_state_set;
- //parent_class
- component_parent_class = g_type_class_peek_parent(g_class);
- //make focus_tracker's table not empty.
- focus_tracker_id = atk_add_focus_tracker(my_event_listener);
- //store "focus-event"-signal id
- focus_signal_id = g_signal_lookup("focus-event",MY_TYPE_ATK_COMPONENT);
-}
-/*
- * Though, according to the documentation, this function will never called for
- * static-registred types.
- * Base_init function doesn't suite for this work,
- * because it will called in every derived classes.
- */
-/*static void my_atk_component_class_finalize(gpointer g_class, gpointer class_data)
-{
-
- if(focus_tracker_id != 0)
- {
- atk_remove_focus_tracker(focus_tracker_id);
- focus_tracker_id = 0;
- }
-}*/
-static void my_atk_component_interface_init(gpointer g_iface, gpointer iface_data)
-{
- AtkComponentIface *klass = (AtkComponentIface*)g_iface;
-
- klass->get_extents = my_atk_component_get_extents;
- klass->get_position = my_atk_component_get_position;
- klass->get_size = my_atk_component_get_size;
-
- klass->set_extents = my_atk_component_set_extents;
- klass->set_position = my_atk_component_set_position;
- klass->set_size = my_atk_component_set_size;
-
- klass->contains = my_atk_component_contains;
- klass->ref_accessible_at_point = my_atk_component_ref_accessible_at_point;
-
- klass->get_layer = my_atk_component_get_layer;
- klass->get_mdi_zorder = my_atk_component_get_mdi_zorder;
-
- klass->grab_focus = my_atk_component_grab_focus;
- klass->add_focus_handler = my_atk_component_add_focus_handler;
- klass->remove_focus_handler = my_atk_component_remove_focus_handler;
-}
-
-GType my_atk_component_get_type()
-{
- static GType type = 0;
- if(type == 0)
- {
- static const GTypeInfo typeInfo =
- {
- sizeof(MyAtkComponentClass),
- NULL, //base_init
- NULL, //base_finalize
- my_atk_component_class_init, //class_init
- NULL, //class_finalize
- NULL, //class_data
- sizeof(MyAtkComponent),
- 0, //n_preallocs
- my_atk_component_instance_init //instance_init
- };
-
- static const GInterfaceInfo iface_info =
- {
- my_atk_component_interface_init, /* interface_init*/
- NULL, /* interface_finalize*/
- NULL /* interface_data */
- };
- type = g_type_register_static(MY_TYPE_ATK_OBJECT, "MyAtkComponent", &typeInfo, 0);
- g_type_add_interface_static(type,
- ATK_TYPE_COMPONENT,
- &iface_info);
- }
- return type;
-}
diff --git a/tests/dummyatk/my-atk-component.h b/tests/dummyatk/my-atk-component.h
deleted file mode 100644
index 3fa5850..0000000
--- a/tests/dummyatk/my-atk-component.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef MY_ATK_COMPONENT_H
-#define MY_ATK_COMPONENT_H
-/*
- * MyAtkComponent: derives AtkObject(with parent-child accessibilities)
- * and implements AtkComponent.
- */
-#include <atk/atk.h>
-
-#include "my-atk-object.h"
-
-#define MY_TYPE_ATK_COMPONENT (my_atk_component_get_type ())
-#define MY_ATK_COMPONENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_COMPONENT, MyAtkComponent))
-#define MY_ATK_COMPONENT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_COMPONENT, MyAtkComponentClass))
-#define MY_IS_ATK_COMPONENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_COMPONENT))
-#define MY_IS_ATK_COMPONENT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_COMPONENT))
-#define MY_ATK_COMPONENT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_COMPONENT, MyAtkComponentClass))
-
-typedef struct _MyAtkComponent MyAtkComponent;
-typedef struct _MyAtkComponentClass MyAtkComponentClass;
-
-struct _MyAtkComponent
-{
- MyAtkObject parent;
- //relative coordinates, which coincides with absolute ones
- AtkRectangle extent;
- //whether component may be relocated
- gboolean is_extent_may_changed;
- //for emit "active-descendant-changed" signal
- gboolean is_manage_descendants;
- //
- AtkLayer layer;
- gint zorder;
-};
-
-struct _MyAtkComponentClass
-{
- MyAtkObjectClass parent;
-};
-
-GType my_atk_component_get_type();
-#endif /*MY_ATK_COMPONENT_H*/
diff --git a/tests/dummyatk/my-atk-hyperlink.c b/tests/dummyatk/my-atk-hyperlink.c
deleted file mode 100644
index cb6b435..0000000
--- a/tests/dummyatk/my-atk-hyperlink.c
+++ /dev/null
@@ -1,137 +0,0 @@
-#include <atk/atk.h>
-
-#include "my-atk-text.h"
-#include "my-atk-hyperlink.h"
-#include "resources_storage.h"
-
-//***************************implementation****************************************
-static MyAtkTextClass *parent_class_atk_hyperlink = NULL;
-
-// Implementation of virtual functions
-//***************************my_atk_hyperlink_get_uri**************
-gchar* my_atk_hyperlink_get_uri(AtkHyperlink* link_, gint index)
-{
- MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
-
- if(index < 0 || index >= self->number_of_anchors) return NULL;
- return g_strdup(self->uri);
-}
-//**************************my_atk_hyperlink_is_valid**************************
-gboolean my_atk_hyperlink_is_valid(AtkHyperlink* link_)
-{
- MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
-
- return (resource_storage_get(self->uri) != NULL);
-}
-//*************************my_atk_hyperlink_get_object************************
-AtkObject* my_atk_hyperlink_get_object(AtkHyperlink* link_, gint index)
-{
- MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
-
- if(index < 0 || index >= self->number_of_anchors) return NULL;
- return resource_storage_get(self->uri);
-}
-//***************************my_atk_hyperlink_get_start_index**************
-gint my_atk_hyperlink_get_start_index(AtkHyperlink* link_)
-{
- MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
-
- return self->start_index;
-}
-//***************************my_atk_hyperlink_get_end_index**************
-gint my_atk_hyperlink_get_end_index(AtkHyperlink* link_)
-{
- MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
-
- return self->end_index;
-}
-//***************************my_atk_hyperlink_link_state*******************
-guint my_atk_hyperlink_link_state(AtkHyperlink* link_)
-{
- return 0;
-}
-//***************************my_atk_hyperlink_get_n_anchors*******************
-gboolean my_atk_hyperlink_get_n_anchors(AtkHyperlink* link_)
-{
- return ((MyAtkHyperlink*)link_)->number_of_anchors;
-}
-//***************************my_atk_hypertlink_is_selected_link***********
-gboolean my_atk_hyperlink_is_selected_link(AtkHyperlink* link_)
-{
- MyAtkHyperlink* self = (MyAtkHyperlink*)link_;
-
- return self->is_selected;
-}
-//others functions
-MyAtkHyperlink* my_atk_hyperlink_new(gint start_index, gint end_index,const gchar* uri)
-{
- MyAtkHyperlink* result = g_object_new(MY_TYPE_ATK_HYPERLINK, NULL);
- if(result == NULL) return NULL;
- result->start_index = start_index;
- result->end_index = end_index;
- result->uri = g_strdup(uri);
- result->number_of_anchors = 1;
- return result;
-}
-void my_atk_hyperlink_activate(MyAtkHyperlink* hyperlink)
-{
- g_signal_emit_by_name(hyperlink, "link-activated");
-}
-//initialize/finalize functions
-static void my_atk_hyperlink_instance_init(GTypeInstance *obj, gpointer g_class)
-{
- MyAtkHyperlink *self = (MyAtkHyperlink*)obj;
-
- self->start_index = self->end_index = 0;
- self->uri = NULL;
- self->is_selected = FALSE;
- self->number_of_anchors = 0;
-}
-static void my_atk_hyperlink_instance_finalize(GObject* obj)
-{
- MyAtkHyperlink *self = (MyAtkHyperlink*)obj;
-
- g_free(self->uri);
-}
-
-static void my_atk_hyperlink_class_init(gpointer g_class, gpointer class_data)
-{
- GObjectClass* g_object_class = (GObjectClass*)g_class;
- //GObject virtual table
- g_object_class->finalize = my_atk_hyperlink_instance_finalize;
- //parent_class
- parent_class_atk_hyperlink = g_type_class_peek_parent(g_class);
- //
- AtkHyperlinkClass* atkHyperlinkClass = (AtkHyperlinkClass*)g_class;
-
- atkHyperlinkClass->get_uri = my_atk_hyperlink_get_uri;
- atkHyperlinkClass->get_object = my_atk_hyperlink_get_object;
- atkHyperlinkClass->get_start_index = my_atk_hyperlink_get_start_index;
- atkHyperlinkClass->get_end_index = my_atk_hyperlink_get_end_index;
- atkHyperlinkClass->is_valid = my_atk_hyperlink_is_valid;
- atkHyperlinkClass->link_state = my_atk_hyperlink_link_state;
- atkHyperlinkClass->get_n_anchors = my_atk_hyperlink_get_n_anchors;
- atkHyperlinkClass->is_selected_link = my_atk_hyperlink_is_selected_link;
-}
-
-GType my_atk_hyperlink_get_type()
-{
- static GType type = 0;
- if(type == 0)
- {
- static const GTypeInfo typeInfo =
- {
- sizeof(MyAtkHyperlinkClass),
- NULL, //base_init
- NULL, //base_finalize
- my_atk_hyperlink_class_init, //class_init
- NULL, //class_finalize
- NULL, //class_data
- sizeof(MyAtkHyperlink),
- 0, //n_preallocs
- my_atk_hyperlink_instance_init //instance_init
- };
- type = g_type_register_static(ATK_TYPE_HYPERLINK, "MyAtkHyperlink", &typeInfo, 0);
- }
- return type;
-}
diff --git a/tests/dummyatk/my-atk-hyperlink.h b/tests/dummyatk/my-atk-hyperlink.h
deleted file mode 100644
index 026ba54..0000000
--- a/tests/dummyatk/my-atk-hyperlink.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef MY_ATK_HYPERLINK_H
-#define MY_ATK_HYPERLINK_H
-/*
- * MyAtkHyperlink: implements AtkHyperlink
- */
-#include <atk/atk.h>
-
-#define MY_TYPE_ATK_HYPERLINK (my_atk_hyperlink_get_type ())
-#define MY_ATK_HYPERLINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_HYPERLINK, MyAtkHyperlink))
-#define MY_ATK_HYPERLINK_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_HYPERLINK, MyAtkHyperlinkClass))
-#define MY_IS_ATK_HYPERLINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_HYPERLINK))
-#define MY_IS_ATK_HYPERLINK_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_HYPERLINK))
-#define MY_ATK_HYPERLINK_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_HYPERLINK, MyAtkHyperlinkClass))
-
-typedef struct _MyAtkHyperlink MyAtkHyperlink;
-typedef struct _MyAtkHyperlinkClass MyAtkHyperlinkClass;
-
-struct _MyAtkHyperlink
-{
- AtkHyperlink parent;
-
- gint start_index, end_index;
-
- gchar* uri;
- gint number_of_anchors;//0 on "clear" hyperlink and 1 after set it
- gboolean is_selected;
-};
-
-struct _MyAtkHyperlinkClass
-{
- AtkHyperlinkClass parent;
-};
-
-GType my_atk_hyperlink_get_type();
-#endif /*MY_ATK_HYPERLINK_H*/
diff --git a/tests/dummyatk/my-atk-hypertext.c b/tests/dummyatk/my-atk-hypertext.c
deleted file mode 100644
index 1bba620..0000000
--- a/tests/dummyatk/my-atk-hypertext.c
+++ /dev/null
@@ -1,172 +0,0 @@
-#include <atk/atk.h>
-
-#include "my-atk-text.h"
-#include "my-atk-hyperlink.h"
-#include "my-atk-hypertext.h"
-
-//***************************implementation****************************************
-static MyAtkTextClass *parent_class_atk_text = NULL;
-
-typedef struct
-{
- gint start_offset, end_offset;
- gint index;
-}HyperlinkRange;
-// Implementation of virtual functions
-
-//***************************my_atk_hypertext_get_n_links*************************
-gint my_atk_hypertext_get_n_links(AtkHypertext* hypertext)
-{
- MyAtkHypertext* self = (MyAtkHypertext*)hypertext;
-
- return self->hyperlinks->len;
-}
-//***************************my_atk_hypertext_get_link***********************
-AtkHyperlink* my_atk_hypertext_get_link(AtkHypertext* hypertext, gint link_index)
-{
- MyAtkHypertext* self = (MyAtkHypertext*)hypertext;
-
- if(link_index < 0 || link_index >= self->hyperlinks->len)
- return NULL;
- return g_ptr_array_index(self->hyperlinks, link_index);
-}
-//*************************my_atk_hypertext_get_link_index*******************
-gint my_atk_hypertext_get_link_index(AtkHypertext* hypertext, gint char_index)
-{
- gint i;
- MyAtkHypertext* self = (MyAtkHypertext*)hypertext;
- GArray* ranges = self->hyperlink_ranges;
- for(i = ranges->len - 1; i >= 0; i--)
- {
- HyperlinkRange *range = &g_array_index(ranges, HyperlinkRange, i);
- if(range->start_offset <= char_index)
- {
- if(range->end_offset > char_index)return range->index;
- break;
- }
- }
- return -1;
-}
-//others functions
-gboolean my_atk_hypertext_add_hyperlink(MyAtkHypertext* hypertext,
- gint start_index, gint end_index, const gchar* uri)
-{
- MyAtkHyperlink* new_hyperlink;
- GArray* ranges = hypertext->hyperlink_ranges;
- gint i;
- for(i = 0; i < ranges->len; i++)
- {
- HyperlinkRange *range = &g_array_index(ranges, HyperlinkRange, i);
- if(range->end_offset <= start_index) continue;
- if(range->start_offset < end_index) return FALSE;
- break;
- }
- new_hyperlink = my_atk_hyperlink_new(start_index, end_index, uri);
- g_ptr_array_add(hypertext->hyperlinks, new_hyperlink);
- HyperlinkRange new_range;
- new_range.start_offset = start_index;
- new_range.end_offset = end_index;
- new_range.index = hypertext->hyperlinks->len - 1;
- g_array_insert_val(ranges, i, new_range);
- return TRUE;
-}
-//
-void my_atk_hypertext_select_link(MyAtkHypertext* hypertext, gint index)
-{
- if(index < 0 || index >= my_atk_hypertext_get_n_links((AtkHypertext*)hypertext))
- return;
-
- if(hypertext->current_selected_link != -1)
- {
- MyAtkHyperlink *selected_link_old =
- (MyAtkHyperlink*)my_atk_hypertext_get_link(
- (AtkHypertext*)hypertext, hypertext->current_selected_link);
- selected_link_old->is_selected = FALSE;
- }
-
- hypertext->current_selected_link = index;
- MyAtkHyperlink *selected_link_new = (MyAtkHyperlink*)my_atk_hypertext_get_link(
- (AtkHypertext*)hypertext, hypertext->current_selected_link);
- selected_link_new->is_selected = TRUE;
-
- g_signal_emit_by_name(hypertext,
- "link-selected", hypertext->current_selected_link);
-}
-//initialize/finalize functions
-static void my_atk_hypertext_instance_init(GTypeInstance *obj, gpointer g_class)
-{
- MyAtkHypertext *self = (MyAtkHypertext*)obj;
-
- self->hyperlink_ranges = g_array_new(FALSE, FALSE, sizeof(HyperlinkRange));
- self->hyperlinks = g_ptr_array_new();
-
- self->current_selected_link = -1;
-}
-static void my_atk_hypertext_instance_finalize(GObject* obj)
-{
- MyAtkHypertext *self = (MyAtkHypertext*)obj;
-
- g_array_free(self->hyperlink_ranges, FALSE);
-
- g_ptr_array_foreach(self->hyperlinks,(GFunc)g_object_unref, NULL);
- g_ptr_array_free(self->hyperlinks, FALSE);
-}
-
-static void my_atk_hypertext_class_init(gpointer g_class, gpointer class_data)
-{
- GObjectClass* g_object_class = (GObjectClass*)g_class;
- //GObject virtual table
- g_object_class->finalize = my_atk_hypertext_instance_finalize;
- //parent_class
- parent_class_atk_text = g_type_class_peek_parent(g_class);
-}
-static void my_atk_hypertext_interface_init(gpointer g_iface, gpointer iface_data)
-{
- AtkHypertextIface *klass = (AtkHypertextIface*)g_iface;
-
- klass->get_link = my_atk_hypertext_get_link;
- klass->get_n_links = my_atk_hypertext_get_n_links;
- klass->get_link_index = my_atk_hypertext_get_link_index;
-}
-
-GType my_atk_hypertext_get_type()
-{
- static GType type = 0;
- if(type == 0)
- {
- static const GTypeInfo typeInfo =
- {
- sizeof(MyAtkHypertextClass),
- NULL, //base_init
- NULL, //base_finalize
- my_atk_hypertext_class_init, //class_init
- NULL, //class_finalize
- NULL, //class_data
- sizeof(MyAtkHypertext),
- 0, //n_preallocs
- my_atk_hypertext_instance_init //instance_init
- };
-
- static const GInterfaceInfo AtkTextIface_info =
- {
- my_atk_text_interface_init, /* interface_init*/
- NULL, /* interface_finalize*/
- NULL /* interface_data */
- };
- static const GInterfaceInfo AtkHypertextIface_info =
- {
- my_atk_hypertext_interface_init,/* interface_init*/
- NULL, /* interface_finalize*/
- NULL /* interface_data */
- };
- type = g_type_register_static(MY_TYPE_ATK_TEXT, "MyAtkHypertext", &typeInfo, 0);
- g_type_add_interface_static(type,
- ATK_TYPE_TEXT,
- &AtkTextIface_info);
-
- g_type_add_interface_static(type,
- ATK_TYPE_HYPERTEXT,
- &AtkHypertextIface_info);
- }
- return type;
-}
diff --git a/tests/dummyatk/my-atk-hypertext.h b/tests/dummyatk/my-atk-hypertext.h
deleted file mode 100644
index 50d02cf..0000000
--- a/tests/dummyatk/my-atk-hypertext.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef MY_ATK_HYPERTEXT_H
-#define MY_ATK_HYPERTEXT_H
-/*
- * MyAtkHypertext: implements AtkHypertext
- */
-#include <atk/atk.h>
-#include <my-atk-text.h>
-
-#define MY_TYPE_ATK_HYPERTEXT (my_atk_hypertext_get_type ())
-#define MY_ATK_HYPERTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_HYPERTEXT, MyAtkHypertext))
-#define MY_ATK_HYPERTEXT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_HYPERTEXT, MyAtkHypertextClass))
-#define MY_IS_ATK_HYPERTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_HYPERTEXT))
-#define MY_IS_ATK_HYPERTEXT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_HYPERTEXT))
-#define MY_ATK_HYPERTEXT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_HYPERTEXT, MyAtkHypertextClass))
-
-typedef struct _MyAtkHypertext MyAtkHypertext;
-typedef struct _MyAtkHypertextClass MyAtkHypertextClass;
-
-struct _MyAtkHypertext
-{
- MyAtkText parent;
-
- GArray* hyperlink_ranges;
- GPtrArray* hyperlinks;
-
- gint current_selected_link;
-};
-
-struct _MyAtkHypertextClass
-{
- MyAtkTextClass parent;
-};
-#endif /*MY_ATK_HYPERTEXT_H*/
diff --git a/tests/dummyatk/my-atk-object.c b/tests/dummyatk/my-atk-object.c
deleted file mode 100644
index 4029424..0000000
--- a/tests/dummyatk/my-atk-object.c
+++ /dev/null
@@ -1,186 +0,0 @@
-
-#include <stdio.h>
-#include <atk/atk.h>
-
-#include "my-atk-object.h"
-
-static AtkObjectClass *atk_object_parent_class = NULL;
-
-void my_atk_object_add_child(MyAtkObject* parent, MyAtkObject* child)
-{
- g_ptr_array_add(parent->children, child);
- g_object_ref_sink(child);
-
- atk_object_set_parent(ATK_OBJECT(child), ATK_OBJECT(parent));
-
- g_signal_emit_by_name(parent, "children-changed::add",
- parent->children->len - 1, child);
-}
-
-void my_atk_object_remove_child(MyAtkObject* parent, MyAtkObject* child)
-{
- gint i;
- for(i = parent->children->len - 1; i >= 0; i--)
- {
- if(g_ptr_array_index(parent->children, i) == child) break;
- }
- if(i < 0)return;
-
- g_ptr_array_remove_index(parent->children, i);
- g_object_unref(child);
- g_signal_emit_by_name(parent, "children-changed::remove",
- i, child);
-}
-
-static void my_atk_object_set_parent(AtkObject *accessible, AtkObject *parent)
-{
- g_return_if_fail(parent != NULL);
-
- MyAtkObject *self = MY_ATK_OBJECT(accessible);
- AtkObject *parent_old = (atk_object_get_parent(accessible));
-
- if(parent_old == parent)
- {
- //nothing to do because parent does not change
- return;
- }
-
- //set field 'parent' in child using 'base-method'
- atk_object_parent_class->set_parent(accessible, parent);
-
- if(parent_old != NULL)
- {
- my_atk_object_remove_child((MyAtkObject*)parent_old, self);
- }
-}
-
-static gint my_atk_object_get_n_children(AtkObject *accessible)
-{
- return MY_ATK_OBJECT(accessible)->children->len;
-}
-
-static AtkObject* my_atk_object_ref_child(AtkObject *accessible, gint i)
-{
- MyAtkObject *self = MY_ATK_OBJECT(accessible);
- if(i < 0 || i >= self->children->len)
- {
- printf("ref_child: Incorrect index of child.\n");
- return NULL;
- }
-
- AtkObject* child = (AtkObject*)
- g_ptr_array_index(self->children, i);
-
- return (child == NULL) ? NULL : g_object_ref(child);
-}
-
-static gint my_atk_object_get_index_in_parent(AtkObject *accessible)
-{
- AtkObject *parent = atk_object_get_parent(accessible);
- if(parent == NULL) return -1;//no parent
-
- MyAtkObject *parent_my = MY_ATK_OBJECT(parent);
-
- int i = parent_my->children->len;
- for(; i>=0; i--)
- {
- if(g_ptr_array_index(parent_my->children,i) == accessible)
- break;
- }
- if(i < 0)printf("Something wrong in parent-child strucutre.\n");
- return i;//if error, i will be equal to -1
-}
-
-static AtkStateSet *my_atk_object_ref_state_set(AtkObject *accessible)
-{
- MyAtkObject *obj = MY_ATK_OBJECT(accessible);
-
- if (obj->state_set == NULL)
- obj->state_set = atk_state_set_new();
- return g_object_ref(G_OBJECT(obj->state_set));
-}
-
-static AtkAttributeSet *my_atk_object_get_attributes (AtkObject *accessible)
-{
- MyAtkObject *obj = MY_ATK_OBJECT(accessible);
- AtkAttributeSet *rs = obj->attributes = NULL;
- AtkAttribute *a, *b, *c;
-
- a = g_new(AtkAttribute, 1);
- b = g_new(AtkAttribute, 1);
- c = g_new(AtkAttribute, 1);
-
- a->name = g_strdup("foo");
- a->value = g_strdup("bar");
- b->name = g_strdup("baz");
- b->value = g_strdup("qux");
- c->name = g_strdup("quux");
- c->value = g_strdup("corge");
-
- rs = g_slist_append(rs, (gpointer) a);
- rs = g_slist_append(rs, (gpointer) b);
- rs = g_slist_append(rs, (gpointer) c);
-}
-
-//function, needed in instance_finalize()
-static void my_unref1(gpointer data, gpointer user_data)
-{
- g_object_unref(data);
-}
-
-static void my_atk_object_instance_finalize(GObject *obj)
-{
- MyAtkObject *self = (MyAtkObject*) obj;
- //unrefs all children
- g_ptr_array_foreach(self->children, my_unref1, NULL);
- //then free array (without frees pointers)
- g_ptr_array_free(self->children, FALSE);
- //chain to parent class
- G_OBJECT_CLASS(atk_object_parent_class)->finalize(obj);
-}
-
-void my_atk_object_class_init(gpointer g_class, gpointer g_class_data)
-{
- AtkObjectClass *atkObjectClass = (AtkObjectClass*)g_class;
-
- ((GObjectClass*)g_class)->finalize = my_atk_object_instance_finalize;
- //set pointers to new functions in table of virtuals functions
- atkObjectClass->set_parent = my_atk_object_set_parent;
- atkObjectClass->get_n_children = my_atk_object_get_n_children;
- atkObjectClass->ref_child = my_atk_object_ref_child;
- atkObjectClass->get_index_in_parent = my_atk_object_get_index_in_parent;
- atkObjectClass->ref_state_set = my_atk_object_ref_state_set;
- atkObjectClass->get_attributes = my_atk_object_get_attributes;
-
- atk_object_parent_class = g_type_class_peek_parent(g_class);
-}
-
-static void my_atk_object_instance_init(GTypeInstance *obj, gpointer g_class)
-{
- MyAtkObject *self = (MyAtkObject*)obj;
-
- self->children = g_ptr_array_sized_new(10);
- self->attributes = g_slist_alloc();
-}
-
-GType my_atk_object_get_type()
-{
- static GType type = 0;
- if(type == 0)
- {
- static const GTypeInfo typeInfo =
- {
- sizeof(MyAtkObjectClass),
- NULL, //base_init
- NULL, //base_finalize
- my_atk_object_class_init, //class_init
- NULL, //class_finalize
- NULL, //class_data
- sizeof(MyAtkObject),
- 0, //n_preallocs
- my_atk_object_instance_init //instance_init
- };
- type = g_type_register_static(ATK_TYPE_OBJECT,"MyAtkObject",&typeInfo,0);
- }
- return type;
-}
diff --git a/tests/dummyatk/my-atk-object.h b/tests/dummyatk/my-atk-object.h
deleted file mode 100644
index 72a4aea..0000000
--- a/tests/dummyatk/my-atk-object.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef MY_ATK_OBJECT_H
-#define MY_ATK_OBJECT_H
-
-#include <atk/atk.h>
-
-#define MY_TYPE_ATK_OBJECT (my_atk_object_get_type ())
-#define MY_ATK_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_OBJECT, MyAtkObject))
-#define MY_ATK_OBJECT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_OBJECT, MyAtkObjectClass))
-#define MY_IS_ATK_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_OBJECT))
-#define MY_IS_ATK_OBJECT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_OBJECT))
-#define MY_ATK_OBJECT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_OBJECT, MyAtkObjectClass))
-
-typedef struct _MyAtkObject MyAtkObject;
-typedef struct _MyAtkObjectClass MyAtkObjectClass;
-
-struct _MyAtkObject
-{
- AtkObject parent;
- //array of children
- AtkStateSet *state_set;
- AtkAttributeSet *attributes;
- GPtrArray* children;
- gint id;
-};
-
-struct _MyAtkObjectClass
-{
- AtkObjectClass parent;
-};
-
-GType my_atk_object_get_type();
-
-void my_atk_object_add_child(MyAtkObject* parent, MyAtkObject* child);
-
-void my_atk_object_remove_child(MyAtkObject* parent, MyAtkObject* child);
-
-#endif /*MY_ATK_OBJECT_H*/
diff --git a/tests/dummyatk/my-atk-selection.c b/tests/dummyatk/my-atk-selection.c
deleted file mode 100644
index e3f386f..0000000
--- a/tests/dummyatk/my-atk-selection.c
+++ /dev/null
@@ -1,332 +0,0 @@
-/* This file contains both declaration and definition of the MyAtkSelection,
- * a GObject that implements the AtkSelectionIface interface.
- */
-
-#include <glib-object.h>
-#include <atk/atk.h>
-
-#include "my-atk-object.h"
-#include "my-atk-selection.h"
-
-/******************************************************************/
-/* Implementation */
-/******************************************************************/
-static GObjectClass *parent_class_simple_selection = NULL;
-
-/* Implementation of the AtkSelectionIface interface. */
-static gboolean
-simple_selection_add_selection (AtkSelection *selection, gint i)
-{
- MyAtkSelection* self = (MyAtkSelection*)selection;
- if ((!self) || self->disposed)
- {
- return FALSE;
- }
-
- if ((i >= 0) && (i < TEST_SELECTION_NCHILDREN))
- {
- /* If the child is not selected, select it and send the signal */
- if (!self->is_selected[i])
- {
- self->is_selected[i] = TRUE;
- g_signal_emit_by_name ((gpointer)self, "selection-changed");
- }
-
- return TRUE;
- }
- else
- {
- return FALSE;
- }
-
-}
-
-static gboolean
-simple_selection_clear_selection (AtkSelection *selection)
-{
- MyAtkSelection* self = (MyAtkSelection*)selection;
- if ((!self) || self->disposed)
- {
- return FALSE;
- }
-
- /* clear selection */
- {
- gboolean changed = FALSE;
- int i;
- for (i = 0; i < TEST_SELECTION_NCHILDREN; ++i)
- {
- changed |= self->is_selected[i];
- self->is_selected[i] = FALSE;
- }
-
- if (changed)
- {
- g_signal_emit_by_name ((gpointer)self, "selection-changed");
- }
- }
-
- return TRUE;
-}
-
-static AtkObject*
-simple_selection_ref_selection (AtkSelection *selection, gint i)
-{
- int pos;
- int nsel;
- MyAtkSelection* self = (MyAtkSelection*)selection;
- if ((!self) || self->disposed)
- {
- return NULL;
- }
-
- nsel = 0;
- for (pos = 0; pos < TEST_SELECTION_NCHILDREN; ++pos)
- {
- if (self->is_selected[pos])
- {
- if (i == nsel)
- {
- g_object_ref (G_OBJECT (self->child[pos]));
- return ATK_OBJECT(self->child[pos]);
- }
- ++nsel;
- }
- }
-
- return NULL;
-}
-
-static gint
-simple_selection_get_selection_count (AtkSelection *selection)
-{
- MyAtkSelection* self = (MyAtkSelection*)selection;
-
- int cnt = 0;
- int i;
-
- if ((!self) || self->disposed)
- {
- return 0;
- }
-
- for (i = 0; i < TEST_SELECTION_NCHILDREN; ++i)
- {
- if (self->is_selected[i])
- {
- ++cnt;
- }
- }
-
- return cnt;
-}
-
-static gboolean
-simple_selection_is_child_selected (AtkSelection *selection, gint i)
-{
- MyAtkSelection* self = (MyAtkSelection*)selection;
- if ((!self) || self->disposed)
- {
- return FALSE;
- }
-
- if ((i >= 0) && (i < TEST_SELECTION_NCHILDREN))
- {
- return (self->is_selected[i]);
- }
- else
- {
- return FALSE;
- }
-}
-
-static gboolean
-simple_selection_remove_selection (AtkSelection *selection, gint i)
-{
- int pos;
- int nsel;
-
- MyAtkSelection* self = (MyAtkSelection*)selection;
- if ((!self) || self->disposed)
- {
- return FALSE;
- }
-
- nsel = 0;
- for (pos = 0; pos < TEST_SELECTION_NCHILDREN; ++pos)
- {
- if (self->is_selected[pos])
- {
- if (i == nsel)
- {
- self->is_selected[pos] = FALSE;
- g_signal_emit_by_name ((gpointer)self, "selection-changed");
- return TRUE;
- }
- ++nsel;
- }
- }
-
- return TRUE;
-}
-
-static gboolean
-simple_selection_select_all_selection (AtkSelection *selection)
-{
- MyAtkSelection* self = (MyAtkSelection*)selection;
- if ((!self) || self->disposed)
- {
- return FALSE;
- }
-
- if (!self->multisel_supported)
- {
- return FALSE;
- }
-
- /* select all */
- {
- gboolean changed = FALSE;
- int i;
- for (i = 0; i < TEST_SELECTION_NCHILDREN; ++i)
- {
- changed |= !self->is_selected[i];
- self->is_selected[i] = TRUE;
- }
-
- if (changed)
- {
- g_signal_emit_by_name ((gpointer)self, "selection-changed");
- }
- }
-
- return TRUE;
-}
-
-/******************************************************************/
-static void
-simple_selection_interface_init (gpointer g_iface, gpointer iface_data)
-{
- AtkSelectionIface *klass = (AtkSelectionIface *)g_iface;
-
- /* set up overrides here */
- klass->add_selection =
- (gboolean (*) (AtkSelection *selection, gint i)) simple_selection_add_selection;
-
- klass->clear_selection =
- (gboolean (*) (AtkSelection *selection)) simple_selection_clear_selection;
-
- klass->ref_selection =
- (AtkObject* (*) (AtkSelection *selection, gint i)) simple_selection_ref_selection;
-
- klass->get_selection_count =
- (gint (*) (AtkSelection *selection)) simple_selection_get_selection_count;
-
- klass->is_child_selected =
- (gboolean (*) (AtkSelection *selection, gint i)) simple_selection_is_child_selected;
-
- klass->remove_selection =
- (gboolean (*) (AtkSelection *selection, gint i)) simple_selection_remove_selection;
-
- klass->select_all_selection =
- (gboolean (*) (AtkSelection *selection)) simple_selection_select_all_selection;
-}
-
-static void
-simple_selection_instance_init (GTypeInstance *instance, gpointer g_class)
-{
- MyAtkSelection *self = (MyAtkSelection *)instance;
- int i;
-
- self->disposed = FALSE;
- self->multisel_supported = TRUE;
- for (i = 0; i < TEST_SELECTION_NCHILDREN; ++i)
- {
- self->child[i] = MY_ATK_OBJECT (g_object_new (MY_TYPE_ATK_OBJECT, NULL));
- self->child[i]->id = i;
- self->is_selected[i] = FALSE; /* not selected by default */
- }
-}
-
-static void
-my_atk_selection_dispose (GObject *obj)
-{
- MyAtkSelection *self = (MyAtkSelection *)obj;
- int i;
-
- if (self->disposed)
- {
- return;
- }
-
- /* Make sure dispose does not run twice. */
- self->disposed = TRUE;
-
- for (i = 0; i < TEST_SELECTION_NCHILDREN; ++i)
- {
- g_object_unref (G_OBJECT (self->child[i]));
- }
-
- /* Chain up to the parent class */
- G_OBJECT_CLASS (parent_class_simple_selection)->dispose (obj);
-}
-
-static void
-my_atk_selection_finalize (GObject *obj)
-{
- /*MyAtkSelection *self = (MyAtkSelection *)obj;
- if (self)
- {
- }*/
-
- /* Chain up to the parent class */
- G_OBJECT_CLASS (parent_class_simple_selection)->finalize (obj);
-}
-
-static void
-my_atk_selection_class_init (gpointer g_class, gpointer g_class_data)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (g_class);
- MyAtkSelectionClass *klass = MY_ATK_SELECTION_CLASS (g_class);
-
- gobject_class->dispose = my_atk_selection_dispose;
- gobject_class->finalize = my_atk_selection_finalize;
-
- parent_class_simple_selection = g_type_class_peek_parent (klass);
-}
-
-GType
-my_atk_selection_get_type (void)
-{
- static GType type = 0;
- if (type == 0)
- {
- static const GTypeInfo info =
- {
- sizeof (MyAtkSelectionClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- my_atk_selection_class_init, /* class_init */
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (MyAtkSelection),
- 0, /* n_preallocs */
- simple_selection_instance_init /* instance_init */
- };
-
- static const GInterfaceInfo iface_info =
- {
- (GInterfaceInitFunc) simple_selection_interface_init, /* interface_init */
- NULL, /* interface_finalize */
- NULL /* interface_data */
- };
- type = g_type_register_static (MY_TYPE_ATK_OBJECT,
- "MyAtkSelectionType",
- &info, 0);
- g_type_add_interface_static (type,
- ATK_TYPE_SELECTION,
- &iface_info);
- }
- return type;
-}
-
diff --git a/tests/dummyatk/my-atk-selection.h b/tests/dummyatk/my-atk-selection.h
deleted file mode 100644
index 8e8fcf5..0000000
--- a/tests/dummyatk/my-atk-selection.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* This file contains both declaration and definition of the MyAtkSelection,
- * a GObject that implements the AtkSelectionIface interface.
- */
-
-#ifndef MY_ATK_SELECTION_H
-#define MY_ATK_SELECTION_H
-
-#include <glib-object.h>
-#include <atk/atk.h>
-
-#include <my-atk-object.h>
-
-#define MY_TYPE_ATK_SELECTION (my_atk_selection_get_type ())
-#define MY_ATK_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_SELECTION, MyAtkSelection))
-#define MY_ATK_SELECTION_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_SELECTION, MyAtkSelectionClass))
-#define MY_IS_ATK_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_SELECTION))
-#define MY_IS_ATK_SELECTION_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_SELECTION))
-#define MY_ATK_SELECTION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_SELECTION, MyAtkSelectionClass))
-
-/* Number of child objects for the MyAtkSelection instance */
-#define TEST_SELECTION_NCHILDREN 10
-
-typedef struct _MyAtkSelection MyAtkSelection;
-typedef struct _MyAtkSelectionClass MyAtkSelectionClass;
-
-struct _MyAtkSelection
-{
- MyAtkObject parent;
-
- gboolean disposed;
-
- /* TRUE if multiple selection is supported, FALSE otherwise.
- * default - TRUE.
- */
- gboolean multisel_supported;
-
- /* Children of this object */
- MyAtkObject* child[TEST_SELECTION_NCHILDREN];
-
- /* is_selected[i] == TRUE means the ith child is selected, == FALSE -
- * it is not.
- */
- gboolean is_selected[TEST_SELECTION_NCHILDREN];
-};
-
-struct _MyAtkSelectionClass
-{
- MyAtkObjectClass parent;
-};
-
-GType
-my_atk_selection_get_type (void);
-
-#endif /*MY_ATK_SELECTION_H*/
-
diff --git a/tests/dummyatk/my-atk-streamable-content.c b/tests/dummyatk/my-atk-streamable-content.c
deleted file mode 100644
index 460dd9a..0000000
--- a/tests/dummyatk/my-atk-streamable-content.c
+++ /dev/null
@@ -1,96 +0,0 @@
-#include <atk/atk.h>
-
-#include "my-atk-object.h"
-#include "my-atk-streamable-content.h"
-
-//*************************implementation***********************
-//implementation of virtual functions
-//*****************get_n_mime_types************
-static gint my_atk_streamable_content_get_n_mime_types(
- AtkStreamableContent *streamable)
-{
- g_return_val_if_fail(MY_IS_ATK_STREAMABLE_CONTENT(streamable), 0);
-
- return sizeof(mime_types) / sizeof(mime_types[0]);
-}
-//*****************get_mime_type****************
-static const gchar* my_atk_streamable_content_get_mime_type(
- AtkStreamableContent *streamable,
- gint i)
-{
- g_return_val_if_fail(MY_IS_ATK_STREAMABLE_CONTENT(streamable), NULL);
-
- if((i < 0) || (i >= sizeof(mime_types) / sizeof(mime_types[0])))
- {
- return NULL;
- }
- return mime_types[i];
-}
-//**********************get_stream*******************
-static GIOChannel* my_atk_streamable_content_get_stream(
- AtkStreamableContent *streamable,
- const gchar* mime_type)
-{
- gint i;
- g_return_val_if_fail(MY_IS_ATK_STREAMABLE_CONTENT(streamable), NULL);
-
- for(i = 0; i < sizeof(mime_types) / sizeof(mime_types[0]); i++)
- {
- if(strcmp(mime_type, mime_types[i]) == 0)
- {
- GError *error = NULL;
- gchar* full_filename = T2C_GET_DATA_PATH(file_names[i]);
- GIOChannel* channel = g_io_channel_new_file(full_filename, "r", &error);
- if(error != NULL)
- {
- TRACE("Cannot open file '%s' for read: %s", full_filename,
- error->message);
- g_error_free(error);
- }
- g_free(full_filename);
- return channel;
- }
- }
- return NULL;
-}
-//others functions
-static void my_atk_streamable_content_interface_init(gpointer g_iface, gpointer iface_data)
-{
- AtkStreamableContentIface *klass = (AtkStreamableContentIface*)g_iface;
-
- klass->get_n_mime_types = my_atk_streamable_content_get_n_mime_types;
- klass->get_mime_type = my_atk_streamable_content_get_mime_type;
- klass->get_stream = my_atk_streamable_content_get_stream;
-}
-
-GType my_atk_streamable_content_get_type()
-{
- static GType type = 0;
- if(type == 0)
- {
- static const GTypeInfo typeInfo =
- {
- sizeof(MyAtkStreamableContentClass),
- NULL, //base_init
- NULL, //base_finalize
- NULL, //class_init
- NULL, //class_finalize
- NULL, //class_data
- sizeof(MyAtkStreamableContent),
- 0, //n_preallocs
- NULL //instance_init
- };
-
- static const GInterfaceInfo iface_info =
- {
- my_atk_streamable_content_interface_init, /* interface_init*/
- NULL, /* interface_finalize*/
- NULL /* interface_data */
- };
- type = g_type_register_static(MY_TYPE_ATK_OBJECT, "MyAtkStreamableContent", &typeInfo, 0);
- g_type_add_interface_static(type,
- ATK_TYPE_STREAMABLE_CONTENT,
- &iface_info);
- }
- return type;
-}
diff --git a/tests/dummyatk/my-atk-streamable-content.h b/tests/dummyatk/my-atk-streamable-content.h
deleted file mode 100644
index 7a476ac..0000000
--- a/tests/dummyatk/my-atk-streamable-content.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef MY_ATK_STREAMABLE_CONTENT_H
-#define MY_ATK_STREAMABLE_CONTENT_H
-
-/*
- * MyAtkStreamableContent: derives GObject and implements AtkStreamableContent
- */
-
-#include <atk/atk.h>
-
-#include "my-atk-object.h"
-
-#define MY_TYPE_ATK_STREAMABLE_CONTENT (my_atk_streamable_content_get_type ())
-#define MY_ATK_STREAMABLE_CONTENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_STREAMABLE_CONTENT, MyAtkStreamableContent))
-#define MY_ATK_STREAMABLE_CONTENT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_STREAMABLE_CONTENT, MyAtkStreamableContentClass))
-#define MY_IS_ATK_STREAMABLE_CONTENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_STREAMABLE_CONTENT))
-#define MY_IS_ATK_STREAMABLE_CONTENT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_STREAMABLE_CONTENT))
-#define MY_ATK_STREAMABLE_CONTENT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_STREAMABLE_CONTENT, MyAtkStreamableContentClass))
-
-typedef struct _MyAtkStreamableContent MyAtkStreamableContent;
-typedef struct _MyAtkStreamableContentClass MyAtkStreamableContentClass;
-
-static const gchar* mime_types[]={"text/plain", "text/richtext"};
-static const gchar* file_names[]={"file1", "file2"};
-struct _MyAtkStreamableContent
-{
- MyAtkObject parent;
-};
-
-struct _MyAtkStreamableContentClass
-{
- MyAtkObjectClass parent;
-};
-
-GType my_atk_streamable_content_get_type();
-#endif /*MY_ATK_STREAMABLE_CONTENT_H*/
diff --git a/tests/dummyatk/my-atk-table.c b/tests/dummyatk/my-atk-table.c
deleted file mode 100644
index a76c70e..0000000
--- a/tests/dummyatk/my-atk-table.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/* This file contains both declaration and definition of the MyAtkTable,
- * a GObject that pretends to implement the AtkTableIface interface (it
- * registers appropriate interface), but provides no implementation for any of the
- * methods of this interface (NULL-filled vftbl).
- */
-
-#include <glib-object.h>
-#include <atk/atk.h>
-
-#include "my-atk-object.h"
-#include "my-atk-table.h"
-
-///////////////////////////////////////////////////////////////////////////
-// Helper functions and data
-///////////////////////////////////////////////////////////////////////////
-void
-my_atk_table_select_rows (MyAtkTable* table, gboolean sel_scheme[])
-{
- // the function does nothing
-}
-
-void
-my_atk_table_select_columns (MyAtkTable* table, gboolean sel_scheme[])
-{
- // the function does nothing
-}
-
-///////////////////////////////////////////////////////////////////////////
-// Implementation
-///////////////////////////////////////////////////////////////////////////
-static GObjectClass *parent_class_table = NULL;
-
-/******************************************************************/
-static void
-table_interface_init (gpointer g_iface, gpointer iface_data)
-{
- AtkTableIface *klass = (AtkTableIface *)g_iface;
-
- /* set up overrides here */
- klass-> ref_at =
- (AtkObject* (*) (AtkTable *table, gint row, gint column)) NULL;
- klass-> get_index_at =
- (gint (*) (AtkTable *table, gint row, gint column)) NULL;
- klass-> get_column_at_index =
- (gint (*) (AtkTable *table, gint index_)) NULL;
- klass-> get_row_at_index =
- (gint (*) (AtkTable *table, gint index_)) NULL;
- klass-> get_n_columns =
- (gint (*) (AtkTable *table)) NULL;
- klass-> get_n_rows =
- (gint (*) (AtkTable *table)) NULL;
- klass-> get_column_extent_at =
- (gint (*) (AtkTable *table, gint row, gint column)) NULL;
- klass-> get_row_extent_at =
- (gint (*) (AtkTable *table, gint row, gint column)) NULL;
- klass-> get_caption =
- (AtkObject* (*) (AtkTable *table)) NULL;
- klass-> get_column_description =
- (const gchar* (*) (AtkTable *table, gint column)) NULL;
- klass-> get_column_header =
- (AtkObject* (*) (AtkTable *table, gint column)) NULL;
- klass-> get_row_description =
- (const gchar* (*) (AtkTable *table, gint row)) NULL;
- klass-> get_row_header =
- (AtkObject* (*) (AtkTable *table, gint row)) NULL;
- klass-> get_summary =
- (AtkObject* (*) (AtkTable *table)) NULL;
- klass-> set_caption =
- (void (*) (AtkTable *table, AtkObject *caption)) NULL;
- klass-> set_column_description =
- (void (*) (AtkTable *table, gint column, const gchar *description)) NULL;
- klass-> set_column_header =
- (void (*) (AtkTable *table, gint column, AtkObject *header)) NULL;
- klass-> set_row_description =
- (void (*) (AtkTable *table, gint row, const gchar *description)) NULL;
- klass-> set_row_header =
- (void (*) (AtkTable *table, gint row, AtkObject *header)) NULL;
- klass-> set_summary =
- (void (*) (AtkTable *table, AtkObject *accessible)) NULL;
- klass-> get_selected_columns =
- (gint (*) (AtkTable *table, gint **selected)) NULL;
- klass-> get_selected_rows =
- (gint (*) (AtkTable *table, gint **selected)) NULL;
- klass-> is_column_selected =
- (gboolean (*) (AtkTable *table, gint column)) NULL;
- klass-> is_row_selected =
- (gboolean (*) (AtkTable *table, gint row)) NULL;
- klass-> is_selected =
- (gboolean (*) (AtkTable *table, gint row, gint column)) NULL;
- klass-> add_row_selection =
- (gboolean (*) (AtkTable *table, gint row)) NULL;
- klass-> remove_row_selection =
- (gboolean (*) (AtkTable *table, gint row)) NULL;
- klass-> add_column_selection =
- (gboolean (*) (AtkTable *table, gint column)) NULL;
- klass-> remove_column_selection =
- (gboolean (*) (AtkTable *table, gint column)) NULL;
-}
-
-static void
-table_instance_init (GTypeInstance *instance, gpointer g_class)
-{
- MyAtkTable *self = (MyAtkTable *)instance;
-
- self->disposed = FALSE;
-}
-
-static void
-my_atk_table_dispose (GObject *obj)
-{
- MyAtkTable *self = (MyAtkTable *)obj;
-
- if (self->disposed)
- {
- return;
- }
-
- /* Make sure dispose does not run twice. */
- self->disposed = TRUE;
-
- /* Chain up to the parent class */
- G_OBJECT_CLASS (parent_class_table)->dispose (obj);
-}
-
-static void
-my_atk_table_finalize (GObject *obj)
-{
- /* Chain up to the parent class */
- G_OBJECT_CLASS (parent_class_table)->finalize (obj);
-}
-
-static void
-my_atk_table_class_init (gpointer g_class, gpointer g_class_data)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (g_class);
- MyAtkTableClass *klass = MY_ATK_TABLE_CLASS (g_class);
-
- gobject_class->dispose = my_atk_table_dispose;
- gobject_class->finalize = my_atk_table_finalize;
-
- parent_class_table = g_type_class_peek_parent (klass);
-}
-
-GType
-my_atk_table_get_type (void)
-{
- static GType type = 0;
- if (type == 0)
- {
- static const GTypeInfo info =
- {
- sizeof (MyAtkTableClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- my_atk_table_class_init, /* class_init */
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (MyAtkTable),
- 0, /* n_preallocs */
- table_instance_init /* instance_init */
- };
-
- static const GInterfaceInfo iface_info =
- {
- (GInterfaceInitFunc) table_interface_init, /* interface_init */
- NULL, /* interface_finalize */
- NULL /* interface_data */
- };
- type = g_type_register_static (MY_TYPE_ATK_OBJECT,
- "MyAtkTableType",
- &info, 0);
- g_type_add_interface_static (type,
- ATK_TYPE_TABLE,
- &iface_info);
- }
- return type;
-}
diff --git a/tests/dummyatk/my-atk-table.h b/tests/dummyatk/my-atk-table.h
deleted file mode 100644
index 7860a2d..0000000
--- a/tests/dummyatk/my-atk-table.h
+++ /dev/null
@@ -1,86 +0,0 @@
-#ifndef MY_ATK_TABLE_H
-#define MY_ATK_TABLE_H
-
-#include <glib-object.h>
-#include <atk/atk.h>
-#include <my-atk-object.h>
-
-#define MY_TYPE_ATK_TABLE (my_atk_table_get_type ())
-#define MY_ATK_TABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_TABLE, MyAtkTable))
-#define MY_ATK_TABLE_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_TABLE, MyAtkTableClass))
-#define MY_IS_ATK_TABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_TABLE))
-#define MY_IS_ATK_TABLE_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_TABLE))
-#define MY_ATK_TABLE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_TABLE, MyAtkTableClass))
-
-#define NROWS 4 /* row count */
-#define NCOLS 5 /* column count */
-
-static gint ids[NROWS][NCOLS] =
- { {0, 1, 2, 2, 3},
- {4, 5, 6, 7, 8},
- {9, 9, 10, 11, 12},
- {9, 9, 13, 14, -1} };
-
-static gint row_ext[NROWS][NCOLS] =
- { {1, 1, 1, 1, 1},
- {1, 1, 1, 1, 1},
- {2, 2, 1, 1, 1},
- {2, 2, 1, 1, 1} };
-
-static gint col_ext[NROWS][NCOLS] =
- { {1, 1, 2, 2, 1},
- {1, 1, 1, 1, 1},
- {2, 2, 1, 1, 1},
- {2, 2, 1, 1, 1} };
-
-#define NCHILDREN 16 /* child object count */
-
-// default string values
-#define DEF_CAPTION_TEXT "Default table caption"
-#define DEF_SUMMARY_TEXT "Default table summary"
-#define DEF_ROW_DESCR_TPL "Row No%d"
-#define DEF_COL_DESCR_TPL "Column No%d"
-
-/* row and column headers */
-typedef struct
-{
- AtkObject* hdr;
- gboolean selected; /* TRUE if the row/column is selected, FALSE otherwise */
-} TestSimpleHeaderStruct;
-
-/* This struct represents a table cell */
-typedef struct
-{
- MyAtkObject* elem; /* the element */
- guint ext_row; /* its row extent */
- guint ext_col; /* its column extent */
-} TestSimpleCell;
-
-typedef struct _MyAtkTable MyAtkTable;
-typedef struct _MyAtkTableClass MyAtkTableClass;
-
-struct _MyAtkTable
-{
- MyAtkObject parent;
-
- gboolean disposed;
-
- MyAtkObject* child[NCHILDREN];
- MyAtkObject* not_a_child;
- TestSimpleHeaderStruct row[NROWS];
- TestSimpleHeaderStruct col[NCOLS];
- guint nrows;
- guint ncols;
- AtkObject* caption;
- AtkObject* summary;
-};
-
-struct _MyAtkTableClass
-{
- MyAtkObjectClass parent;
-};
-
-GType
-my_atk_table_get_type (void);
-
-#endif /*MY_ATK_TABLE_H*/
diff --git a/tests/dummyatk/my-atk-text.c b/tests/dummyatk/my-atk-text.c
deleted file mode 100644
index 6729c4b..0000000
--- a/tests/dummyatk/my-atk-text.c
+++ /dev/null
@@ -1,1290 +0,0 @@
-
-#include <atk/atk.h>
-#include <string.h>
-#include <limits.h>
-#include <useful_functions.h>
-
-#include "my-atk-text.h"
-//*************************implementation***********************
-
-//Attributes
-/*
- * Auxiliary functions create/copy/print/free structures
- * Use the same naming principe, as atk, but without 'atk' prefix
- */
- //AtkAttribute
-AtkAttribute* attribute_new(const gchar* name, const gchar* value)
-{
- AtkAttribute* attr = g_malloc(sizeof(AtkAttribute));
- if(attr == NULL) return NULL;
- attr->name = g_strdup(name);
- attr->value = g_strdup(value);
- return attr;
-}
-AtkAttribute* attribute_copy(AtkAttribute* attr)
-{
- return attribute_new(attr->name, attr->value);
-}
-void attribute_print(AtkAttribute* attr)
-{
- TRACE("name=%s, value=%s", attr->name, attr->value);
-}
-
-//AtkAttributeSet
-AtkAttributeSet* attribute_set_copy(AtkAttributeSet* attr)
-{
- GSList *tmp;
- AtkAttributeSet* result = g_slist_copy(attr);
- for(tmp = result; tmp != NULL; tmp = tmp->next)
- tmp->data = attribute_copy((AtkAttribute*)tmp->data);
- return result;
-}
-void attribute_set_print(AtkAttributeSet *set)
-{
- if(set == NULL)
- TRACE0("(empty)");
- else
- g_slist_foreach(set, (GFunc)attribute_print, NULL);
-}
-
-// STATIC FUNCTIONS
-//
-//auxiliary functions for search tokens
-//Number of different characters
-#define TABLE_SIZE 256
-//modificator static isn't used because this tables will be use in tests
-/*static*/ gboolean table_word_symbols[TABLE_SIZE],
- table_sentence_symbols[TABLE_SIZE],
- table_line_symbols[TABLE_SIZE];
-static gboolean *tables[7]={NULL,
- table_word_symbols,
- table_word_symbols,
- table_sentence_symbols,
- table_sentence_symbols,
- table_line_symbols,
- table_line_symbols
- };
-
-static gboolean current_token(const gchar* str, gint offset, gint *token_start, gint *token_end,
- const gboolean table_token_symbols[TABLE_SIZE])
-{
- const gchar *current = str + offset;
- if(!table_token_symbols[(guchar)*current])
- {
- return FALSE;
- }
- for( --current; (current >= str) && table_token_symbols[(guchar)*current]; --current);
- *token_start = current - str + 1;
- for(current = str + offset + 1;
- (*current != 0) && table_token_symbols[(guchar)*current]; ++current);
- *token_end = current - str;
- return TRUE;
-}
-static gboolean next_token(const gchar* str, gint offset, gint *token_start, gint *token_end,
- const gboolean table_token_symbols[TABLE_SIZE])
-{
- const gchar *current = str + offset;
- for( ; (*current != 0) && table_token_symbols[(guchar)*current]; ++current);
- if(*current == 0)
- return FALSE;
- for(++current ; (*current != 0) && !table_token_symbols[(guchar)*current]; ++current);
- if(!table_token_symbols[(guchar)*current])
- return FALSE;
- return current_token(str, current - str, token_start, token_end, table_token_symbols);
-}
-static gboolean previous_token(const gchar* str, gint offset, gint *token_start, gint *token_end,
- const gboolean table_token_symbols[TABLE_SIZE])
-{
- const gchar *current = str + offset;
- for( ; (current > str) && table_token_symbols[(guchar)*current]; --current);
- if(current == str)
- return FALSE;
- for( ; (current > str) && !table_token_symbols[(guchar)*current]; --current);
- if(!table_token_symbols[(guchar)*current])
- return FALSE;
- return current_token(str, current - str, token_start, token_end, table_token_symbols);
-}
-
-
-//Range: type of data, containing in list of attributes
-typedef struct
-{
- gint start,end;//range, containing this attributes
- AtkAttributeSet* attributeSet;
-} Range;
-//auxiliary functions for ranges
-Range* range_new(gint start, gint end)
-{
- Range *range = g_malloc(sizeof(Range));
- range->start = start;
- range->end = end;
- range->attributeSet = NULL;
- return range;
-}
-
-void range_free(Range* range)
-{
- atk_attribute_set_free(range->attributeSet);
- g_free(range);
-}
-void range_print(const Range*range)
-{
- TRACE("[%d,%d):", range->start, range->end);
- attribute_set_print(range->attributeSet);
-}
-//only for correct list of ranges - ranges shouldn't intersect
-gint range_compare(const Range* range1, const Range* range2)
-{
- return range1->start - range2->start;//never equal
-}
-//Bounds of text
-void text_bounds_init(TextBounds *bounds)
-{
- bounds->base_x = 0;
- bounds->base_y = 0;
- bounds->pixels_above_line = 2;
- bounds->pixels_below_line = 3;
- bounds->size = 8;
- bounds->pixels_between_characters = 1;
- bounds->width = 3;
-}
-
-//auxiliary function - create new range according to start_offset and end_offset
-AtkTextRange* text_range_new(AtkText* text,
- gint start_offset, gint end_offset, AtkCoordType coord_type)
-{
- AtkTextRange* range = g_malloc(sizeof(AtkTextRange));
- if(range == NULL) return NULL;
- range->start_offset = start_offset;
- range->end_offset = end_offset;
- range->content = atk_text_get_text(text, start_offset, end_offset);
- atk_text_get_range_extents(text, start_offset, end_offset, coord_type, &range->bounds);
- return range;
-}
-// Returns number of line, which contain given character.
-// Also return relative offset - offset of this character from start of the line
-gint get_character_line(MyAtkText *text, gint offset, gint *relative_offset)
-{
- gint result = 0;
- //simple realization - counts lines from start of the text, until reaches offset
- const guchar *text_str = (guchar*)text->str;
- gboolean state_FSM = table_line_symbols[text_str[0]];
- gint i, last_line_start = 0;
- for(i = 1; i <= offset; state_FSM = table_line_symbols[text_str[i++]])
- {
- if(state_FSM)continue;
- result++;
- last_line_start = i;
- }
- if(relative_offset != NULL) *relative_offset = offset - last_line_start;
- return result;
-}
-// Compute extent of character,
-// as it was at line 'line' and at offset 'relative_offset' in that line
-//(geometry)
-void get_extents(MyAtkText *text, gint line, gint relative_offset, AtkTextRectangle *rect)
-{
- rect->x = text->bounds.base_x + relative_offset *
- (text->bounds.width + text->bounds.pixels_between_characters);
- rect->y = text->bounds.base_y + text->bounds.pixels_above_line + line *
- (text->bounds.size + text->bounds.pixels_below_line + text->bounds.pixels_above_line);
- rect->width = text->bounds.width;
- rect->height = text->bounds.size;
-}
-//return line, corresponding to given y-coordinate
-gint get_point_line(MyAtkText *text, gint y)
-{
- //slightly differ from invers operation
- if(y - text->bounds.base_y < 0)return -1;
- return (y - text->bounds.base_y)
- /(text->bounds.size + text->bounds.pixels_below_line + text->bounds.pixels_above_line);
-}
-// Returns offset from left boundary of text, correspondind to x-coordinate
-gint get_point_relative_offset(MyAtkText *text, gint x)
-{
- //slightly differ from invers operation
- if(x - text->bounds.base_x < 0)return -1;
- return (x - text->bounds.base_x)
- /(text->bounds.width + text->bounds.pixels_between_characters);
-}
-// Returns offset where given line start(even if this line is empty)
-// If line number too small(<0)return -1, if too big - return length of the text
-gint get_offset_at_line_start(MyAtkText *text, gint line)
-{
- gint i;
- if(line < 0)return -1;
- if(line == 0)return 0;
- gint len = my_strlen(text->str);
- guchar *str = (guchar*)text->str;
- gint current_line = 0;
- gboolean state_FSM = table_line_symbols[str[0]];
- for(i = 1; i < len; state_FSM = table_line_symbols[str[i++]])
- {
- if(state_FSM || ++current_line != line)continue;
- return i;
- }
- return len;
-
-}
-// Return offset of character at the given line and at the given offset at this line
-// If such character doesn't exist, return -1
-gint get_offset_at_line(MyAtkText *text, gint line, gint relative_offset)
-{
- gint j;
- if(line < 0 || relative_offset < 0)return -1;
- const guchar* str = (guchar*)text->str;
- gint len = my_strlen(text->str);
- gint offset_at_line_start = get_offset_at_line_start(text, line);
- if(offset_at_line_start + relative_offset >= len)return -1;
- for(j = 0; j <= relative_offset; j++)
- if(!table_line_symbols[str[offset_at_line_start + j]])
- return -1;
- return offset_at_line_start + relative_offset;
-}
-/*
- * Count ranges of text, which clipping by rel_start_offset and relative_end_offset.
- * 'offset' stands start of search(start of first line),
- * number_of_lines - maximum number of lines for search.
- * If 'ranges' not NULL, writes ranges to it. 'coord_type' used only in this case.
- */
-gint count_ranges(MyAtkText *text, gint offset, gint rel_start_offset, gint rel_end_offset,
- gint number_of_lines, AtkTextRange** ranges, AtkCoordType coord_type)
-{
- guchar *str = (guchar*)text->str;
- gint len = my_strlen(text->str);
-
- gint number_of_ranges = 0;
- gint current_line = 0;
- gint current_line_start = offset;
- for(;(current_line < number_of_lines) && (current_line_start < len); current_line ++)
- {
- if(!table_line_symbols[str[current_line_start]])
- {
- current_line_start++;
- continue;
- }
- gint start_offset,end_offset;
- gchar *tmp_str = atk_text_get_text_at_offset((AtkText*)text, current_line_start,
- ATK_TEXT_BOUNDARY_LINE_END, &start_offset, &end_offset);
- g_free(tmp_str);
- if(end_offset - current_line_start > rel_start_offset)
- {
- if(ranges != NULL)
- {
- gint range_start_offset = current_line_start + rel_start_offset;
- gint range_end_offset = current_line_start + rel_end_offset + 1;
- if(range_end_offset > end_offset)
- range_end_offset = end_offset;
- //add element
- ranges[number_of_ranges] = text_range_new((AtkText*)text,
- range_start_offset, range_end_offset, coord_type);
- }
- number_of_ranges++;
- }
- current_line_start = end_offset + 1;
- }
- if(ranges != NULL) ranges[number_of_ranges] = NULL;
- return number_of_ranges;
-}
-
-//"free"-functions(for internal using, because them don't emit signals)
-void my_atk_text_free_run_attributes(MyAtkText *text)
-{
- g_list_foreach(text->attributes, (GFunc)range_free, NULL);
- g_list_free(text->attributes);
- text->attributes = NULL;
-}
-void my_atk_text_free_default_attributes(MyAtkText *text)
-{
- atk_attribute_set_free(text->default_attributes);
- text->default_attributes = NULL;
-}
-void my_atk_text_clear_selections(MyAtkText *text)
-{
- if(text->selections->len != 0)
- g_array_remove_range(text->selections, 0, text->selections->len);
-}
-void table_symbols_init()
-{
- //word
- gint i;
- for(i = TABLE_SIZE - 1;i > 0 ; --i)
- table_word_symbols[i] = g_ascii_isalnum(i);
- table_word_symbols['\0'] = FALSE;
- //sentence
- for(i = TABLE_SIZE - 1;i >= 0x20; --i)
- table_sentence_symbols[i] = TRUE;
- table_sentence_symbols['.'] = FALSE;
- table_sentence_symbols['!'] = FALSE;
- table_sentence_symbols['?'] = FALSE;
- for(i = 0x1f;i > 0; --i)
- table_sentence_symbols[i] = FALSE;
- table_sentence_symbols['\0'] = FALSE;
- //line
- for(i = TABLE_SIZE - 1;i > 0 ; --i)
- table_line_symbols[i] = TRUE;
- table_line_symbols['\n'] = FALSE;
- table_line_symbols['\0'] = FALSE;
-}
-void correct_selections_after_insert(MyAtkText *text, gint position, gint length)
-{
- gint i;
- GArray* selections = text->selections;
- for(i = selections->len - 1; i >=0; i--)
- {
- TextSelection* sel = &g_array_index(selections, TextSelection, i);
- if(sel->end_offset >= position) sel->end_offset+= length;
- if(sel->start_offset >= position) sel->start_offset+= length;
- else break;
- }
-}
-void correct_selections_after_delete(MyAtkText *text, gint position, gint length)
-{
- gint i;
- GArray* selections = text->selections;
- for(i = selections->len - 1; i >=0; i--)
- {
- TextSelection* sel = &g_array_index(selections, TextSelection, i);
- if(sel->start_offset >= position)
- {
- if(sel->start_offset >= position + length)
- {
- sel->start_offset-= length;
- sel->end_offset-= length;
- }
- //position <= sel->start_offset < position + length
- else if(sel->end_offset > position + length)
- {
- sel->start_offset = position;
- sel->end_offset -= length;
- }
- else
- {
- g_array_remove_index(selections, i);
- }
- continue;
- }
- /*sel->start_offset < position*/
- if(sel->end_offset > position + length) sel->end_offset-= length;
- else if(sel->end_offset > position) sel->end_offset = position;
- break;
- }
-}
-void correct_attributes_after_insert(MyAtkText* text, gint position, gint length)
-{
- GList *attributes = text->attributes;
- GList *tmp;
- //before inserted position
- for(tmp = attributes; tmp != NULL; tmp = tmp -> next)
- {
- Range* range = (Range*)tmp->data;
- if(range->end <= position)continue;
- //range->end > position
- if(range->start < position)
- range->start -= length;//will be restore in the next loop
- break;
- }
- //after inserted position
- for(; tmp != NULL; tmp = tmp -> next)
- {
- Range* range = (Range*)tmp->data;
- range->end += length;
- range->start += length;
- }
-}
-void correct_attributes_after_delete(MyAtkText* text, gint position, gint length)
-{
- GList *attributes = text->attributes;
- GList *tmp = attributes;
- //before deleting range
- for(tmp = attributes; tmp != NULL; tmp = tmp->next)
- {
- Range* range = (Range*)tmp->data;
- if(range->end <= position) continue;
- if(range->start < position)
- {
- if(range->end > position + length) range->end -= length;
- else range->end = position;
- tmp = tmp->next;
- }
- break;
- }
- //at deleting range
- while(tmp != NULL)
- {
- Range* range = (Range*)tmp->data;
- if(range->start >= position + length) break;
- if(range->end <= position + length)
- {
- GList *tmp1 = tmp->next;
- range_free(range);
- attributes = g_list_remove_link(attributes, tmp);
- tmp = tmp1;
- continue;
- }
- //range->end > position + length
- //range->start < position + length
- range->start = position + length;//will be restored in next loop
- break;
- }
- //after deleting range
- for(;tmp != NULL; tmp = tmp->next)
- {
- Range* range = (Range*)tmp->data;
- range->end -= length;
- range->start -= length;
- }
- text->attributes = attributes;
-}
-void correct_caret_after_insert(MyAtkText* text, gint position, gint length)
-{
- if(text->caret_offset > position)text->caret_offset += length;
-}
-void correct_caret_after_delete(MyAtkText* text, gint position, gint length)
-{
- if(text->caret_offset >= position + length)text->caret_offset -= length;
- else if(text->caret_offset > position) text->caret_offset = position;
-}
-
-// Implementation of virtual functions
-//******************************my_atk_text_get_character_count*************************
-static gint my_atk_text_get_character_count(AtkText *text)
-{
- MyAtkText *self = (MyAtkText*)text;
- return my_strlen(self->str);
-}
-//**************************************my_atk_text_get_text*****************************
-static gchar* my_atk_text_get_text(AtkText *text, gint start_offset, gint end_offset)
-{
- gchar *str = ((MyAtkText*)text)->str;
- if((start_offset < 0) || (end_offset > my_strlen(str)) || (end_offset <= start_offset))
- {
- //incorrect bounds
- return NULL;
- }
- return g_strndup(str + start_offset, end_offset - start_offset);
-
-}
-//*******************************my_atk_text_get_character_at_offset************************
-static gunichar my_atk_text_get_character_at_offset(AtkText *text, gint offset)
-{
- gchar *str = ((MyAtkText*)text)->str;
- if(offset < 0 || offset >= my_strlen(str))
- {
- return 0;
- }
- return (gunichar)str[offset];
-}
-// In the next 3 functions some code is commented for verify tests themselves on 'mutants'
-// in realization.
-//******************************my_atk_text_get_text_after_offset***************************
-static gchar* my_atk_text_get_text_after_offset(AtkText *text, gint offset,
- AtkTextBoundary boundary_type, gint *start_offset, gint *end_offset)
-{
- gchar *str = ((MyAtkText*)text)->str;
- gint len = my_strlen(str);
- if((offset < 0) || (offset >= len))
- {
- return NULL;//incorrect offset
- }
-
- // This variable is set in switch statement. If after that statement variable is TRUE,
- // then return text from 'strat_offset' to 'end_offset'. Otherwise NULL will be returned.
- gboolean is_successed = TRUE;
-
- gint start_tmp;
- gint end_tmp;
-
- switch(boundary_type)
- {
- case ATK_TEXT_BOUNDARY_CHAR:
- if(offset + 1 == len)
- {
- is_successed = FALSE;
- break;
- }
- *start_offset = offset + 1;
- *end_offset = offset + 2;
- is_successed = TRUE;
- break;
- case ATK_TEXT_BOUNDARY_WORD_START:
- case ATK_TEXT_BOUNDARY_SENTENCE_START:
- case ATK_TEXT_BOUNDARY_LINE_START:
- if(!next_token(str, offset, start_offset, &end_tmp, tables[boundary_type]))
- {
- //debug
-// if(current_token(str, offset, start_offset, end_offset, tables[boundary_type]))
-// {
-// is_successed = TRUE;
-// break;
-// }
- is_successed = FALSE;
- break;
- }
- if(!next_token(str, end_tmp, end_offset, &end_tmp, tables[boundary_type]))
- {
- *end_offset = len;
- }
- is_successed = TRUE;
- //debug
-// (*start_offset)++;
-// if(*start_offset > 10) ++(*start_offset);
- break;
- case ATK_TEXT_BOUNDARY_WORD_END:
- case ATK_TEXT_BOUNDARY_SENTENCE_END:
- case ATK_TEXT_BOUNDARY_LINE_END:
- if(!current_token(str, offset, &start_tmp, start_offset, tables[boundary_type]))
- {
- if(!next_token(str, offset, &start_tmp, start_offset, tables[boundary_type]))
- {
- is_successed = FALSE;
- break;
- }
- }
- //debug
-// else if(*start_offset > strlen(str) - 7)
-// {
-// *end_offset = *start_offset + 3;
-// is_successed = TRUE;
-// break;
-// }
- if(!next_token(str, *start_offset, &start_tmp, end_offset, tables[boundary_type]))
- {
- is_successed = FALSE;
- break;
- }
- //debug
-// --(*start_offset);
- is_successed = TRUE;
-
- break;
- default:
- is_successed = FALSE;
- }
-
- if(is_successed)
- {
- return my_atk_text_get_text(text, *start_offset, *end_offset);
- }
- else
- {
- return NULL;
- }
-}
-//*******************************my_atk_text_get_text_at_offset*******************************
-static gchar* my_atk_text_get_text_at_offset(AtkText *text, gint offset,
- AtkTextBoundary boundary_type, gint *start_offset, gint *end_offset)
-{
- gchar *str = ((MyAtkText*)text)->str;
- gint len = my_strlen(str);
- if((offset < 0) || (offset >= len))
- {
- return NULL;
- }
-
- // This variable is set in switch statement. If after that statement variable is TRUE,
- // then return text from 'strat_offset' to 'end_offset'. Otherwise NULL will be returned.
- gboolean is_successed = TRUE;
-
- gint start_tmp;
- gint end_tmp;
-
- switch(boundary_type)
- {
- case ATK_TEXT_BOUNDARY_CHAR:
- *start_offset = offset;
- *end_offset = offset + 1;
- is_successed = TRUE;
- break;
- case ATK_TEXT_BOUNDARY_WORD_START:
- case ATK_TEXT_BOUNDARY_SENTENCE_START:
- case ATK_TEXT_BOUNDARY_LINE_START:
- if(!current_token(str, offset, start_offset, &end_tmp, tables[boundary_type]))
- {
- if(!previous_token(str, offset, start_offset, &end_tmp, tables[boundary_type]))
- {
- is_successed = FALSE;
- break;
- }
- }
- if(!next_token(str, offset, end_offset, &end_tmp, tables[boundary_type]))
- {
- *end_offset = len;
- }
- is_successed = TRUE;
- break;
- case ATK_TEXT_BOUNDARY_WORD_END:
- case ATK_TEXT_BOUNDARY_SENTENCE_END:
- case ATK_TEXT_BOUNDARY_LINE_END:
- if(!current_token(str, offset, &start_tmp, end_offset, tables[boundary_type]))
- {
- if(!next_token(str, offset, &start_tmp, end_offset, tables[boundary_type]))
- {
- is_successed = FALSE;
- break;
- }
- }
- if(!previous_token(str, start_tmp, &start_tmp, start_offset, tables[boundary_type]))
- {
- *start_offset = 0;
- }
- is_successed = TRUE;
- //debug
-// ++(*start_offset);
- break;
- default:
- is_successed = FALSE;
- }
-
- if(is_successed)
- {
- //debug
-// if(boundary_type == ATK_TEXT_BOUNDARY_LINE_START)
-// return my_atk_text_get_text(text, ++(*start_offset), *end_offset);
- return my_atk_text_get_text(text, *start_offset, *end_offset);
- }
- else
- {
- return NULL;
- }
-}
-//***********************************my_atk_text_get_text_before_offset******************
-static gchar* my_atk_text_get_text_before_offset(AtkText *text, gint offset,
- AtkTextBoundary boundary_type, gint *start_offset, gint *end_offset)
-{
- gchar *str = ((MyAtkText*)text)->str;
- gint len = my_strlen(str);
- if((offset < 0) || (offset >= len))
- {
- return NULL;
- }
-
- // This variable is set in switch statement. If after that statement variable is TRUE,
- // then return text from 'strat_offset' to 'end_offset'. Otherwise NULL will be returned.
- gboolean is_successed = TRUE;
-
- gint start_tmp;
- gint end_tmp;
-
- switch(boundary_type)
- {
- case ATK_TEXT_BOUNDARY_CHAR:
- if(offset == 0)
- {
- is_successed = FALSE;
- break;
- }
- *start_offset = offset - 1;
- *end_offset = offset;
- is_successed = TRUE;
- break;
- case ATK_TEXT_BOUNDARY_WORD_START:
- case ATK_TEXT_BOUNDARY_SENTENCE_START:
- case ATK_TEXT_BOUNDARY_LINE_START:
- if(!current_token(str, offset, end_offset, &end_tmp, tables[boundary_type]))
- {
- if(!previous_token(str, offset, end_offset, &end_tmp, tables[boundary_type]))
- {
- is_successed = FALSE;
- break;
- }
- }
- if(!previous_token(str, *end_offset, start_offset, &end_tmp, tables[boundary_type]))
- {
- is_successed = FALSE;
- break;
- }
- is_successed = TRUE;
- //debug
-// ++(*start_offset);
- break;
- case ATK_TEXT_BOUNDARY_WORD_END:
- case ATK_TEXT_BOUNDARY_SENTENCE_END:
- case ATK_TEXT_BOUNDARY_LINE_END:
- if(!previous_token(str, offset, &start_tmp, end_offset, tables[boundary_type]))
- {
- is_successed = FALSE;
- break;
- }
- if(!previous_token(str, start_tmp, &start_tmp, start_offset, tables[boundary_type]))
- {
- *start_offset = 0;
- }
- is_successed = TRUE;
- break;
- default:
- is_successed = FALSE;
- }
-
- if(is_successed)
- {
- return my_atk_text_get_text(text, *start_offset, *end_offset);
- }
- else
- {
- return NULL;
- }
-}
-//*********************************my_atk_text_get_run_attributes*****************
-AtkAttributeSet* my_atk_text_get_run_attributes(AtkText* text, gint offset,
- gint *start_offset, gint *end_offset)
-{
- GList *tmp;
- GList *attributes = ((MyAtkText*)text)->attributes;
- if(offset < 0 || offset >= my_atk_text_get_character_count(text))
- {
- TRACE0("Incorrect value of offset.");
- return NULL;
- }
- gint start = -1, end = -1;
- for(tmp = attributes; tmp != NULL; tmp = tmp->next)
- {
- Range* range = (Range*)(tmp->data);
- if(range->end <= offset)
- {
- start = range->end;
- continue;
- }
- if(range->start > offset)
- {
- end = range->start;
- break;
- }
-
- *start_offset = range->start;
- *end_offset = range->end;
- return attribute_set_copy(range->attributeSet);
- }
- *start_offset = (start == -1) ? 0 : start;
- *end_offset = (end == -1) ? my_atk_text_get_character_count(text) : end;
- return NULL;
-}
-//*********************************my_atk_text_get_default_attributes*****************
-AtkAttributeSet* my_atk_text_get_default_attributes(AtkText* text)
-{
- return attribute_set_copy(((MyAtkText*)text)->default_attributes);
-}
-//*********************************my_atk_text_get_character_extents*****************
-void my_atk_text_get_character_extents(AtkText* text, gint offset, gint *x, gint *y,
- gint *width, gint *height, AtkCoordType coord_type)
-{
- AtkTextRectangle result;
- gint relative_offset, line;
- line = get_character_line((MyAtkText*)text, offset, &relative_offset);
- get_extents((MyAtkText*)text, line, relative_offset, &result);
- *x = result.x;
- *y = result.y;
- *width = result.width;
- *height = result.height;
-}
-//*******************************my_atk_text_get_range_extents************************
-void my_atk_text_get_range_extents(AtkText *text, gint start_offset, gint end_offset,
- AtkCoordType coord_type, AtkTextRectangle *rect)
-{
- //simple - union of extents of the characters, contained in this range
- AtkTextRectangle result, bounds_tmp;
- gint i;
-
- atk_text_get_character_extents (text, start_offset,
- &result.x, &result.y,
- &result.width, &result.height,
- coord_type);
-
- for (i = start_offset + 1; i < end_offset; i++)
- {
- my_atk_text_get_character_extents (text, i,&bounds_tmp.x, &bounds_tmp.y,
- &bounds_tmp.width, &bounds_tmp.height, coord_type);
-
- if(bounds_tmp.x < result.x)
- {
- //corrects left boundary
- result.width += result.x - bounds_tmp.x;
- result.x = bounds_tmp.x;
- }
- if(bounds_tmp.x + bounds_tmp.width > result.x + result.width)
- {
- //corrects right boundary
- result.width = bounds_tmp.x + bounds_tmp.width - result.x;
- }
- if(bounds_tmp.y < result.y)
- {
- //corrects top boundary
- result.height += result.y - bounds_tmp.y;
- result.y = bounds_tmp.y;
- }
- if(bounds_tmp.y + bounds_tmp.height > result.y + result.height)
- {
- //corrects buttom boundary
- result.height = bounds_tmp.y + bounds_tmp.height - result.y;
- }
- }
- *rect = result;
-}
-//**********************************my_atk_text_get_offset_at_point*********************
-gint my_atk_text_get_offset_at_point(AtkText* text, gint x, gint y, AtkCoordType coord_type)
-{
- gint line, relative_offset;
-
- line = get_point_line((MyAtkText*)text, y);
- relative_offset = get_point_relative_offset((MyAtkText*)text, x);
-
- return get_offset_at_line((MyAtkText*)text, line, relative_offset);
-}
-//*****************************my_atk_text_get_bounded_ranges******************************
-AtkTextRange** my_atk_text_get_bounded_ranges(AtkText *text, AtkTextRectangle *rect,
- AtkCoordType coord_type, AtkTextClipType x_clip_type, AtkTextClipType y_clip_type)
-{
- MyAtkText *self = (MyAtkText*)text;
-
- gint start_line, end_line, start_rel_offset, end_rel_offset;
- AtkTextRange** result;
- gint len = my_strlen(self->str);
-//macro for simplify return empty ranges when fail to do smth
-#define RETURN_EMTPY_RANGES {result = g_malloc(sizeof(AtkTextRange*));result[0] = NULL;return result;}
- //start line
- start_line = (y_clip_type == ATK_TEXT_CLIP_NONE) || (y_clip_type == ATK_TEXT_CLIP_MAX)
- ? 0 : get_point_line(self, rect->y);
- if(start_line < 0) start_line = 0;
- //end line
- end_line = (y_clip_type == ATK_TEXT_CLIP_NONE) || (y_clip_type == ATK_TEXT_CLIP_MIN)
- ? G_MAXINT/2 : get_point_line(self, rect->y + rect->height);
- if(end_line < 0) RETURN_EMTPY_RANGES;
- //start relative offset
- start_rel_offset = (x_clip_type == ATK_TEXT_CLIP_NONE) || (x_clip_type == ATK_TEXT_CLIP_MAX)
- ? 0 : get_point_relative_offset(self, rect->x);
- if(start_rel_offset < 0) start_rel_offset = 0;
- //end relative offset
- end_rel_offset = (x_clip_type == ATK_TEXT_CLIP_NONE) || (x_clip_type == ATK_TEXT_CLIP_MIN)
- ? G_MAXINT/2 : get_point_relative_offset(self, rect->x + rect->width);
- if(end_rel_offset < 0) RETURN_EMTPY_RANGES;
- //start offset(at the start of 'start_line')
- gint start_offset = get_offset_at_line_start(self, start_line);
- if(start_offset + start_rel_offset >= len) RETURN_EMTPY_RANGES;
-
- //count ranges
- gint number_of_ranges = count_ranges(self, start_offset,
- start_rel_offset, end_rel_offset, end_line - start_line + 1, NULL, coord_type);
- //create array(with just getting size)
- result = g_malloc(sizeof(AtkTextRange*) * (number_of_ranges + 1));
- //write ranges
- count_ranges(self, start_offset,
- start_rel_offset, end_rel_offset, end_line - start_line + 1, result, coord_type);
-#undef RETURN_EMPTY_RANGES
- return result;
-}
-
-//********************************my_atk_text_get_n_selections*******************************
-gint my_atk_text_get_n_selections(AtkText *text)
-{
- MyAtkText *self = (MyAtkText*)text;
- return self->selections->len;
-}
-
-//********************************my_atk_text_get_selection*******************************
-gchar* my_atk_text_get_selection(AtkText *text,
- gint selection_num, gint *start_offset, gint *end_offset)
-{
- MyAtkText *self = (MyAtkText*)text;
- GArray *selections = self->selections;
- if(selection_num < 0 || selection_num >= selections->len) return NULL;
- *start_offset = g_array_index(selections, TextSelection, selection_num).start_offset;
- *end_offset = g_array_index(selections, TextSelection, selection_num).end_offset;
- return my_atk_text_get_text(text, *start_offset, *end_offset);
-}
-//********************************my_atk_text_remove_selection*******************************
-gboolean my_atk_text_remove_selection(AtkText *text, gint selection_num)
-{
- MyAtkText *self = (MyAtkText*)text;
- GArray *selections = self->selections;
- if(selection_num < 0 || selection_num >= selections->len) return FALSE;
- g_array_remove_index(selections, selection_num);
-
- g_signal_emit_by_name(text, "text-selection-changed");
- return TRUE;
-}
-//********************************my_atk_text_add_selection*******************************
-gboolean my_atk_text_add_selection(AtkText *text, gint start_offset, gint end_offset)
-{
- if(start_offset < 0 || end_offset > my_atk_text_get_character_count(text)
- || start_offset >= end_offset) return FALSE;
-
- MyAtkText *self = (MyAtkText*)text;
- GArray *selections = self->selections;
- gint i;
- for(i = 0; i < selections->len; i++)
- {
- if(g_array_index(selections, TextSelection, i).start_offset >= start_offset)
- {
- if(g_array_index(selections, TextSelection, i).start_offset < end_offset)
- return FALSE;
- break;
- }
- }
- TextSelection new_selection;
- new_selection.start_offset = start_offset;
- new_selection.end_offset = end_offset;
- g_array_insert_val(selections, i, new_selection);
-
- g_signal_emit_by_name(text, "text-selection-changed");
- return TRUE;
-}
-//********************************my_atk_text_set_selection*******************************
-gboolean my_atk_text_set_selection(AtkText *text,
- gint selection_num, gint start_offset, gint end_offset)
-{
- MyAtkText *self = (MyAtkText*)text;
- GArray *selections = self->selections;
- if(selection_num < 0 || selection_num >= selections->len) return NULL;
-
- if((selection_num == 0
- || g_array_index(selections, TextSelection, selection_num - 1).end_offset <= start_offset)
- && (selection_num == selections->len - 1
- || g_array_index(selections, TextSelection, selection_num + 1).start_offset >= end_offset)
- )
- {
- //Arrange of selections won't change
- g_array_index(selections, TextSelection, selection_num).start_offset =
- start_offset;
- g_array_index(selections, TextSelection, selection_num).end_offset =
- end_offset;
- g_signal_emit_by_name(text, "text-selection-changed");
- return TRUE;
- }
- gint start_offset_old =
- g_array_index(selections, TextSelection, selection_num).start_offset;
- gint end_offset_old =
- g_array_index(selections, TextSelection, selection_num).end_offset;
-
- my_atk_text_remove_selection(text, selection_num);
- if(!my_atk_text_add_selection(text, start_offset, end_offset))
- {
- //fail when adding selection. Restore initial state.
- my_atk_text_add_selection(text, start_offset_old, end_offset_old);
- return FALSE;
- }
- g_signal_emit_by_name(text, "text-selection-changed");
- return TRUE;
-
-}
-
-//************************************my_atk_text_get_caret_offset******************
-gint my_atk_text_get_caret_offset(AtkText *text)
-{
- MyAtkText *self = (MyAtkText*)text;
- return self->caret_offset;
-}
-//************************************my_atk_text_set_caret_offset******************
-gboolean my_atk_text_set_caret_offset(AtkText *text, gint offset)
-{
- MyAtkText *self = (MyAtkText*)text;
- //caret may be set just after the last character
- if(offset < 0 || offset > my_atk_text_get_character_count(text))return FALSE;
- self->caret_offset = offset;
- g_signal_emit_by_name(self, "text-caret-moved", offset);
- return TRUE;
-}
-
-//***********************my_atk_text_insert_text*******************************
-void my_atk_text_insert_text(AtkEditableText* text, const gchar* string,
- gint length, gint *position)
-{
- gint i;
- MyAtkText* myAtkText = (MyAtkText*)text;
- gchar *str = myAtkText->str;
- gint strlen_old = my_strlen(str);
-
- if(string == NULL) return;
- //correct length
- for(i = 0; i < length; i ++)
- {
- if(string[i] == '\0') {length = i; break;}
- }
-
- if(*position < 0 || *position > strlen_old || length <= 0 )return;
-
-
- gchar *new_str = g_malloc(strlen_old + length + 1);
- if(new_str == NULL)return;
-
- if(*position != 0)
- memcpy(new_str, str, (size_t)*position);
- memcpy(new_str + *position, string, (size_t)length);
- if(strlen_old != *position)
- memcpy(new_str + *position + length, str + *position,
- (size_t)(strlen_old - *position));
- new_str[strlen_old + length] = '\0';
-
- g_free(str);
- myAtkText->str = new_str;
- correct_selections_after_insert(myAtkText, *position, length);
- correct_attributes_after_insert(myAtkText, *position, length);
- correct_caret_after_insert(myAtkText, *position, length);
- g_signal_emit_by_name(text, "text-changed::insert", *position, length);
- g_signal_emit_by_name(text, "text-selection-changed");
- g_signal_emit_by_name(text, "text-attributes-changed");
- g_signal_emit_by_name(text, "text-caret-moved", myAtkText->caret_offset);
-
- (*position) += length;
-}
-//*************************my_atk_text_delete_text*******************
-void my_atk_text_delete_text(AtkEditableText* text, gint start_pos, gint end_pos)
-{
- MyAtkText* myAtkText = (MyAtkText*)text;
- gchar *str = myAtkText->str;
- gint strlen_old = my_strlen(str);
-
- if(start_pos < 0 || end_pos > strlen_old || start_pos >= end_pos )return;
- if(strlen_old != end_pos)
- memmove(str + start_pos, str + end_pos, strlen_old - end_pos);
- str[start_pos - end_pos + strlen_old] = '\0';
-
- correct_selections_after_delete(myAtkText, start_pos, end_pos - start_pos);
- correct_attributes_after_delete(myAtkText, start_pos, end_pos - start_pos);
- correct_caret_after_delete(myAtkText, start_pos, end_pos - start_pos);
- g_signal_emit_by_name(text, "text-changed::delete", start_pos, end_pos - start_pos);
- g_signal_emit_by_name(text, "text-selection-changed");
- g_signal_emit_by_name(text, "text-attributes-changed");
- g_signal_emit_by_name(text, "text-caret-moved", myAtkText->caret_offset);
-}
-//***********************my_atk_text_set_text_contents*************************
-void my_atk_text_set_text_contents(AtkEditableText* text, const gchar* string)
-{
- my_atk_text_delete_text(text, 0, my_atk_text_get_character_count((AtkText*)text));
- gint position = 0;
- my_atk_text_insert_text(text, string, my_strlen(string), &position);
-}
-//**********************my_atk_text_copy_text***************************
-void my_atk_text_copy_text(AtkEditableText* text, gint start_pos, gint end_pos)
-{
- MyAtkText* myAtkText = (MyAtkText*)text;
- const gchar *str = myAtkText->str;
- gint strlen_old = my_strlen(str);
- if(start_pos < 0 || end_pos > strlen_old || start_pos >= end_pos )return;
-
- MyAtkTextClass *parent = MY_ATK_TEXT_GET_CLASS(text);
- g_free(parent->clipboard);
- /*parent->clipboard = g_malloc(end_pos - start_pos + 1);
-
- strncpy(parent->clipboard, str + start_pos, end_pos - start_pos);
- parent->clipboard[end_pos - start_pos] = '\0';*/
- parent->clipboard = g_strndup(str + start_pos, end_pos - start_pos);
-}
-//**********************my_atk_text_paste_text***************************
-void my_atk_text_paste_text(AtkEditableText *text, gint position)
-{
- //NULL-clipboard process corretly
- MyAtkTextClass* parent = MY_ATK_TEXT_GET_CLASS(text);
- my_atk_text_insert_text(text, parent->clipboard, my_strlen(parent->clipboard), &position);
-}
-//**********************my_atk_text_cut_text***************************
-void my_atk_text_cut_text(AtkEditableText* text, gint start_pos, gint end_pos)
-{
- my_atk_text_copy_text(text, start_pos, end_pos);
- my_atk_text_delete_text(text, start_pos, end_pos);
-}
-//*********************my_atk_text_set_run_attributes************************
-gboolean my_atk_text_set_run_attributes(AtkEditableText* text, AtkAttributeSet* attrib_set,
- gint start_offset, gint end_offset)
-{
- MyAtkText* self = (MyAtkText*)text;
- gint len = atk_text_get_character_count((AtkText*)text);
- if(start_offset < 0 || start_offset >= end_offset || end_offset > len)
- return FALSE;
- GList *attributes = self->attributes;
- GList *tmp = attributes;
-
- while(tmp != NULL)
- {
- Range *range = (Range*)tmp->data;
- if(range->start < start_offset)
- {
- if(range->end <= end_offset)
- {
- if(range->end > start_offset) range->end = start_offset;
- tmp = tmp->next;
- continue;
- }
- /*range->end > end_offset*/
- Range* additional_range = range_new(end_offset, range->end);
- additional_range->attributeSet = attribute_set_copy(range->attributeSet);
- range->end = start_offset;
- attributes = g_list_insert_before(attributes, tmp->next, additional_range);
- tmp = tmp->next;
- break;
- }
- else/*range->start >= start_offset*/
- {
- if(range->end <= end_offset)
- {
- GList *tmp1 = tmp->next;
- attributes = g_list_remove_link(attributes, tmp);
- tmp = tmp1;
- continue;
- }
- /*range->end > end_offset*/
- if(range->start < end_offset) range->start = end_offset;
- break;
- }
- }
- Range *new_range = range_new(start_offset, end_offset);
- new_range->attributeSet = attribute_set_copy(attrib_set);
- if(tmp == NULL)attributes = g_list_append(attributes, new_range);
- else attributes = g_list_insert_before(attributes, tmp, new_range);
-
- self->attributes = attributes;
- g_signal_emit_by_name(self, "text_attributes_changed");
- return TRUE;
-}
-
-//others functions
-//sets default attributes
-void my_atk_text_set_default_attributes(MyAtkText* text, AtkAttributeSet *set)
-{
- atk_attribute_set_free(text->default_attributes);
- text->default_attributes = attribute_set_copy(set);
- g_signal_emit_by_name(text, "text-attributes-changed");
-}
-
-void my_atk_text_print_run_attributes(MyAtkText *text)
-{
- g_list_foreach(text->attributes, (GFunc)range_print, NULL);
-}
-void my_atk_text_print_default_attributes(MyAtkText *text)
-{
- attribute_set_print(text->default_attributes);
-}
-//need for separate testing interfaces
-void auxiliary_atk_text_set_text_contents(MyAtkText* text, const gchar* string)
-{
- my_atk_text_set_text_contents((AtkEditableText*)text, string);
-}
-void auxiliary_atk_text_set_run_attributes(MyAtkText* text, AtkAttributeSet* attrib_set,
- gint start_offset, gint end_offset)
-{
- my_atk_text_set_run_attributes((AtkEditableText*)text, attrib_set, start_offset, end_offset);
-}
-
-//initialize/finalize functions
-static void my_atk_text_instance_init(GTypeInstance *obj, gpointer g_class)
-{
- MyAtkText *self = (MyAtkText*)obj;
-
- self->str = NULL;
- self->attributes = NULL;
- self->default_attributes = NULL;
- text_bounds_init(&self->bounds);
-
- self->selections = g_array_new(FALSE, FALSE, sizeof(TextSelection));
-
- self->caret_offset = 0;
-}
-static void my_atk_text_instance_finalize(GObject* obj)
-{
- MyAtkText *self = (MyAtkText*)obj;
- g_free(self->str);
- my_atk_text_free_run_attributes(self);
- my_atk_text_free_default_attributes(self);
- if(self->selections != NULL)g_array_free(self->selections, FALSE);
-}
-
-static void my_atk_text_class_init(gpointer g_class, gpointer class_data)
-{
- GObjectClass* g_object_class = (GObjectClass*)g_class;
- //GObject virtual table
- g_object_class->finalize = my_atk_text_instance_finalize;
- //Fills tables of symbols
- table_symbols_init();
- //initialize clipboard
- ((MyAtkTextClass*)g_class)->clipboard = NULL;
-}
-//Because of static registration of type, finalization function will never been called
-//And glib prints warning if use it in registration.
-/*static void my_atk_text_class_finalize(gpointer g_class, gpointer class_data)
-{
- MyAtkTextClass *self = (MyAtkTextClass*)g_class;
-
- g_free(self->clipboard);
- self->clipboard = NULL;
-}*/
-void my_atk_text_interface_init(gpointer g_iface, gpointer iface_data)
-{
- AtkTextIface *klass = (AtkTextIface*)g_iface;
- //"get_text"
- klass->get_character_count = my_atk_text_get_character_count;
- klass->get_text = my_atk_text_get_text;
- klass->get_character_at_offset = my_atk_text_get_character_at_offset;
- klass->get_text_after_offset = my_atk_text_get_text_after_offset;
- klass->get_text_at_offset = my_atk_text_get_text_at_offset;
- klass->get_text_before_offset = my_atk_text_get_text_before_offset;
- //"attributes"
- klass->get_run_attributes = my_atk_text_get_run_attributes;
- klass->get_default_attributes = my_atk_text_get_default_attributes;
- //"bounds"
- klass->get_character_extents = my_atk_text_get_character_extents;
- klass->get_range_extents = my_atk_text_get_range_extents;
- klass->get_offset_at_point = my_atk_text_get_offset_at_point;
- klass->get_bounded_ranges = my_atk_text_get_bounded_ranges;
- //"selection"
- klass->get_n_selections = my_atk_text_get_n_selections;
- klass->get_selection = my_atk_text_get_selection;
- klass->remove_selection = my_atk_text_remove_selection;
- klass->add_selection = my_atk_text_add_selection;
- klass->set_selection = my_atk_text_set_selection;
- //"caret"
- klass->get_caret_offset = my_atk_text_get_caret_offset;
- klass->set_caret_offset = my_atk_text_set_caret_offset;
-}
-
-static void my_atk_editable_text_interface_init(gpointer g_iface, gpointer iface_data)
-{
- AtkEditableTextIface *klass = (AtkEditableTextIface*)g_iface;
-
- klass->set_text_contents = my_atk_text_set_text_contents;
- klass->set_run_attributes = my_atk_text_set_run_attributes;
- klass->copy_text = my_atk_text_copy_text;
- klass->insert_text = my_atk_text_insert_text;
- klass->paste_text = my_atk_text_paste_text;
- klass->cut_text = my_atk_text_cut_text;
- klass->delete_text = my_atk_text_delete_text;
-}
-GType my_atk_text_get_type()
-{
- static GType type = 0;
- if(type == 0)
- {
- static const GTypeInfo typeInfo =
- {
- sizeof(MyAtkTextClass),
- NULL, //base_init
- NULL, //base_finalize
- my_atk_text_class_init, //class_init
- NULL, //class_finalize
- NULL, //class_data
- sizeof(MyAtkText),
- 0, //n_preallocs
- my_atk_text_instance_init //instance_init
- };
-
- static const GInterfaceInfo AtkTextIface_info =
- {
- my_atk_text_interface_init, /* interface_init*/
- NULL, /* interface_finalize*/
- NULL /* interface_data */
- };
- static const GInterfaceInfo AtkEditableTextIface_info =
- {
- my_atk_editable_text_interface_init,/* interface_init*/
- NULL, /* interface_finalize*/
- NULL /* interface_data */
- };
- type = g_type_register_static(MY_TYPE_ATK_OBJECT, "MyAtkText", &typeInfo, 0);
- g_type_add_interface_static(type,
- ATK_TYPE_TEXT,
- &AtkTextIface_info);
-
- g_type_add_interface_static(type,
- ATK_TYPE_EDITABLE_TEXT,
- &AtkEditableTextIface_info);
- }
- return type;
-}
diff --git a/tests/dummyatk/my-atk-text.h b/tests/dummyatk/my-atk-text.h
deleted file mode 100644
index 7a6a73e..0000000
--- a/tests/dummyatk/my-atk-text.h
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef MY_ATK_TEXT_H
-#define MY_ATK_TEXT_H
-/*
- * MyAtkText: implements AtkText and AtkEditableText
- */
-#include <atk/atk.h>
-
-#include "my-atk-object.h"
-
-#define MY_TYPE_ATK_TEXT (my_atk_text_get_type ())
-#define MY_ATK_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_TEXT, MyAtkText))
-#define MY_ATK_TEXT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_TEXT, MyAtkTextClass))
-#define MY_IS_ATK_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_TEXT))
-#define MY_IS_ATK_TEXT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_TEXT))
-#define MY_ATK_TEXT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_TEXT, MyAtkTextClass))
-
-typedef struct _MyAtkText MyAtkText;
-typedef struct _MyAtkTextClass MyAtkTextClass;
-
-//Struct, describing bounds of one selection.
-typedef struct
-{
- gint start_offset, end_offset;
-}TextSelection;
-//Struct, describing values, needed for determine extent of characters
-typedef struct
-{
- gint base_x, base_y;//coordinates of the top-left corner of text
- gint pixels_above_line;
- gint pixels_below_line;
- gint size;//size of the character(height in pixels)
- gint pixels_between_characters;//monoscaped font
- gint width;//width of character
-}TextBounds;
-
-struct _MyAtkText
-{
- MyAtkObject parent;
-
- gchar* str;//string, containing text
- GList* attributes;//running atributes
- AtkAttributeSet *default_attributes;//default attributes
-
- TextBounds bounds;
-
- GArray* selections;
-
- gint caret_offset;
-};
-
-struct _MyAtkTextClass
-{
- MyAtkObjectClass parent;
- gchar* clipboard;
-};
-
-GType my_atk_text_get_type();
-
-void my_atk_text_interface_init(gpointer g_iface, gpointer iface_data);
-#endif /*MY_ATK_TEXT_H*/
diff --git a/tests/dummyatk/my-atk-value.c b/tests/dummyatk/my-atk-value.c
deleted file mode 100644
index 3530d4f..0000000
--- a/tests/dummyatk/my-atk-value.c
+++ /dev/null
@@ -1,113 +0,0 @@
-#include <atk/atk.h>
-#include <limits.h>
-
-#include "my-atk-object.h"
-#include "my-atk-value.h"
-
-//*************************implementation***********************
-//implementation of virtual functions
-//******************get_current_value*******************
-static void my_atk_value_get_current_value(AtkValue *obj, GValue *value)
-{
- g_return_if_fail(MY_IS_ATK_VALUE(obj));
- MyAtkValue* self = (MyAtkValue*)obj;
-
- g_value_init(value, G_TYPE_INT);
- g_value_set_int(value, self->current);
-}
-//******************get_maximum_value*******************
-static void my_atk_value_get_maximum_value(AtkValue *obj, GValue *value)
-{
- g_return_if_fail(MY_IS_ATK_VALUE(obj));
- MyAtkValue* self = (MyAtkValue*)obj;
-
- g_value_init(value, G_TYPE_INT);
- g_value_set_int(value, self->maximum);
-}
-//******************get_minimum_value*******************
-static void my_atk_value_get_minimum_value(AtkValue *obj, GValue *value)
-{
- g_return_if_fail(MY_IS_ATK_VALUE(obj));
- MyAtkValue* self = (MyAtkValue*)obj;
-
- g_value_init(value, G_TYPE_INT);
- g_value_set_int(value, self->minimum);
-}
-//******************set_current_value*******************
-static gboolean my_atk_value_set_current_value(AtkValue *obj, const GValue *value)
-{
- g_return_val_if_fail(MY_IS_ATK_VALUE(obj), FALSE);
- MyAtkValue* self = (MyAtkValue*)obj;
-
- if(self->readonly) return FALSE;
-
- gint new_value = g_value_get_int(value);
- if(new_value < self->minimum || new_value > self->maximum) return FALSE;
-
- self->current = new_value;
- return TRUE;
-}
-
-//others
-MyAtkValue* my_atk_value_new(gint minimum, gint maximum, gint current)
-{
- MyAtkValue* result = g_object_new(MY_TYPE_ATK_VALUE, NULL);
- if(result == NULL) return NULL;
- result->minimum = minimum;
- result->maximum = maximum;
- result->current = current;
-
- return result;
-}
-static void my_atk_value_instance_init(GTypeInstance *obj, gpointer g_class)
-{
- MyAtkValue *self = (MyAtkValue*)obj;
-
- self->minimum = 0;
- self->maximum = 0;
- self->current = 0;
-
- self->readonly = FALSE;
-}
-static void my_atk_value_interface_init(gpointer g_iface, gpointer iface_data)
-{
- AtkValueIface *klass = (AtkValueIface*)g_iface;
-
- klass->get_current_value = my_atk_value_get_current_value;
- klass->get_minimum_value = my_atk_value_get_minimum_value;
- klass->get_maximum_value = my_atk_value_get_maximum_value;
-
- klass->set_current_value = my_atk_value_set_current_value;
-}
-
-GType my_atk_value_get_type()
-{
- static GType type = 0;
- if(type == 0)
- {
- static const GTypeInfo typeInfo =
- {
- sizeof(MyAtkValueClass),
- NULL, //base_init
- NULL, //base_finalize
- NULL, //class_init
- NULL, //class_finalize
- NULL, //class_data
- sizeof(MyAtkValue),
- 0, //n_preallocs
- my_atk_value_instance_init //instance_init
- };
-
- static const GInterfaceInfo iface_info =
- {
- my_atk_value_interface_init, /* interface_init*/
- NULL, /* interface_finalize*/
- NULL /* interface_data */
- };
- type = g_type_register_static(MY_TYPE_ATK_OBJECT, "MyAtkValue", &typeInfo, 0);
- g_type_add_interface_static(type,
- ATK_TYPE_VALUE,
- &iface_info);
- }
- return type;
-}
diff --git a/tests/dummyatk/my-atk-value.h b/tests/dummyatk/my-atk-value.h
deleted file mode 100644
index 03ed6d1..0000000
--- a/tests/dummyatk/my-atk-value.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef MY_ATK_VALUE_H
-#define MY_ATK_VALUE_H
-/*
- * MyAtkValue: derives AtkObject
- * and implements AtkValue
- */
-#include <atk/atk.h>
-
-#define MY_TYPE_ATK_VALUE (my_atk_value_get_type ())
-#define MY_ATK_VALUE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_VALUE, MyAtkValue))
-#define MY_ATK_VALUE_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_VALUE, MyAtkValueClass))
-#define MY_IS_ATK_VALUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_VALUE))
-#define MY_IS_ATK_VALUE_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_VALUE))
-#define MY_ATK_VALUE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_VALUE, MyAtkValueClass))
-
-typedef struct _MyAtkValue MyAtkValue;
-typedef struct _MyAtkValueClass MyAtkValueClass;
-
-struct _MyAtkValue
-{
- MyAtkObject parent;
-
- gint minimum, maximum, current;
- gboolean readonly;
-};
-
-struct _MyAtkValueClass
-{
- MyAtkObjectClass parent;
-};
-
-MyAtkValue* my_atk_value_new(gint minimum, gint maximium, gint current);
-GType my_atk_value_get_type();
-#endif /*MY_ATK_VALUE_H*/
diff --git a/tests/dummyatk/my-atk.h b/tests/dummyatk/my-atk.h
deleted file mode 100644
index 935d3d8..0000000
--- a/tests/dummyatk/my-atk.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef MY_ATK_H
-#define MY_ATK_H
-
-#include <my-atk-action.h>
-#include <my-atk-component.h>
-#include <my-atk.h>
-#include <my-atk-hyperlink.h>
-#include <my-atk-hypertext.h>
-#include <my-atk-object.h>
-#include <my-atk-streamable-content.h>
-#include <my-atk-text.h>
-#include <my-atk-value.h>
-
-#endif /*MY_ATK_H*/
diff --git a/tests/dummyatk/resources_storage.c b/tests/dummyatk/resources_storage.c
deleted file mode 100644
index e86051d..0000000
--- a/tests/dummyatk/resources_storage.c
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <atk/atk.h>
-
-GHashTable* resources = NULL;
-
-void resource_storage_init()
-{
- if(resources == NULL)
- resources = g_hash_table_new_full(g_str_hash, g_str_equal,
- (GDestroyNotify)g_free, (GDestroyNotify)g_object_unref);
-}
-
-void resource_storage_free()
-{
- if(resources == NULL) return;
- g_hash_table_destroy(resources);
- resources = NULL;
-}
-
-void resource_storage_add(const gchar* name, AtkObject* resource)
-{
- if(resources == NULL) return;
- g_hash_table_insert(resources, g_strdup(name), g_object_ref(resource));
-}
-
-AtkObject* resource_storage_get(const gchar* name)
-{
- if(resources == NULL) return NULL;
- return g_hash_table_lookup(resources, name);
-}
-void resources_storage_remove(const gchar* name)
-{
- if(resources == NULL) return;
- g_hash_table_remove(resources, name);
-}
diff --git a/tests/dummyatk/resources_storage.h b/tests/dummyatk/resources_storage.h
deleted file mode 100644
index 3decd86..0000000
--- a/tests/dummyatk/resources_storage.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef RESOURCES_STORAGE_H
-#define RESOURCES_STORAGE_H
-
-#include <glib.h>
-
-void resource_storage_init();
-
-void resource_storage_free();
-
-void resource_storage_add(const gchar* name, AtkObject* resource);
-
-AtkObject* resource_storage_get(const gchar* name);
-
-void resources_storage_remove(const gchar* name);
-
-#endif /*RESOURCES_STORAGE_H*/
diff --git a/tests/dummyatk/useful_functions.c b/tests/dummyatk/useful_functions.c
deleted file mode 100644
index 49b6a82..0000000
--- a/tests/dummyatk/useful_functions.c
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <string.h>
-#include <glib.h>
-/*
- * Functions and macros widely used in the tests.
- */
-
-//same as strcmp() == 0 but works properly for NULL pointers
-gboolean my_strcmp(const gchar* str1, const gchar* str2)
-{
- if(str1 == str2) return TRUE;
- if(str1 == NULL || str2 == NULL) return FALSE;
-
- return strcmp(str1,str2) == 0;
-}
-//same as strlen but works properly for NULL pointer and returns gint instead of guint
-gint my_strlen(const gchar* str)
-{
- if(str == NULL)return 0;
- return (gint)strlen(str);
-}
-//same as strncmp() == 0 but works properly for NULL pointers
-gboolean my_strncmp(const gchar* str1, const gchar* str2, gint n)
-{
- if(n <= 0)return TRUE;
- if(str1 == str2)return TRUE;
- if(str1 == NULL || str2 == NULL)return FALSE;
-
- return strncmp(str1, str2, n) == 0;
-}
diff --git a/tests/dummyatk/useful_functions.h b/tests/dummyatk/useful_functions.h
deleted file mode 100644
index 4fbce6c..0000000
--- a/tests/dummyatk/useful_functions.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef USEFUL_FUNCTIONS_H
-#define USEFUL_FUNCTIONS_H
-/*
- * Functions and macros widely used in the tests.
- */
-
-//macro for creating objects in startup section
-#define OBJECT_NEW(obj, type, type_str) obj = g_object_new(type,NULL);\
- if(obj == NULL)\
- {\
- INIT_FAILED("Cannot create instance of type" type_str ".\n");\
- }
-//macro for destroying object
-#define OBJECT_UNREF(obj) if(obj != NULL)\
- {\
- g_object_unref((gpointer)obj);\
- }
-//for testing signals
-#define HANDLER_DISCONNECT(obj, h) if((h) != 0)\
- {\
- g_signal_handler_disconnect(obj, h);\
- }
-
-gboolean my_strcmp(const gchar* str1, const gchar* str2);
-
-gint my_strlen(const gchar* str);
-
-gboolean my_strncmp(const gchar* str1, const gchar* str2, gint n);
-
-#endif /*USEFUL_FUNCTIONS_H*/
diff --git a/tests/dummyatk/user_marshal.c b/tests/dummyatk/user_marshal.c
deleted file mode 100644
index 1f8ecf0..0000000
--- a/tests/dummyatk/user_marshal.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <glib-object.h>
-
-/* INT:BOXED (marshal.list:1) */
-void
-g_cclosure_user_marshal_INT__BOXED (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data)
-{
- typedef gint (*GMarshalFunc_INT__BOXED) (gpointer data1,
- gpointer arg_1,
- gpointer data2);
- register GMarshalFunc_INT__BOXED callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
- gint v_return;
-
- g_return_if_fail (return_value != NULL);
- g_return_if_fail (n_param_values == 2);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_INT__BOXED) (marshal_data ? marshal_data : cc->callback);
-
- v_return = callback (data1,
- g_marshal_value_peek_boxed (param_values + 1),
- data2);
-
- g_value_set_int (return_value, v_return);
-}
-
diff --git a/tests/dummyatk/user_marshal.h b/tests/dummyatk/user_marshal.h
deleted file mode 100644
index a845925..0000000
--- a/tests/dummyatk/user_marshal.h
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef USER_MARSHAL_H
-#define USER_MARSHAL_H
-
-#include <glib-object.h>
-
-
-#ifdef G_ENABLE_DEBUG
-#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
-#define g_marshal_value_peek_char(v) g_value_get_char (v)
-#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
-#define g_marshal_value_peek_int(v) g_value_get_int (v)
-#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
-#define g_marshal_value_peek_long(v) g_value_get_long (v)
-#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
-#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
-#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
-#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
-#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
-#define g_marshal_value_peek_float(v) g_value_get_float (v)
-#define g_marshal_value_peek_double(v) g_value_get_double (v)
-#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
-#define g_marshal_value_peek_param(v) g_value_get_param (v)
-#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
-#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
-#define g_marshal_value_peek_object(v) g_value_get_object (v)
-#else /* !G_ENABLE_DEBUG */
-/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
- * Do not access GValues directly in your code. Instead, use the
- * g_value_get_*() functions
- */
-#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
-#define g_marshal_value_peek_char(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_int(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_long(v) (v)->data[0].v_long
-#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
-#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
-#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
-#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
-#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
-#define g_marshal_value_peek_float(v) (v)->data[0].v_float
-#define g_marshal_value_peek_double(v) (v)->data[0].v_double
-#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
-#endif /* !G_ENABLE_DEBUG */
-
-
-void
-g_cclosure_user_marshal_INT__BOXED (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-
-#endif /*USER_MARSHAL_H*/
diff --git a/tests/pyatspi/Makefile.am b/tests/pyatspi/Makefile.am
deleted file mode 100644
index 97213ce..0000000
--- a/tests/pyatspi/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-SUBDIRS = pasytest
-
-EXTRA_DIST = \
- accessibletest.py\
- actiontest.py\
- componenttest.py\
- desktoptest.py\
- statetest.py\
- Makefile.am\
- Makefile.in\
- setvars.sh\
- relationtest.py\
- runtests.sh\
- testrunner
-
-TESTS_ENVIRONMENT = top_builddir=$(top_builddir) top_srcdir=$(top_srcdir)
-
-TESTS = runtests.sh
-
-CLEANFILES = *.pyc
diff --git a/tests/pyatspi/accessibletest.py b/tests/pyatspi/accessibletest.py
deleted file mode 100644
index 6cd2cdd..0000000
--- a/tests/pyatspi/accessibletest.py
+++ /dev/null
@@ -1,219 +0,0 @@
-import dbus
-import gobject
-import os.path
-
-from xml.dom import minidom
-import os
-
-from pasytest import PasyTest as _PasyTest
-
-import pyatspi
-from pyatspi import StateSet
-
-st = [pyatspi.STATE_MULTI_LINE,
- pyatspi.STATE_MODAL,
- pyatspi.STATE_INDETERMINATE,
- pyatspi.STATE_SUPPORTS_AUTOCOMPLETION,
- pyatspi.STATE_VERTICAL,]
-
-def _createNode(accessible, parentElement):
- e = minidom.Element("accessible")
-
- e.attributes["name"] = accessible.name
- e.attributes["role"] = str(int(accessible.getRole()))
- e.attributes["description"] = accessible.description
-
- for i in range(0, accessible.childCount):
- _createNode(accessible.getChildAtIndex(i), e)
-
- parentElement.appendChild(e)
-
-class AccessibleTest(_PasyTest):
-
- __tests__ = ["setup",
- "test_name",
- "test_getChildAtIndex",
- "test_isEqual",
- "test_getApplication",
- "test_getAttributes",
- "test_parent",
- "test_getIndexInParent",
- "test_getLocalizedRoleName",
- "test_getRelationSet",
- "test_getRole",
- "test_getRoleName",
- "test_getState",
- "test_childCount",
- "test_description",
- "test_tree",
- "teardown",
- ]
-
- def __init__(self, bus, path):
- _PasyTest.__init__(self, "Accessible", False)
- self._bus = bus
- self._path = path
-
- def setup(self, test):
- self._registry = pyatspi.Registry()
- print self._path
- self._desktop = self._registry.getDesktop(0)
-
- def test_name(self, test):
- root = self._desktop.getChildAtIndex(0)
- test.assertEqual(root.name, "main", "Expected name - \"main\". Recieved - \"%s\"" % (root.name,))
-
- def test_getChildAtIndex(self, test):
- root = self._desktop.getChildAtIndex(0)
- a = root.getChildAtIndex(0)
- test.assertEqual(a.name, "gnome-settings-daemon",
- "Expected name - \"gnome-settings-daemon\". Recieved - \"%s\"" % (a.name,))
- b = root.getChildAtIndex(1)
- test.assertEqual(b.name, "gnome-panel",
- "Expected name - \"gnome-panel\". Recieved - \"%s\"" % (b.name,))
- c = root.getChildAtIndex(2)
- test.assertEqual(c.name, "nautilus",
- "Expected name - \"nautilus\". Recieved - \"%s\"" % (c.name,))
-
- def test_isEqual(self, test):
- root = self._desktop.getChildAtIndex(0)
-
- a = root.getChildAtIndex(1)
- if not a.isEqual(a):
- test.fail("Same accessible found unequal to self")
-
- b = root.getChildAtIndex(1)
- if not a.isEqual(b):
- test.fail("Similar accessibles found unequal")
- if not b.isEqual(a):
- test.fail("Similar accessibles found unequal")
-
- c = root.getChildAtIndex(2)
- if c.isEqual(a):
- test.fail("Different accessibles found equal")
- if a.isEqual(c):
- test.fail("Different accessibles found equal")
-
- def test_getApplication(self, test):
- root = self._desktop.getChildAtIndex(0)
- application = root.getApplication()
- if not root.isEqual(application):
- test.fail("Root accessible does not provide itself as its Application")
-
- a = root.getChildAtIndex(1)
- application = a.getApplication()
- if not root.isEqual(application):
- test.fail("Child accessible does not provide the root as its Application")
-
-
- def test_getAttributes(self, test):
- root = self._desktop.getChildAtIndex(0)
- attr = root.getAttributes()
- res = ["foo:bar", "baz:qux", "quux:corge"]
- attr.sort()
- res.sort()
- test.assertEqual(attr, res, "Attributes expected %s, recieved %s" % (attr, res))
-
- def test_parent(self, test):
- root = self._desktop.getChildAtIndex(0)
-
- a = root.getChildAtIndex(1)
- pa = a.parent
- if not root.isEqual(pa):
- test.fail("Child does not correctly report its parent")
-
- def test_getIndexInParent(self, test):
- root = self._desktop.getChildAtIndex(0)
-
- for i in range(0, root.childCount):
- child = root.getChildAtIndex(i)
- test.assertEqual(i, child.getIndexInParent(), "Childs index in parent reported incorrectly")
-
- def test_getLocalizedRoleName(self, test):
- root = self._desktop.getChildAtIndex(0)
-
- ans = "window"
- res = root.getLocalizedRoleName()
- test.assertEqual(ans, res,
- "Expected LocalizedRoleName - \"%s\". Recieved - \"%s\"" % (ans, res,))
-
- a = root.getChildAtIndex(1)
- a = a.getChildAtIndex(0)
- ans = "html container"
- res = a.getLocalizedRoleName()
- test.assertEqual(ans, res,
- "Expected LocalizedRoleName - \"%s\". Recieved - \"%s\"" % (ans, res,))
-
- def test_getRelationSet(self, test):
- root = self._desktop.getChildAtIndex(0)
- # Complete test of Relation interface is separate
- rset = root.getRelationSet()
-
- def test_getRole(self, test):
- root = self._desktop.getChildAtIndex(0)
- test.assertEqual(root.getRole(), 69,
- "Expected role - \"69\". Recieved - \"%d\"" % (int(root.getRole()),))
-
- def test_getRoleName(self, test):
- root = self._desktop.getChildAtIndex(0)
-
- ans = "window"
- res = root.getRoleName()
- test.assertEqual(ans, res,
- "Expected roleName - \"%s\". Recieved - \"%s\"" % (ans, res,))
-
- a = root.getChildAtIndex(1)
- a = a.getChildAtIndex(0)
- ans = "html container"
- res = a.getRoleName()
- test.assertEqual(ans, res,
- "Expected roleName - \"%s\". Recieved - \"%s\"" % (ans, res,))
-
- def test_getState(self, test):
- root = self._desktop.getChildAtIndex(0)
- state = root.getState()
- res = StateSet(*st)
- if not res.equals(state):
- test.fail("States not reported correctly")
-
- def test_childCount(self, test):
- root = self._desktop.getChildAtIndex(0)
- test.assertEqual(root.childCount, 11,
- "Expected role - \"11\". Recieved - \"%d\"" % (root.childCount,))
-
- def test_description(self, test):
- root = self._desktop.getChildAtIndex(0)
- description = "The main accessible object, root of the accessible tree"
- test.assertEqual(root.description, description,
- "Expected description - \"%s\". Recieved - \"%s\"" % (description, root.description,))
-
- def test_tree(self, test):
- """
- This is a mild stress test for the
- methods:
-
- getChildAtIndex
-
- And the attributes:
-
- name
- description
-
- It checks a tree of these values is correctly
- passed from Application to AT.
- """
- root = self._desktop.getChildAtIndex(0)
-
- doc = minidom.Document()
- _createNode(root, doc)
- answer = doc.toprettyxml()
-
- correct = os.path.join(os.environ["TEST_DATA_DIRECTORY"],
- "accessible-test-results.xml")
- file = open(correct)
- cstring = file.read()
-
- test.assertEqual(answer, cstring, "Object tree not passed correctly")
-
- def teardown(self, test):
- pass
diff --git a/tests/pyatspi/actiontest.py b/tests/pyatspi/actiontest.py
deleted file mode 100644
index 405f898..0000000
--- a/tests/pyatspi/actiontest.py
+++ /dev/null
@@ -1,73 +0,0 @@
-import dbus
-import gobject
-import os.path
-
-from xml.dom import minidom
-import os
-
-from pasytest import PasyTest as _PasyTest
-
-import pyatspi
-
-class ActionTest(_PasyTest):
-
- __tests__ = ["setup",
- "test_nActions",
- "test_getDescription",
- "test_getName",
- "test_doAction",
- "test_getKeyBinding",
- "teardown",
- ]
-
- def __init__(self, bus, path):
- _PasyTest.__init__(self, "Action", False)
- self._bus = bus
- self._path = path
-
- def setup(self, test):
- self._registry = pyatspi.Registry()
- self._desktop = self._registry.getDesktop(0)
-
- def test_nActions(self, test):
- root = self._desktop[0]
- root = root.queryAction()
- nact = root.nActions
- test.assertEqual(nact, 10, "nActions expected %d, recieved %d" % (10, nact))
-
- def test_getName(self, test):
- root = self._desktop[0]
- root = root.queryAction()
- name = root.getName(0)
- test.assertEqual(name, "First action", "Name expected %s, recieved %s" % ("First action", name))
- name = root.getName(1)
- test.assertEqual(name, "Action", "Name expected %s, recieved %s" % ("Action", name))
-
- def test_getDescription(self, test):
- root = self._desktop[0]
- root = root.queryAction()
- description = root.getDescription(0)
- expected = "First action performed"
- test.assertEqual(description, expected, "Description expected %s, recieved %s" % (expected, description))
- description = root.getDescription(1)
- expected = "Description of action"
- test.assertEqual(description, expected, "Description expected %s, recieved %s" % (expected, description))
-
- def test_doAction(self, test):
- root = self._desktop[0]
- root = root.queryAction()
- #TODO have event emitted to check action has been performed
- for i in range(0, root.nActions):
- root.doAction(i)
-
- def test_getKeyBinding(self, test):
- root = self._desktop[0]
- root = root.queryAction()
- for i in range(0, root.nActions):
- keybinding = root.getKeyBinding(i)
- expected = "%s" % (i,)
- test.assertEqual(keybinding, expected,
- "Keybinding expected %s, recieved %s" % (expected, keybinding))
-
- def teardown(self, test):
- pass
diff --git a/tests/pyatspi/componenttest.py b/tests/pyatspi/componenttest.py
deleted file mode 100644
index fe30c88..0000000
--- a/tests/pyatspi/componenttest.py
+++ /dev/null
@@ -1,145 +0,0 @@
-import dbus
-import gobject
-import os.path
-
-from xml.dom import minidom
-import os
-
-from pasytest import PasyTest as _PasyTest
-
-import pyatspi
-from pyatspi import Accessible
-from pyatspi import BoundingBox
-
-ATSPI_LAYER_WIDGET = 3
-ATSPI_LAYER_MDI = 4
-ATSPI_LAYER_WINDOW = 7
-
-extents_expected = [(0,0,30,20), (40,30,30,40), (0,0,70,70)]
-sizes_expected = [(30,20), (30,40), (70,70)]
-positions_expected = [(0,0), (40,30), (0,0)]
-layers_expected = [ATSPI_LAYER_WINDOW, ATSPI_LAYER_WIDGET, ATSPI_LAYER_MDI]
-zorders_expected = [-100, 100]
-
-class ComponentTest(_PasyTest):
-
- __tests__ = ["setup",
- "test_contains",
- "test_getAccessibleAtPoint",
- "test_getExtents",
- "test_getPosition",
- "test_getSize",
- "test_getLayer",
- "test_getMDIZOrder",
- "test_grabFocus",
- "test_registerFocusHandler",
- "test_deregisterFocusHandler",
- "test_getAlpha",
- "teardown",
- ]
-
- def __init__(self, bus, path):
- _PasyTest.__init__(self, "Component", False)
- self._bus = bus
- self._path = path
-
- def setup(self, test):
- self._registry = pyatspi.Registry()
- self._desktop = self._registry.getDesktop(0)
-
- def test_contains(self, test):
- pass
-
- def test_getAccessibleAtPoint(self, test):
- pass
-
- def test_getExtents(self, test):
- root = self._desktop.getChildAtIndex(0)
- one = root.getChildAtIndex(0)
- two = root.getChildAtIndex(1)
-
- comps = [one.queryComponent(),
- two.queryComponent(),
- root.queryComponent(),]
-
- for expected, comp in zip(extents_expected, comps):
- extents = comp.getExtents(0)
- test.assertEqual(extents, BoundingBox(*expected),
- "Extents not correct. Expected (%d, %d, %d, %d), Recieved (%d, %d, %d, %d)"
- % (expected[0], expected[1], expected[2], expected[3],
- extents[0], extents[1], extents[2], extents[3]))
-
- def test_getPosition(self, test):
- pass
- root = self._desktop.getChildAtIndex(0)
- one = root.getChildAtIndex(0)
- two = root.getChildAtIndex(1)
-
- comps = [one.queryComponent(),
- two.queryComponent(),
- root.queryComponent(),]
-
- for expected, comp in zip(positions_expected, comps):
- position = comp.getPosition(0)
- test.assertEqual(position, expected,
- "Position not correct. Expected (%d, %d) Recieved (%d, %d)"
- % (expected[0], expected[1], position[0], position[1]))
-
- def test_getSize(self, test):
- root = self._desktop.getChildAtIndex(0)
- one = root.getChildAtIndex(0)
- two = root.getChildAtIndex(1)
-
- comps = [one.queryComponent(),
- two.queryComponent(),
- root.queryComponent(),]
-
- for expected, comp in zip(sizes_expected, comps):
- size = comp.getSize()
- test.assertEqual(size, expected,
- "Size not correct. Expected (%d, %d) Recieved (%d, %d)"
- % (expected[0], expected[1], size[0], size[1]))
-
- def test_getLayer(self, test):
- root = self._desktop.getChildAtIndex(0)
- one = root.getChildAtIndex(0)
- two = root.getChildAtIndex(1)
-
- comps = [one.queryComponent(),
- two.queryComponent(),
- root.queryComponent(),]
-
- for expected, comp in zip(layers_expected, comps):
- layer = comp.getLayer()
- test.assertEqual(layer, expected,
- "Layer not correct. Expected %d, Recieved %d"
- % (int(layer), int(expected)))
-
- def test_getMDIZOrder(self, test):
- root = self._desktop.getChildAtIndex(0)
- one = root.getChildAtIndex(0)
- two = root.getChildAtIndex(1)
-
- comps = [two.queryComponent(),
- root.queryComponent(),]
-
- for expected, comp in zip(zorders_expected, comps):
- mdizo = comp.getMDIZOrder()
- test.assertEqual(mdizo, expected,
- "ZOrder not correct. Expected %d, Recieved %d"
- % (expected, mdizo))
-
- def test_grabFocus(self, test):
- pass
-
- def test_registerFocusHandler(self, test):
- pass
-
- def test_deregisterFocusHandler(self, test):
- pass
-
- def test_getAlpha(self, test):
- pass
-
- def teardown(self, test):
- pass
diff --git a/tests/pyatspi/desktoptest.py b/tests/pyatspi/desktoptest.py
deleted file mode 100644
index 409f634..0000000
--- a/tests/pyatspi/desktoptest.py
+++ /dev/null
@@ -1,184 +0,0 @@
-import dbus
-import gobject
-import os.path
-
-from xml.dom import minidom
-import os
-
-from pasytest import PasyTest as _PasyTest
-
-import pyatspi
-
-class DesktopTest(_PasyTest):
-
- __tests__ = ["setup",
- "test_name",
- "test_getChildAtIndex",
- "test_isEqual",
- "test_getApplication",
- "test_getAttributes",
- "test_parent",
- "test_getIndexInParent",
- "test_getLocalizedRoleName",
- "test_getRelationSet",
- "test_getRole",
- "test_getRoleName",
- "test_getState",
- "test_childCount",
- "test_description",
- "test_contains",
- "test_getAccessibleAtPoint",
- "test_getExtents",
- "test_getPosition",
- "test_getSize",
- "test_getLayer",
- "test_getMDIZOrder",
- "test_grabFocus",
- "test_registerFocusHandler",
- "test_deregisterFocusHandler",
- "test_getAlpha",
- "teardown",
- ]
-
- def __init__(self, bus, path):
- _PasyTest.__init__(self, "Desktop", False)
- self._bus = bus
- self._path = path
-
- def setup(self, test):
- self._registry = pyatspi.Registry()
- self._desktop = self._registry.getDesktop(0)
-
- def test_name(self, test):
- name = self._desktop.name
- test.assertEqual(name, "main", "Expected name - \"main\". Recieved - \"%s\"" % (name,))
-
- def test_getChildAtIndex(self, test):
- root = self._desktop.getChildAtIndex(0)
- test.assertEqual(root.name, "main",
- "Expected name - \"main\". Recieved - \"%s\"" % (root.name,))
-
- def test_isEqual(self, test):
- if not self._desktop.isEqual(self._desktop):
- test.fail("Same accessible found unequal to self")
-
- root = self._desktop.getChildAtIndex(0)
- if root.isEqual(self._desktop):
- test.fail("Different accessibles found equal")
- if self._desktop.isEqual(root):
- test.fail("Different accessibles found equal")
-
- def test_getApplication(self, test):
- test.assertEqual(self._desktop.getApplication(), None,
- "Expected application - \"None\". Recieved - \"%s\"" % (self._desktop.getApplication(),))
-
- def test_getAttributes(self, test):
- test.assertEqual(self._desktop.getAttributes(), [],
- "Expected attributes - \"[]\". Recieved - \"%s\"" % (self._desktop.getAttributes(),))
-
- def test_parent(self, test):
- test.assertEqual(self._desktop.parent, None,
- "Expected parent - \"None\". Recieved - \"%s\"" % (self._desktop.parent,))
-
- def test_getIndexInParent(self, test):
- test.assertEqual(self._desktop.getIndexInParent(), -1,
- "Expected index - \"-1\". Recieved - \"%d\"" % (self._desktop.getIndexInParent(),))
-
- def test_getLocalizedRoleName(self, test):
- ans = "unknown"
- res = self._desktop.getLocalizedRoleName()
- test.assertEqual(ans, res,
- "Expected LocalizedRoleName - \"%s\". Recieved - \"%s\"" % (ans, res,))
-
- def test_getRelationSet(self, test):
- rset = self._desktop.getRelationSet()
- test.assertEqual(rset, [],
- "Expected relation set - \"[]\". Recieved - \"%s\"" % (rset,))
-
- def test_getRole(self, test):
- test.assertEqual(self._desktop.getRole(), pyatspi.ROLE_UNKNOWN,
- "Expected role - \"ROLE_UNKNOWN\". Recieved - \"%s\"" % (self._desktop.getRole(),))
-
- def test_getRoleName(self, test):
- ans = "unknown"
- res = self._desktop.getRoleName()
- test.assertEqual(ans, res,
- "Expected RoleName - \"%s\". Recieved - \"%s\"" % (ans, res,))
-
- def test_getState(self, test):
- state = self._desktop.getState()
- res = pyatspi.StateSet()
- if not state.equals(res):
- test.fail("Desktop state set is not empty")
-
- def test_childCount(self, test):
- test.assertEqual(self._desktop.childCount, 1,
- "Expected childCount - \"1\". Recieved - \"%d\"" % (self._desktop.childCount,))
-
- def test_description(self, test):
- description = ""
- test.assertEqual(self._desktop.description, description,
- "Expected description - \"%s\". Recieved - \"%s\"" % (description, self._desktop.description,))
-
- def test_contains(self, test):
- pass
-
- def test_getAccessibleAtPoint(self, test):
- pass
-
- def test_getExtents(self, test):
- comp = self._desktop.queryComponent()
-
- extents = comp.getExtents(0)
- expected = pyatspi.BoundingBox(*(0,0,1024, 768))
- test.assertEqual(extents, expected,
- "Extents not correct. Expected (%d, %d, %d, %d), Recieved (%d, %d, %d, %d)"
- % (expected[0], expected[1], expected[2], expected[3],
- extents[0], extents[1], extents[2], extents[3]))
-
- def test_getPosition(self, test):
- comp = self._desktop.queryComponent()
-
- position = comp.getPosition(0)
- test.assertEqual(position, (0,0),
- "Position not correct. Expected (%d, %d) Recieved (%d, %d)"
- % (0, 0, position[0], position[1]))
-
- def test_getSize(self, test):
- comp = self._desktop.queryComponent()
-
- size = comp.getSize()
- test.assertEqual(size, (1024, 768),
- "Size not correct. Expected (%d, %d) Recieved (%d, %d)"
- % (1024, 768, size[0], size[1]))
-
- def test_getLayer(self, test):
- comp = self._desktop.queryComponent()
-
- layer = comp.getLayer()
- test.assertEqual(layer, pyatspi.LAYER_WIDGET,
- "Layer not correct. Expected %d, Recieved %d"
- % (layer, pyatspi.LAYER_WIDGET))
-
- def test_getMDIZOrder(self, test):
- comp = self._desktop.queryComponent()
-
- mdizo = comp.getMDIZOrder()
- test.assertEqual(mdizo, 0,
- "ZOrder not correct. Expected %d, Recieved %d"
- % (0, mdizo))
-
- def test_grabFocus(self, test):
- pass
-
- def test_registerFocusHandler(self, test):
- pass
-
- def test_deregisterFocusHandler(self, test):
- pass
-
- def test_getAlpha(self, test):
- pass
-
- def teardown(self, test):
- pass
diff --git a/tests/pyatspi/pasytest/Events.py b/tests/pyatspi/pasytest/Events.py
deleted file mode 100644
index 8e340ff..0000000
--- a/tests/pyatspi/pasytest/Events.py
+++ /dev/null
@@ -1,78 +0,0 @@
-#C#-Style Events in Python
-#Taken from http://code.activestate.com/recipes/410686/
-#By Zoran Isailovski
-
-class Events:
- def __getattr__(self, name):
- if hasattr(self.__class__, '__events__'):
- assert name in self.__class__.__events__, \
- "Event '%s' is not declared" % name
- self.__dict__[name] = ev = _EventSlot(name)
- return ev
- def __repr__(self): return 'Events' + str(list(self))
- __str__ = __repr__
- def __len__(self): return NotImplemented
- def __iter__(self):
- def gen(dictitems=self.__dict__.items()):
- for attr, val in dictitems:
- if isinstance(val, _EventSlot):
- yield val
- return gen()
-
-#------------------------------------------------------------------------------
-
-class _EventSlot:
- def __init__(self, name):
- self.targets = []
- self.__name__ = name
- def __repr__(self):
- return 'event ' + self.__name__
- def __call__(self, *a, **kw):
- for f in self.targets: f(*a, **kw)
- def __iadd__(self, f):
- self.targets.append(f)
- return self
- def __isub__(self, f):
- while f in self.targets: self.targets.remove(f)
- return self
-
-#------------------------------------------------------------------------------
-
-if __name__ == '__main__':
-
- class MyEvents(Events):
- __events__ = ('OnChange', )
-
- class ValueModel(object):
- def __init__(self):
- self.events = MyEvents()
- self.__value = None
- def __set(self, value):
- if (self.__value == value): return
- self.__value = value
- self.events.OnChange()
- ##self.events.OnChange2() # would fail
- def __get(self):
- return self.__value
- Value = property(__get, __set, None, 'The actual value')
-
- class SillyView(object):
- def __init__(self, model):
- self.model = model
- model.events.OnChange += self.DisplayValue
- ##model.events.OnChange2 += self.DisplayValue # would raise exeception
- def DisplayValue(self):
- print self.model.Value
-
-
- model = ValueModel()
- view = SillyView(model)
-
- print '\n--- Events Demo ---'
- # Events in action
- for i in range(5):
- model.Value = 2*i + 1
- # Events introspection
- print model.events
- for event in model.events:
- print event
diff --git a/tests/pyatspi/pasytest/Makefile.am b/tests/pyatspi/pasytest/Makefile.am
deleted file mode 100644
index 1fa89ed..0000000
--- a/tests/pyatspi/pasytest/Makefile.am
+++ /dev/null
@@ -1,6 +0,0 @@
-EXTRA_DIST = \
- Events.py\
- Pasy.py\
- __init__.py
-
-CLEANFILES = *.pyc
diff --git a/tests/pyatspi/pasytest/Pasy.py b/tests/pyatspi/pasytest/Pasy.py
deleted file mode 100644
index 80318ee..0000000
--- a/tests/pyatspi/pasytest/Pasy.py
+++ /dev/null
@@ -1,146 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#his program is free software; you can redistribute it and/or modify
-#it under the terms of the GNU General Public License as published by
-#the Free Software Foundation; either version 2 of the License, or
-#(at your option) any later version.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-import gobject
-from Events import Events
-
-import traceback
-
-PASY_TEST_NOT_STARTED = 0
-PASY_TEST_IN_PROGRESS = 1
-PASY_TEST_FAIL = 2
-PASY_TEST_WIN = 3
-
-class PasyEvents(Events):
- __events__ = ('finished', )
-
-class PasyTestStep(object):
-
- def __init__(self, name):
- self.events = PasyEvents()
- self._state = PASY_TEST_NOT_STARTED
-
- self._name = name
-
- def win(self):
- if self._state == PASY_TEST_IN_PROGRESS:
- self._state = PASY_TEST_WIN
- self.events.finished()
-
- def fail(self, msg):
- if self._state == PASY_TEST_IN_PROGRESS:
- self._state = PASY_TEST_FAIL
- self.failMsg = msg
- self.events.finished()
-
- def assertEqual(self, a, b, msg):
- if a != b:
- self.fail(msg)
-
- def assertNotEqual(self, a, b, msg):
- if a == b:
- self.fail(msg)
-
- def run(self):
- self._state = PASY_TEST_IN_PROGRESS
- self.entry()
-
- def report(self):
- if self._state == PASY_TEST_WIN:
- return "%s - PASSED" % (self._name,)
- elif self._state == PASY_TEST_FAIL:
- return "%s - FAILED - %s" % (self._name, self.failMsg)
- else:
- return "%s - INCOMPLETE" % (self._name,)
-
- @property
- def state(self):
- return self._state
-
-class PasyTestFunc(PasyTestStep):
-
- def __init__(self, name, func):
- PasyTestStep.__init__(self, name)
- self._func = func
-
- def entry(self):
- try:
- self._func(self)
- except Exception, e:
- self.fail(e.message)
- traceback.print_exc()
- self.win()
-
-class PasyTest(PasyTestStep):
-
- __tests__ = []
-
- def __init__(self, name, cont):
- PasyTestStep.__init__(self, name)
-
- self._cont = cont
- self._tests = []
-
- for name in self.__tests__:
- func = getattr(self, name)
- self._addfunc(func.func_name, func)
-
- def _addfunc(self, name, func):
- functest = PasyTestFunc(func.func_name, func)
- self._tests.append(functest)
-
- def entry(self):
- self._iter = self._test_iterator()
- gobject.idle_add(self.idle_handler)
-
- def idle_handler(self):
- try:
- step = self._iter.next()
- def finished_handler():
- if step.state == PASY_TEST_WIN or self._cont == True:
- gobject.idle_add(self.idle_handler)
- elif step.state == PASY_TEST_FAIL and self._cont == False:
- self.fail("Sub test %s Failed" % step._name)
- step.events.finished += finished_handler
- step.run()
- except StopIteration:
- # No More tests, check for success or fail
- succeeded = True
- for test in self._tests:
- succeeded = succeeded and (test.state == PASY_TEST_WIN)
- if succeeded:
- self.win()
- else:
- self.fail()
- return False
-
- def _test_iterator(self):
- for test in self._tests:
- yield test
-
- def report(self):
- if self._state == PASY_TEST_WIN:
- header = "%s - PASSED" % (self._name,)
- elif self._state == PASY_TEST_FAIL:
- header = "%s - FAILED" % (self._name,)
- else:
- header = "%s - INCOMPLETE" %s (self._name,)
-
- step_messages = []
- for test in self._tests:
- step_messages.append(test.report())
-
- step_report = "\n\t".join(step_messages)
- return header + "\n\t" + step_report
diff --git a/tests/pyatspi/pasytest/__init__.py b/tests/pyatspi/pasytest/__init__.py
deleted file mode 100644
index c54bff1..0000000
--- a/tests/pyatspi/pasytest/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#Copyright (C) 2008 Codethink Ltd
-
-#his program is free software; you can redistribute it and/or modify
-#it under the terms of the GNU General Public License as published by
-#the Free Software Foundation; either version 2 of the License, or
-#(at your option) any later version.
-
-#This program is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-#You should have received a copy of the GNU General Public License
-#along with this program; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-from Pasy import PasyTestStep, PasyTestFunc, PasyTest
diff --git a/tests/pyatspi/relationtest.py b/tests/pyatspi/relationtest.py
deleted file mode 100644
index 77ce31c..0000000
--- a/tests/pyatspi/relationtest.py
+++ /dev/null
@@ -1,70 +0,0 @@
-import dbus
-import gobject
-import os.path
-
-from xml.dom import minidom
-import os
-
-from pasytest import PasyTest as _PasyTest
-
-import pyatspi
-
-class RelationTest(_PasyTest):
-
- __tests__ = ["setup",
- "teardown",
- "test_getRelationType",
- "test_getRelationTypeName",
- "test_getNTargets",
- "test_getTarget",
- ]
-
- def __init__(self, bus, path):
- _PasyTest.__init__(self, "Relation", False)
- self._bus = bus
- self._path = path
-
- def setup(self, test):
- self._registry = pyatspi.Registry()
- self._desktop = self._registry.getDesktop(0)
- self._root = self._desktop[0]
- self._rset = self._root.getRelationSet()
- test.assertEqual(len(self._rset), 4, "Num relations expected %d, recieved %d" % (6, len(self._rset)))
-
- def test_getRelationType(self, test):
- expected = [pyatspi.RELATION_EMBEDS,
- pyatspi.RELATION_PARENT_WINDOW_OF,
- pyatspi.RELATION_DESCRIBED_BY,
- pyatspi.RELATION_POPUP_FOR,]
- rtypes = [rel.getRelationType() for rel in self._rset]
- for exp, type in zip(expected, rtypes):
- test.assertEqual(exp, type, "Relation type expected %s, recieved %s" % (exp, type))
-
- def test_getRelationTypeName(self, test):
- # FIXME This may not have been implemented in CORBA.
- # Completely unused?
- pass
-
- def test_getNTargets(self, test):
- expected = [1, 1, 1, 3]
- ntargs = [rel.getNTargets() for rel in self._rset]
- for exp, ntarg in zip(expected, ntargs):
- test.assertEqual(exp, ntarg, "Number of targets expected %s, recieved %s" % (exp, ntarg))
-
- def test_getTarget(self, test):
- rone = self._rset[0]
- tone = rone.getTarget(0)
- tonename = tone.name
- test.assertEqual(tonename, "r1", "Target name expected %s, recieved %s" % ("r1", tonename))
- tonerole = tone.getRoleName()
- test.assertEqual(tonerole, "invalid", "Target RoleName expected %s, recieved %s" % ("invalid", tonename))
-
- rtwo = self._rset[3]
- ttwo = rtwo.getTarget(2)
- ttwoname = ttwo.name
- test.assertEqual(ttwoname, "m3", "Target name expected %s, recieved %s" % ("m3", ttwoname))
- ttworole = ttwo.getRoleName()
- test.assertEqual(ttworole, "invalid", "Target RoleName expected %s, recieved %s" % ("invalid", ttwoname))
-
- def teardown(self, test):
- pass
diff --git a/tests/pyatspi/runtests.sh b/tests/pyatspi/runtests.sh
deleted file mode 100755
index 1ef1295..0000000
--- a/tests/pyatspi/runtests.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-export PYTHONPATH=$top_srcdir
-
-export TEST_DATA_DIRECTORY=$top_srcdir/tests/data
-export TEST_ATSPI_LIBRARY=$top_builddir/atk-adaptor/.libs/libspiatk.so
-export TEST_MODULES_DIRECTORY=$top_builddir/tests/apps/.libs
-export TEST_APPLICATION=$top_builddir/tests/apps/test-application
-
-$PYTHON $top_srcdir/tests/pyatspi/testrunner -l libaccessibleapp.so -m accessibletest -n AccessibleTest
-$PYTHON $top_srcdir/tests/pyatspi/testrunner -l libactionapp.so -m actiontest -n ActionTest
-$PYTHON $top_srcdir/tests/pyatspi/testrunner -l libcomponentapp.so -m componenttest -n ComponentTest
-$PYTHON $top_srcdir/tests/pyatspi/testrunner -l librelationapp.so -m relationtest -n RelationTest
-$PYTHON $top_srcdir/tests/pyatspi/testrunner -l libaccessibleapp.so -m statetest -n StateTest
diff --git a/tests/pyatspi/setvars.sh b/tests/pyatspi/setvars.sh
deleted file mode 100644
index d9638a2..0000000
--- a/tests/pyatspi/setvars.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-export PYTHONPATH=../../
-
-export TEST_DATA_DIRECTORY=../data
-export TEST_ATSPI_LIBRARY=../../atk-adaptor/.libs/libspiatk.so
-export TEST_MODULES_DIRECTORY=../apps/.libs
-export TEST_APPLICATION=../apps/test-application
diff --git a/tests/pyatspi/statetest.py b/tests/pyatspi/statetest.py
deleted file mode 100644
index 223cf6e..0000000
--- a/tests/pyatspi/statetest.py
+++ /dev/null
@@ -1,101 +0,0 @@
-import dbus
-import gobject
-import os.path
-
-from xml.dom import minidom
-import os
-
-from pasytest import PasyTest as _PasyTest
-
-import pyatspi
-from pyatspi import StateSet
-
-os = [pyatspi.STATE_MULTISELECTABLE,
- pyatspi.STATE_PRESSED,
- pyatspi.STATE_SHOWING,
- pyatspi.STATE_TRANSIENT,
- pyatspi.STATE_COLLAPSED,
- pyatspi.STATE_EDITABLE,]
-
-class StateTest(_PasyTest):
-
- __tests__ = ["setup",
- "test_contains",
- "test_add",
- "test_remove",
- "test_equals",
- "test_compare",
- "test_isEmpty",
- "test_getStates",
- "teardown",
- ]
-
- def __init__(self, bus, path):
- _PasyTest.__init__(self, "State", False)
-
- def setup(self, test):
- pass
-
- def test_contains(self, test):
- state = StateSet(*os)
- if not state.contains(pyatspi.STATE_PRESSED):
- test.fail("Does not find contained state")
- if state.contains(pyatspi.STATE_ACTIVE):
- test.fail("Finds state not contained")
-
- def test_add(self, test):
- state = StateSet()
- state.add(pyatspi.STATE_PRESSED)
- if not state.contains(pyatspi.STATE_PRESSED):
- test.fail("State not added")
-
- def test_remove(self, test):
- state = StateSet(*os)
- state.remove(pyatspi.STATE_PRESSED)
- if state.contains(pyatspi.STATE_PRESSED):
- test.fail("State not removed")
-
- def test_equals(self, test):
- one = StateSet(*os)
- two = StateSet(*os)
- if not one.equals(two):
- test.fail("Same states not found equal")
- two.remove(pyatspi.STATE_PRESSED)
- if two.equals(one):
- test.fail("Unequal states found equal")
-
- def test_isEmpty(self, test):
- emp = StateSet()
- if not emp.isEmpty():
- test.fail("Empty state found non-empty")
- emp.add(pyatspi.STATE_PRESSED)
- if emp.isEmpty():
- test.fail("State incorrectly found empty")
-
- def test_compare(self, test):
- one = StateSet(*os)
- two = StateSet(*os)
-
- onemtwo = one.compare(two)
- if not onemtwo.isEmpty():
- test.fail("Equal states when compared yeilds non-empty state")
-
- one.add(pyatspi.STATE_ACTIVE)
- onemtwo = one.compare(two)
-
- act = StateSet(pyatspi.STATE_ACTIVE)
- if not onemtwo.equals(act):
- test.fail("Compared states do not yeild correct state")
-
- def test_getStates(self, test):
- state = StateSet(*os)
-
- states = state.getStates()
- cone = set(states)
- ctwo = set(os)
-
- if not (cone.issubset(ctwo) and ctwo.issubset(cone)):
- test.fail("States not reported correctly")
-
- def teardown(self, test):
- pass
diff --git a/tests/pyatspi/testrunner b/tests/pyatspi/testrunner
deleted file mode 100755
index 92531e2..0000000
--- a/tests/pyatspi/testrunner
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/usr/bin/python
-
-import gobject
-import dbus
-import sys
-import os
-import time
-from random import randint
-
-from optparse import OptionParser
-from pasytest import PasyTest
-
-from dbus.mainloop.glib import DBusGMainLoop
-
-DBusGMainLoop(set_as_default=True)
-
-def run_test_app(module_name, dbus_name=None, wait_for_debug=False):
- import os
- from subprocess import Popen
-
- test_data_directory = os.environ["TEST_DATA_DIRECTORY"]
- test_modules_directory = os.environ["TEST_MODULES_DIRECTORY"]
- test_atspi_library = os.environ["TEST_ATSPI_LIBRARY"]
- test_application = os.environ["TEST_APPLICATION"]
-
- test_module = os.path.join(test_modules_directory, module_name)
-
- if (dbus_name):
- print " ".join([test_application,
- "--atspi-dbus-name", dbus_name,
- "--test-atspi-library", test_atspi_library,
- "--test-module", test_module,
- "--test-data-directory", test_data_directory,])
- pop = Popen([test_application,
- "--atspi-dbus-name", dbus_name,
- "--test-atspi-library", test_atspi_library,
- "--test-module", test_module,
- "--test-data-directory", test_data_directory,])
- else:
- print " ".join([test_application,
- "--test-atspi-library", test_atspi_library,
- "--test-module", test_module,
- "--test-data-directory", test_data_directory,])
- pop = Popen([test_application,
- "--test-atspi-library", test_atspi_library,
- "--test-module", test_module,
- "--test-data-directory", test_data_directory,])
-
- wait_message = """
- The test application %s has been started with PID %d.
-
- To continue the test press ENTER.\n\n
- """
- if (wait_for_debug):
- raw_input(wait_message % (module_name, pop.pid))
-
-def main(argv):
- parser = OptionParser()
- parser.add_option("-l", "--library", dest="test_library")
- parser.add_option("-m", "--module", dest="test_module")
- parser.add_option("-n", "--name", dest="test_name")
- parser.add_option("-w", "--wait", action="store_true", dest="wait", default=False)
- (options, args) = parser.parse_args()
-
- bus = dbus.SessionBus()
- name = "test.atspi.R" + str(randint(1, 1000))
-
- app = run_test_app(options.test_library, name, wait_for_debug=options.wait)
- time.sleep(1)
- print "Started test app on bus name %s" % (name,)
-
- to = bus.get_object(name, "/org/codethink/atspi/test")
- test = dbus.Interface(to, "org.codethink.atspi.test")
-
- # Run the test script here
- os.environ["ATSPI_TEST_APP_NAME"] = name
- module = __import__(options.test_module)
- test_class = getattr(module, options.test_name)
- test_object = test_class(bus, name)
- test_object.run()
-
- loop = gobject.MainLoop()
-
- def finished_handler():
- loop.quit()
- print "\n" + test_object.report() + "\n"
- test.finish()
-
- test_object.events.finished += finished_handler
-
- loop.run()
-
-if __name__=="__main__":
- sys.exit(main(sys.argv))