OSDN Git Service

IAccessibleHandler.accessibleChildren: Filter out NULL pointers returned by Accessibl...
authorJames Teh <jamie@jantrid.net>
Fri, 30 Nov 2012 05:54:16 +0000 (15:54 +1000)
committerJames Teh <jamie@jantrid.net>
Fri, 30 Nov 2012 05:54:16 +0000 (15:54 +1000)
Returning a NULL pointer as one of the children is a bug in the server, but we shouldn't choke on it even so.

source/IAccessibleHandler.py

index f55a941..1f09b0f 100644 (file)
@@ -350,12 +350,17 @@ def windowFromAccessibleObject(ia):
                return 0\r
 \r
 def accessibleChildren(ia,startIndex,numChildren):\r
-       children=oleacc.AccessibleChildren(ia,startIndex,numChildren)\r
-       for childNum in xrange(len(children)):\r
-               if isinstance(children[childNum],comtypes.client.lazybind.Dispatch) or isinstance(children[childNum],comtypes.client.dynamic._Dispatch) or isinstance(children[childNum],IUnknown):\r
-                       children[childNum]=(normalizeIAccessible(children[childNum]),0)\r
-               elif isinstance(children[childNum],int):\r
-                       children[childNum]=(ia,children[childNum])\r
+       children=[]\r
+       for child in oleacc.AccessibleChildren(ia,startIndex,numChildren):\r
+               if child is None:\r
+                       # This is a bug in the server.\r
+                       # Filtering these out here makes life easier for the caller.\r
+                       continue\r
+               elif isinstance(child,comtypes.client.lazybind.Dispatch) or isinstance(child,comtypes.client.dynamic._Dispatch) or isinstance(child,IUnknown):\r
+                       child=(normalizeIAccessible(child),0)\r
+               elif isinstance(child,int):\r
+                       child=(ia,child)\r
+               children.append(child)\r
        return children\r
 \r
 def accFocus(ia):\r