X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=pyatspi%2Faccessible.py;h=17f49163c9b631dd40a797e93f71446b979dc01b;hb=ac646bf30a89527a3b0d2a2073499380d40e39fc;hp=803bdad56b13e2ffc589db3eb4640634f64cb799;hpb=4c8db6a737c810f57d6779d80d0ebc17c8a00cfa;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/pyatspi/accessible.py b/pyatspi/accessible.py index 803bdad..17f4916 100644 --- a/pyatspi/accessible.py +++ b/pyatspi/accessible.py @@ -162,9 +162,6 @@ def _makeQuery(iid): self._icache[iid] = None raise NotImplementedError - # not needed according to ORBit2 spec, but makes Java queries work - # more reliably according to Orca experience - i = i._narrow(i.__class__) if caching: # cache the narrow'ed result, but only if we're caching for this object self._icache[iid] = i @@ -222,6 +219,8 @@ def _mixExceptions(cls): @param cls: Class to mix interface methods into @type cls: class ''' + # get a method type as a reference from a known method + method_type = Accessibility.Accessible.getRole.__class__ # loop over all names in the new class for name in cls.__dict__.keys(): obj = cls.__dict__[name] @@ -229,10 +228,10 @@ def _mixExceptions(cls): if name.startswith('_'): continue # check if we're on a method - elif isinstance(obj, types.FunctionType): + elif isinstance(obj, method_type): # wrap the function in an exception handler method = _makeExceptionHandler(obj) - # add the wrpped function to the class + # add the wrapped function to the class setattr(cls, name, method) # check if we're on a property elif isinstance(obj, property): @@ -413,6 +412,13 @@ class _AccessibleMixin(object): @return: Accessible child @rtype: Accessibility.Accessible ''' + n = self.childCount + if index >= n: + raise IndexError + elif index < -n: + raise IndexError + elif index < 0: + index += n return self.getChildAtIndex(index) def __len__(self):