Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
8293795: [Accessibility] [Win] [Narrator] Exceptions When Deleting Te…
…xt with Continuous Key Press in TextArea and TextField

Backport-of: cc00c8d
  • Loading branch information
arapte committed Nov 23, 2022
1 parent 3a79a15 commit b5b112a
Showing 1 changed file with 20 additions and 10 deletions.
Expand Up @@ -91,6 +91,17 @@ void dispose() {
peer = 0L;
}

private void validateRange(String text) {
if (text == null) {
start = end = 0;
return;
}

int length = text.length();
start = Math.max(0, Math.min(start, length));
end = Math.max(start, Math.min(end, length));
}

void setRange(int start, int end) {
this.start = start;
this.end = end;
Expand All @@ -105,7 +116,7 @@ int getEnd() {
}

@Override public String toString() {
return "Range(start: "+start+", end: "+end+", id: " + id + ")";
return "Range(start: " + start + ", end: " + end + ", id: " + id + ")";
}

private Object getAttribute(AccessibleAttribute attribute, Object... parameters) {
Expand Down Expand Up @@ -149,6 +160,7 @@ private void ExpandToEnclosingUnit(int unit) {
if (text == null) return;
int length = text.length();
if (length == 0) return;
validateRange(text);

switch (unit) {
case TextUnit_Character: {
Expand Down Expand Up @@ -177,7 +189,6 @@ private void ExpandToEnclosingUnit(int unit) {
break;
}
case TextUnit_Line: {
if (start > length) start = length;
Integer lineIndex = (Integer)getAttribute(LINE_FOR_OFFSET, start);
Integer lineStart = (Integer)getAttribute(LINE_START, lineIndex);
Integer lineEnd = (Integer)getAttribute(LINE_END, lineIndex);
Expand Down Expand Up @@ -221,8 +232,7 @@ private void ExpandToEnclosingUnit(int unit) {
}

/* Always ensure range consistency */
start = Math.max(0, Math.min(start, length));
end = Math.max(start, Math.min(end, length));
validateRange(text);
}

private long FindAttribute(int attributeId, WinVariant val, boolean backward) {
Expand Down Expand Up @@ -308,6 +318,7 @@ private double[] GetBoundingRectangles() {
String text = (String)getAttribute(TEXT);
if (text == null) return null;
int length = text.length();
validateRange(text);

/* Narrator will not focus an empty text control if the bounds are NULL */
if (length == 0) return new double[0];
Expand Down Expand Up @@ -350,6 +361,7 @@ private long GetEnclosingElement() {
private String GetText(int maxLength) {
String text = (String)getAttribute(TEXT);
if (text == null) return null;
validateRange(text);
int endOffset = maxLength != -1 ? Math.min(end, start + maxLength) : end;
// System.out.println("+GetText [" + text.substring(start, endOffset)+"]");
return text.substring(start, endOffset);
Expand Down Expand Up @@ -454,8 +466,7 @@ private int Move(int unit, final int requestedCount) {
}

/* Always ensure range consistency */
start = Math.max(0, Math.min(start, length));
end = Math.max(start, Math.min(end, length));
validateRange(text);
return actualCount;
}

Expand All @@ -464,6 +475,7 @@ private int MoveEndpointByUnit(int endpoint, int unit, final int requestedCount)
String text = (String)getAttribute(TEXT);
if (text == null) return 0;
int length = text.length();
validateRange(text);

int actualCount = 0;
int offset = endpoint == TextPatternRangeEndpoint_Start ? start : end;
Expand Down Expand Up @@ -559,8 +571,7 @@ private int MoveEndpointByUnit(int endpoint, int unit, final int requestedCount)
}

/* Always ensure range consistency */
start = Math.max(0, Math.min(start, length));
end = Math.max(start, Math.min(end, length));
validateRange(text);
return actualCount;
}

Expand All @@ -580,8 +591,7 @@ private void MoveEndpointByRange(int endpoint, WinTextRangeProvider targetRange,
}

/* Always ensure range consistency */
start = Math.max(0, Math.min(start, length));
end = Math.max(start, Math.min(end, length));
validateRange(text);
}

private void Select() {
Expand Down

1 comment on commit b5b112a

@openjdk-notifier
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.