Skip to content

Commit 9922a5a

Browse files
Merge 735c81d into 0be9ee0
2 parents 0be9ee0 + 735c81d commit 9922a5a

3 files changed

Lines changed: 71 additions & 16 deletions

File tree

source/UIABrowseMode.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#A part of NonVisual Desktop Access (NVDA)
22
#This file is covered by the GNU General Public License.
33
#See the file COPYING for more details.
4-
#Copyright (C) 2015-2017 NV Access Limited, Babbage B.V.
4+
#Copyright (C) 2015-2020 NV Access Limited, Babbage B.V., Accessolutions, Julien Cochuyt
55

66
from ctypes import byref
77
from comtypes import COMError
@@ -11,10 +11,10 @@
1111
import UIAHandler
1212
from UIAUtils import (
1313
createUIAMultiPropertyCondition,
14-
isUIAElementInWalker,
1514
getDeepestLastChildUIAElementInWalker,
1615
getUIATextAttributeValueFromRange,
17-
iterUIARangeByUnit
16+
isUIAElementInWalker,
17+
iterUIARangeByUnit,
1818
)
1919
import documentBase
2020
import treeInterceptorHandler
@@ -417,8 +417,26 @@ def _iterNodesByType(self,nodeType,direction="next",pos=None):
417417
condition=createUIAMultiPropertyCondition({UIAHandler.UIA_ControlTypePropertyId:UIAHandler.UIA_EditControlTypeId,UIAHandler.UIA_ValueIsReadOnlyPropertyId:False},{UIAHandler.UIA_ControlTypePropertyId:UIAHandler.UIA_ComboBoxControlTypeId,UIAHandler.UIA_IsTextPatternAvailablePropertyId:True})
418418
return UIAControlQuicknavIterator(nodeType,self,pos,condition,direction)
419419
elif nodeType=="formField":
420-
condition=createUIAMultiPropertyCondition({UIAHandler.UIA_ControlTypePropertyId:UIAHandler.UIA_EditControlTypeId,UIAHandler.UIA_ValueIsReadOnlyPropertyId:False},{UIAHandler.UIA_ControlTypePropertyId:UIAHandler.UIA_ListControlTypeId,UIAHandler.UIA_IsKeyboardFocusablePropertyId:True},{UIAHandler.UIA_ControlTypePropertyId:[UIAHandler.UIA_CheckBoxControlTypeId,UIAHandler.UIA_RadioButtonControlTypeId,UIAHandler.UIA_ComboBoxControlTypeId,UIAHandler.UIA_ButtonControlTypeId]})
421-
return UIAControlQuicknavIterator(nodeType,self,pos,condition,direction)
420+
condition = createUIAMultiPropertyCondition(
421+
{
422+
UIAHandler.UIA_ControlTypePropertyId: UIAHandler.UIA_EditControlTypeId,
423+
UIAHandler.UIA_ValueIsReadOnlyPropertyId: False
424+
},
425+
{
426+
UIAHandler.UIA_ControlTypePropertyId: UIAHandler.UIA_ListControlTypeId,
427+
UIAHandler.UIA_IsKeyboardFocusablePropertyId: True
428+
},
429+
{
430+
UIAHandler.UIA_ControlTypePropertyId: [
431+
UIAHandler.UIA_ButtonControlTypeId,
432+
UIAHandler.UIA_CheckBoxControlTypeId,
433+
UIAHandler.UIA_ComboBoxControlTypeId,
434+
UIAHandler.UIA_RadioButtonControlTypeId,
435+
UIAHandler.UIA_TabItemControlTypeId,
436+
]
437+
},
438+
)
439+
return UIAControlQuicknavIterator(nodeType, self, pos, condition, direction)
422440
elif nodeType == "landmark":
423441
condition = UIAHandler.handler.clientObject.createNotCondition(
424442
UIAHandler.handler.clientObject.createPropertyCondition(

source/virtualBuffers/MSHTML.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#A part of NonVisual Desktop Access (NVDA)
33
#This file is covered by the GNU General Public License.
44
#See the file COPYING for more details.
5-
#Copyright (C) 2009-2017 NV Access Limited, Babbage B.V.
5+
#Copyright (C) 2009-2020 NV Access Limited, Babbage B.V., Accessolutions, Julien Cochuyt
66

77
from comtypes import COMError
88
import eventHandler
@@ -246,14 +246,29 @@ def _searchableAttribsForNodeType(self,nodeType):
246246
attrs={"IAccessible::role":[oleacc.ROLE_SYSTEM_LINK],"IAccessible::state_%d"%oleacc.STATE_SYSTEM_LINKED:[1],"IAccessible::state_%d"%oleacc.STATE_SYSTEM_TRAVERSED:[None]}
247247
elif nodeType=="formField":
248248
attrs=[
249-
{"IAccessible::role":[oleacc.ROLE_SYSTEM_PUSHBUTTON,oleacc.ROLE_SYSTEM_RADIOBUTTON,oleacc.ROLE_SYSTEM_CHECKBUTTON,oleacc.ROLE_SYSTEM_OUTLINE],"IAccessible::state_%s"%oleacc.STATE_SYSTEM_READONLY:[None]},
250-
{"IAccessible::role":[oleacc.ROLE_SYSTEM_COMBOBOX]},
249+
{
250+
"IAccessible::role": [
251+
oleacc.ROLE_SYSTEM_CHECKBUTTON,
252+
oleacc.ROLE_SYSTEM_OUTLINE,
253+
oleacc.ROLE_SYSTEM_PUSHBUTTON,
254+
oleacc.ROLE_SYSTEM_PAGETAB,
255+
oleacc.ROLE_SYSTEM_RADIOBUTTON,
256+
],
257+
f"IAccessible::state_{oleacc.STATE_SYSTEM_READONLY}": [None],
258+
},
259+
{"IAccessible::role": [oleacc.ROLE_SYSTEM_COMBOBOX]},
251260
# Focusable edit fields (input type=text, including readonly ones)
252-
{"IAccessible::role":[oleacc.ROLE_SYSTEM_TEXT],"IAccessible::state_%s"%oleacc.STATE_SYSTEM_FOCUSABLE:[1]},
261+
{
262+
"IAccessible::role": [oleacc.ROLE_SYSTEM_TEXT],
263+
f"IAccessible::state_{oleacc.STATE_SYSTEM_FOCUSABLE}": [1],
264+
},
253265
# Any top-most content editable element (E.g. an editable div for rhich text editing)
254-
{"IHTMLElement::isContentEditable":[1],"parent::IHTMLElement::isContentEditable":[0,None]},
255-
{"IHTMLDOMNode::nodeName":["SELECT"]},
256-
{"HTMLAttrib::role":["listbox"]},
266+
{
267+
"IHTMLElement::isContentEditable": [1],
268+
"parent::IHTMLElement::isContentEditable": [0, None],
269+
},
270+
{"IHTMLDOMNode::nodeName": ["SELECT"]},
271+
{"HTMLAttrib::role": ["listbox"]},
257272
]
258273
elif nodeType=="button":
259274
attrs={"IAccessible::role":[oleacc.ROLE_SYSTEM_PUSHBUTTON]}

source/virtualBuffers/gecko_ia2.py

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#A part of NonVisual Desktop Access (NVDA)
33
#This file is covered by the GNU General Public License.
44
#See the file COPYING for more details.
5-
# Copyright (C) 2008-2020 NV Access Limited, Babbage B.V., Mozilla Corporation
5+
# Copyright (C) 2008-2020 NV Access Limited, Babbage B.V., Mozilla Corporation, Accessolutions, Julien Cochuyt
66

77
import weakref
88
from . import VirtualBuffer, VirtualBufferTextInfo, VBufStorage_findMatch_word, VBufStorage_findMatch_notEmpty
@@ -333,9 +333,31 @@ def _searchableAttribsForNodeType(self,nodeType):
333333
attrs={"IAccessible::role":[oleacc.ROLE_SYSTEM_LINK],"IAccessible::state_%d"%oleacc.STATE_SYSTEM_LINKED:[1],"IAccessible::state_%d"%oleacc.STATE_SYSTEM_TRAVERSED:[None]}
334334
elif nodeType=="formField":
335335
attrs=[
336-
{"IAccessible::role":[oleacc.ROLE_SYSTEM_PUSHBUTTON,oleacc.ROLE_SYSTEM_BUTTONMENU,oleacc.ROLE_SYSTEM_RADIOBUTTON,oleacc.ROLE_SYSTEM_CHECKBUTTON,oleacc.ROLE_SYSTEM_COMBOBOX,oleacc.ROLE_SYSTEM_LIST,oleacc.ROLE_SYSTEM_OUTLINE,IAccessibleHandler.IA2_ROLE_TOGGLE_BUTTON],"IAccessible::state_%s"%oleacc.STATE_SYSTEM_READONLY:[None]},
337-
{"IAccessible::role":[oleacc.ROLE_SYSTEM_COMBOBOX,oleacc.ROLE_SYSTEM_TEXT],"IAccessible2::state_%s"%IAccessibleHandler.IA2_STATE_EDITABLE:[1]},
338-
{"IAccessible2::state_%s"%IAccessibleHandler.IA2_STATE_EDITABLE:[1],"parent::IAccessible2::state_%s"%IAccessibleHandler.IA2_STATE_EDITABLE:[None]},
336+
{
337+
"IAccessible::role": [
338+
oleacc.ROLE_SYSTEM_BUTTONMENU,
339+
oleacc.ROLE_SYSTEM_CHECKBUTTON,
340+
oleacc.ROLE_SYSTEM_COMBOBOX,
341+
oleacc.ROLE_SYSTEM_LIST,
342+
oleacc.ROLE_SYSTEM_OUTLINE,
343+
oleacc.ROLE_SYSTEM_PUSHBUTTON,
344+
oleacc.ROLE_SYSTEM_RADIOBUTTON,
345+
oleacc.ROLE_SYSTEM_PAGETAB,
346+
IAccessibleHandler.IA2_ROLE_TOGGLE_BUTTON,
347+
],
348+
f"IAccessible::state_{oleacc.STATE_SYSTEM_READONLY}": [None],
349+
},
350+
{
351+
"IAccessible::role": [
352+
oleacc.ROLE_SYSTEM_COMBOBOX,
353+
oleacc.ROLE_SYSTEM_TEXT
354+
],
355+
f"IAccessible2::state_{IAccessibleHandler.IA2_STATE_EDITABLE}": [1],
356+
},
357+
{
358+
f"IAccessible2::state_{IAccessibleHandler.IA2_STATE_EDITABLE}": [1],
359+
f"parent::IAccessible2::state_{IAccessibleHandler.IA2_STATE_EDITABLE}": [None],
360+
},
339361
]
340362
elif nodeType=="list":
341363
attrs={"IAccessible::role":[oleacc.ROLE_SYSTEM_LIST]}

0 commit comments

Comments
 (0)