forked from illinois-dres-aitg/pyia2
-
Notifications
You must be signed in to change notification settings - Fork 1
/
test-functions.py
47 lines (40 loc) · 1.77 KB
/
test-functions.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Convenience functions for getting IAccessible and IAccessible2 instances
# within a Python REPL session.
import pyia2
from pyia2.constants import CHILDID_SELF, \
UNLOCALIZED_ROLE_NAMES, \
UNLOCALIZED_STATE_NAMES
from pyia2.utils import IA2Lib
def NextAccessible(event_id=pyia2.EVENT_OBJECT_FOCUS, predicate=None):
'''Returns an IAccessible from the next requested event, blocking until it
arrives. Will only match the specified event_id, and only when
predicate(event, accessible) returns True.
'''
shared = {}
def callback(event):
accessible = pyia2.accessibleObjectFromEvent(event)
if not accessible:
return
if predicate and not predicate(event, accessible):
return
shared["accessible"] = accessible
pyia2.Registry.registerEventListener(callback, event_id)
while "accessible" not in shared:
pyia2.Registry.iter_loop(0.01)
pyia2.Registry.deregisterEventListener(callback, event_id)
return shared["accessible"]
def NextAccessible2(event_id=pyia2.EVENT_OBJECT_FOCUS, predicate=None):
'''Returns an IAccessible2 from the next requested event, blocking until it
arrives. Will only match the specified event_id, and only when
predicate(event, accessible2) returns True.
'''
def augmented_predicate(event, accessible):
accessible2 = pyia2.accessible2FromAccessible(accessible, CHILDID_SELF)
if not isinstance(accessible2, IA2Lib.IAccessible2):
return False
if predicate:
return predicate(event, accessible2)
else:
return True
accessible = NextAccessible(event_id, augmented_predicate)
return pyia2.accessible2FromAccessible(accessible, CHILDID_SELF)