< prev index next >
src/jdk.accessibility/windows/classes/com/sun/java/accessibility/internal/AccessBridge.java
Print this page
@@ -1455,10 +1455,28 @@
}
debugString("[ERROR]: getAccessibleStatesStringFromContext; ac = null");
return null;
}
+ private int get_nonVisibleChildrenCountBeforeIndex(AccessibleContext parentAC, int beforeIndex) {
+ if (parentAC == null || beforeIndex < 0 || beforeIndex >= parentAC.getAccessibleChildrenCount()) {
+ return 0;
+ } else {
+ int childrenCount = parentAC.getAccessibleChildrenCount();
+ int nonVisibleChildrenCount = 0;
+ if (beforeIndex >= childrenCount) {
+ beforeIndex = childrenCount - 1;
+ }
+ for (int i = 0; i <= beforeIndex; i++) {
+ if (!parentAC.getAccessibleChild(i).getAccessibleContext().getAccessibleStateSet().contains(AccessibleState.SHOWING)) {
+ nonVisibleChildrenCount++;
+ }
+ }
+ return nonVisibleChildrenCount;
+ }
+ }
+
/**
* returns the AccessibleParent from an AccessibleContext
*/
private AccessibleContext getAccessibleParentFromContext(final AccessibleContext ac) {
if (ac==null)
@@ -1485,11 +1503,16 @@
if (ac==null)
return -1;
return InvocationUtils.invokeAndWait(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
- return ac.getAccessibleIndexInParent();
+ int indexInParent = ac.getAccessibleIndexInParent();
+ Accessible parent = ac.getAccessibleParent();
+ if (parent != null) {
+ indexInParent -= get_nonVisibleChildrenCountBeforeIndex(parent.getAccessibleContext(), indexInParent);
+ }
+ return indexInParent;
}
}, ac);
}
/**
@@ -1499,11 +1522,12 @@
if (ac==null)
return -1;
return InvocationUtils.invokeAndWait(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
- return ac.getAccessibleChildrenCount();
+ int childrenCount = ac.getAccessibleChildrenCount();
+ return childrenCount - get_nonVisibleChildrenCountBeforeIndex(ac, childrenCount);
}
}, ac);
}
/**
@@ -1535,11 +1559,12 @@
if (table == null) {
return InvocationUtils.invokeAndWait(new Callable<AccessibleContext>() {
@Override
public AccessibleContext call() throws Exception {
- Accessible a = ac.getAccessibleChild(index);
+ int visibleIndex = index + get_nonVisibleChildrenCountBeforeIndex(ac, index);
+ Accessible a = ac.getAccessibleChild(visibleIndex);
if (a != null) {
return a.getAccessibleContext();
}
return null;
}
@@ -3515,11 +3540,22 @@
AccessibleRelationSet ars = ac.getAccessibleRelationSet();
if (ars != null) {
AccessibleRelation[] relations = ars.toArray();
if (relations != null && i >= 0 && i < relations.length) {
Object[] targets = relations[i].getTarget();
- return targets.length;
+ if (targets != null) {
+ int nonVisibleTargets = 0;
+ for (Object target : targets) {
+ if (target instanceof Accessible) {
+ AccessibleContext ac = ((Accessible) target).getAccessibleContext();
+ if (!ac.getAccessibleStateSet().contains(AccessibleState.SHOWING)) {
+ nonVisibleTargets++;
+ }
+ }
+ }
+ return targets.length - nonVisibleTargets;
+ }
}
}
}
return -1;
}
@@ -3530,22 +3566,22 @@
* returns the jth target in the ith relation in the AccessibleContext's
* AccessibleRelationSet
*/
private AccessibleContext getAccessibleRelationTarget(final AccessibleContext ac,
final int i, final int j) {
- debugString("[INFO]: ***** getAccessibleRelationTarget");
+ debugString("[INFO]: ***** getAccessibleRelationTarget: get target[" + j + "] from relation[" + i + "] ");
return InvocationUtils.invokeAndWait(new Callable<AccessibleContext>() {
@Override
public AccessibleContext call() throws Exception {
if (ac != null) {
AccessibleRelationSet ars = ac.getAccessibleRelationSet();
if (ars != null) {
AccessibleRelation[] relations = ars.toArray();
if (relations != null && i >= 0 && i < relations.length) {
Object[] targets = relations[i].getTarget();
if (targets != null && j >= 0 & j < targets.length) {
- Object o = targets[j];
+ Object o = targets[j + get_NonVisibleTargetCountBeforeIndex(targets, j)];
if (o instanceof Accessible) {
return ((Accessible) o).getAccessibleContext();
}
}
}
@@ -3554,10 +3590,26 @@
return null;
}
}, ac);
}
+ private int get_NonVisibleTargetCountBeforeIndex(Object[] targets, int indexBefore) {
+ if (indexBefore == 0 || indexBefore >= targets.length) {
+ return 0;
+ }
+ int nonVisibleTargetsCount = 0;
+ for (int i = 0 ; i <= indexBefore; i++) {
+ if (targets[i] instanceof Accessible) {
+ AccessibleContext ac = ((Accessible) targets[i]).getAccessibleContext();
+ if (ac != null && !ac.getAccessibleStateSet().contains(AccessibleState.SHOWING)) {
+ nonVisibleTargetsCount++;
+ }
+ }
+ }
+ return nonVisibleTargetsCount;
+ }
+
// ========= AccessibleHypertext =========
private Map<AccessibleHypertext, AccessibleContext> hyperTextContextMap = new WeakHashMap<>();
private Map<AccessibleHyperlink, AccessibleContext> hyperLinkContextMap = new WeakHashMap<>();
< prev index next >