diff options
author | Carolyn MacLeod <carolyn> | 2010-05-20 19:39:07 +0000 |
---|---|---|
committer | Carolyn MacLeod <carolyn> | 2010-05-20 19:39:07 +0000 |
commit | f5b51f9fa78317c0ef2a0858063080d8888cb01d (patch) | |
tree | 4bed541f49f95e9d90eec5b2a69129667409f2b0 /bundles/org.eclipse.swt/Eclipse SWT Accessibility | |
parent | fe5fa54e22f97eef927dafab577effaeba080c1d (diff) | |
download | eclipse.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.java | 84 |
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); |