Ticket #16 (closed defect: fixed)

Opened 3 years ago

Last modified 7 months ago

IAccessibles are needlessly being created for some cases of IAccessible NVDA object next/previous/firstChild/children properties

Reported by: mdcurran Owned by:
Priority: major Milestone: 2009.1
Component: Core Version: development
Keywords: accNavigate, accessibleChildren, accFocus, next, previous, firstChild Cc:
Operating system: Blocked by:
Blocking:

Description

MSAA accNavigate returns either an IAccessible pointer, or a childID. NVDA's IAccessibleHandler wraps these functions but makes them return (IAccessiblePointer,childID) each time,r ather than just one or the other. The issue with this is that when an IAccessible NVDA object calls accNavigate to go next/previous/firstChild, it receives back both IAccessiblePointer and childID, and then uses complex and sometimes time consuming logic to work out whether or not this is a good move, as in are we in a window, are we jumping to another one etc. Its also posible that a long the line another IAccessiblePointer is being created for the final NVDA object when it may not have to be. If accNavigate just returned either the childID or IAccessiblePointer, but not both, NVDA objects could suppress the complex logic if only the child ID changed, as the old IAccessiblePointer clearly can be used. This also goes for MSAA AccessibleChildren?, in that NVDA wraps this function so it returns a list of IAccessiblePointer,childID pares, really it should return just a list of either IAccessiblePointers, or childIDs, but not pares of both. This change should also apply to the IAccessible accFocus property.

Change History

Changed 3 years ago by mdcurran

  • status changed from new to closed
  • resolution set to fixed

Fixed in r1365. Rather than changing accNavigate/accFocus/accessibleChildren, in the IAccessible NVDA object properties, we now compare the IAccessible pointer we receive from these functions, against the IAccessible pointer of the NVDA object. If they are the same then we know that we can provide cached values, such as windowHandle etc to the new NVDA object.

Note: See TracTickets for help on using tickets.