summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT Accessibility
diff options
context:
space:
mode:
authorCarolyn MacLeod <carolyn>2010-05-20 19:39:07 +0000
committerCarolyn MacLeod <carolyn>2010-05-20 19:39:07 +0000
commitf5b51f9fa78317c0ef2a0858063080d8888cb01d (patch)
tree4bed541f49f95e9d90eec5b2a69129667409f2b0 /bundles/org.eclipse.swt/Eclipse SWT Accessibility
parentfe5fa54e22f97eef927dafab577effaeba080c1d (diff)
downloadeclipse.platform.swt-f5b51f9fa78317c0ef2a0858063080d8888cb01d.tar.gz
eclipse.platform.swt-f5b51f9fa78317c0ef2a0858063080d8888cb01d.tar.xz
eclipse.platform.swt-f5b51f9fa78317c0ef2a0858063080d8888cb01d.zip
Bug 313071 - AccessibleTextExtendedListener.getText line/word offset problems
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT Accessibility')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java84
1 files changed, 81 insertions, 3 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java
index ac4f5ad436..9463775fee 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java
@@ -4008,7 +4008,7 @@ public class Accessible {
AccessibleTextEvent event = new AccessibleTextEvent(this);
int charCount = getCharacterCount();
event.start = offset == COM.IA2_TEXT_OFFSET_LENGTH ? charCount : offset == COM.IA2_TEXT_OFFSET_CARET ? getCaretOffset() : offset;
- event.end = event.start == charCount ? event.start : event.start + 1;
+ event.end = event.start;
event.count = -1;
switch (boundaryType) {
case COM.IA2_TEXT_BOUNDARY_CHAR: event.type = ACC.TEXT_BOUNDARY_CHAR; break;
@@ -4018,10 +4018,36 @@ public class Accessible {
case COM.IA2_TEXT_BOUNDARY_LINE: event.type = ACC.TEXT_BOUNDARY_LINE; break;
default: return COM.E_INVALIDARG;
}
+ int eventStart = event.start;
+ int eventEnd = event.end;
for (int i = 0; i < accessibleTextExtendedListeners.size(); i++) {
AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i);
listener.getText(event);
}
+ if (event.end < charCount) {
+ switch (boundaryType) {
+ case COM.IA2_TEXT_BOUNDARY_WORD:
+ case COM.IA2_TEXT_BOUNDARY_SENTENCE:
+ case COM.IA2_TEXT_BOUNDARY_PARAGRAPH:
+ case COM.IA2_TEXT_BOUNDARY_LINE:
+ int start = event.start;
+ event.start = eventStart;
+ event.end = eventEnd;
+ event.count = 0;
+ for (int i = 0; i < accessibleTextExtendedListeners.size(); i++) {
+ AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i);
+ listener.getText(event);
+ }
+ event.end = event.start;
+ event.start = start;
+ event.type = COM.IA2_TEXT_BOUNDARY_ALL;
+ event.count = 0;
+ for (int i = 0; i < accessibleTextExtendedListeners.size(); i++) {
+ AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i);
+ listener.getText(event);
+ }
+ }
+ }
if (DEBUG) print(this + ".IAccessibleText::get_textBeforeOffset(" + offset + ") returning start=" + event.start + ", end=" + event.end + " " + event.result + hresult(event.result == null ? COM.S_FALSE : COM.S_OK));
COM.MoveMemory(pStartOffset, new int [] { event.start }, 4);
COM.MoveMemory(pEndOffset, new int [] { event.end }, 4);
@@ -4035,7 +4061,7 @@ public class Accessible {
AccessibleTextEvent event = new AccessibleTextEvent(this);
int charCount = getCharacterCount();
event.start = offset == COM.IA2_TEXT_OFFSET_LENGTH ? charCount : offset == COM.IA2_TEXT_OFFSET_CARET ? getCaretOffset() : offset;
- event.end = event.start == charCount ? event.start : event.start + 1;
+ event.end = event.start;
event.count = 1;
switch (boundaryType) {
case COM.IA2_TEXT_BOUNDARY_CHAR: event.type = ACC.TEXT_BOUNDARY_CHAR; break;
@@ -4045,10 +4071,36 @@ public class Accessible {
case COM.IA2_TEXT_BOUNDARY_LINE: event.type = ACC.TEXT_BOUNDARY_LINE; break;
default: return COM.E_INVALIDARG;
}
+ int eventStart = event.start;
+ int eventEnd = event.end;
for (int i = 0; i < accessibleTextExtendedListeners.size(); i++) {
AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i);
listener.getText(event);
}
+ if (event.end < charCount) {
+ switch (boundaryType) {
+ case COM.IA2_TEXT_BOUNDARY_WORD:
+ case COM.IA2_TEXT_BOUNDARY_SENTENCE:
+ case COM.IA2_TEXT_BOUNDARY_PARAGRAPH:
+ case COM.IA2_TEXT_BOUNDARY_LINE:
+ int start = event.start;
+ event.start = eventStart;
+ event.end = eventEnd;
+ event.count = 2;
+ for (int i = 0; i < accessibleTextExtendedListeners.size(); i++) {
+ AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i);
+ listener.getText(event);
+ }
+ event.end = event.start;
+ event.start = start;
+ event.type = COM.IA2_TEXT_BOUNDARY_ALL;
+ event.count = 0;
+ for (int i = 0; i < accessibleTextExtendedListeners.size(); i++) {
+ AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i);
+ listener.getText(event);
+ }
+ }
+ }
if (DEBUG) print(this + ".IAccessibleText::get_textAfterOffset(" + offset + ") returning start=" + event.start + ", end=" + event.end + " " + event.result + hresult(event.result == null ? COM.S_FALSE : COM.S_OK));
COM.MoveMemory(pStartOffset, new int [] { event.start }, 4);
COM.MoveMemory(pEndOffset, new int [] { event.end }, 4);
@@ -4062,7 +4114,7 @@ public class Accessible {
AccessibleTextEvent event = new AccessibleTextEvent(this);
int charCount = getCharacterCount();
event.start = offset == COM.IA2_TEXT_OFFSET_LENGTH ? charCount : offset == COM.IA2_TEXT_OFFSET_CARET ? getCaretOffset() : offset;
- event.end = event.start == charCount ? event.start : event.start + 1;
+ event.end = event.start;
event.count = 0;
switch (boundaryType) {
case COM.IA2_TEXT_BOUNDARY_CHAR: event.type = ACC.TEXT_BOUNDARY_CHAR; break;
@@ -4079,10 +4131,36 @@ public class Accessible {
}
default: return COM.E_INVALIDARG;
}
+ int eventStart = event.start;
+ int eventEnd = event.end;
for (int i = 0; i < accessibleTextExtendedListeners.size(); i++) {
AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i);
listener.getText(event);
}
+ if (event.end < charCount) {
+ switch (boundaryType) {
+ case COM.IA2_TEXT_BOUNDARY_WORD:
+ case COM.IA2_TEXT_BOUNDARY_SENTENCE:
+ case COM.IA2_TEXT_BOUNDARY_PARAGRAPH:
+ case COM.IA2_TEXT_BOUNDARY_LINE:
+ int start = event.start;
+ event.start = eventStart;
+ event.end = eventEnd;
+ event.count = 1;
+ for (int i = 0; i < accessibleTextExtendedListeners.size(); i++) {
+ AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i);
+ listener.getText(event);
+ }
+ event.end = event.start;
+ event.start = start;
+ event.type = COM.IA2_TEXT_BOUNDARY_ALL;
+ event.count = 0;
+ for (int i = 0; i < accessibleTextExtendedListeners.size(); i++) {
+ AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i);
+ listener.getText(event);
+ }
+ }
+ }
if (DEBUG) print(this + ".IAccessibleText::get_textAtOffset(" + offset + ") returning start=" + event.start + ", end=" + event.end + " " + event.result + hresult(event.result == null ? COM.S_FALSE : COM.S_OK));
COM.MoveMemory(pStartOffset, new int [] { event.start }, 4);
COM.MoveMemory(pEndOffset, new int [] { event.end }, 4);