chromium.py
1.53 KB
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
48
#NVDAObjects/IAccessible/chromium.py
#A part of NonVisual Desktop Access (NVDA)
#This file is covered by the GNU General Public License.
#See the file COPYING for more details.
# Copyright (C) 2010-2013 NV Access Limited
"""NVDAObjects for the Chromium browser project
"""
from comtypes import COMError
import oleacc
import controlTypes
import IAccessibleHandler
from NVDAObjects.IAccessible import IAccessible
from virtualBuffers.gecko_ia2 import Gecko_ia2 as GeckoVBuf
from . import ia2Web
class ChromeVBuf(GeckoVBuf):
def __contains__(self, obj):
if obj.windowHandle != self.rootNVDAObject.windowHandle:
return False
if not isinstance(obj,ia2Web.Ia2Web):
# #4080: Input composition NVDAObjects are the same window but not IAccessible2!
return False
accId = obj.IA2UniqueID
if accId == self.rootID:
return True
try:
self.rootNVDAObject.IAccessibleObject.accChild(accId)
except COMError:
return False
return not self._isNVDAObjectInApplication(obj)
class Document(ia2Web.Document):
def _get_treeInterceptorClass(self):
states = self.states
if controlTypes.STATE_EDITABLE not in states and controlTypes.STATE_BUSY not in states:
return ChromeVBuf
return super(Document, self).treeInterceptorClass
def findExtraOverlayClasses(obj, clsList):
"""Determine the most appropriate class(es) for Chromium objects.
This works similarly to L{NVDAObjects.NVDAObject.findOverlayClasses} except that it never calls any other findOverlayClasses method.
"""
ia2Web.findExtraOverlayClasses(obj, clsList,
documentClass=Document)