diff options
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java')
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java | 516 |
1 files changed, 449 insertions, 67 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java index 1ac9fa3539..68cc063c16 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java @@ -527,8 +527,23 @@ class AccessibleObject { return null; } -// gboolean atk_editable_text_set_run_attributes(AtkEditableText *text, AtkAttributeSet *attrib_set, gint start_offset, gint end_offset); - static long /*int*/ atkEditableText_set_run_attributes (long /*int*/ atkObject, long /*int*/ attrib_set, long /*int*/ start_offset, long /*int*/ end_offset) { + /** + * Sets the attributes for a specified range. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param attrib_set a pointer to an AtkAttributeSet + * @param start_offset start range in which to set attributes + * @param end_offset end of range in which to set attributes + * + * @return a long int representation of 1 for success, 0 otherwise + */ + static long /*int*/ atkEditableText_set_run_attributes (long /*int*/ atkObject, long /*int*/ attrib_set, + long /*int*/ start_offset, long /*int*/ end_offset) { AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -690,6 +705,19 @@ class AccessibleObject { return null; } + /** + * Sets text contents of the atkObject. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param string the text to be set + * + * @return a long int representation of 1 for success, 0 otherwise + */ static long /*int*/ atkEditableText_set_text_contents (long /*int*/ atkObject, long /*int*/ string) { AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { @@ -717,7 +745,25 @@ class AccessibleObject { return parentResult; } - static long /*int*/ atkEditableText_insert_text (long /*int*/ atkObject, long /*int*/ string, long /*int*/ string_length, long /*int*/ position) { + /** + * Inserts text at a given position. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param string the text to insert + * @param string_length the length of the text to insert, in bytes + * @param position the caller initializes this to the position at which to + * insert the text. After the call, it points at the position after the + * newly inserted text. + * + * @return a long int representation of 1 for success, 0 otherwise + */ + static long /*int*/ atkEditableText_insert_text (long /*int*/ atkObject, long /*int*/ string, + long /*int*/ string_length, long /*int*/ position) { AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -744,6 +790,21 @@ class AccessibleObject { return parentResult; } + /** + * Copies text from start_pos up to (but not including) end_pos + * into the clipboard. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param start_pos the start position of the text to be copied + * @param end_pos the end position of the text to be copied + * + * @return a long int representation of 1 for success, 0 otherwise + */ static long /*int*/ atkEditableText_copy_text(long /*int*/ atkObject, long /*int*/ start_pos, long /*int*/ end_pos) { AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { @@ -769,6 +830,21 @@ class AccessibleObject { return parentResult; } + /** + * Cuts text from start_pos up to (but not including) end_pos + * into the clipboard. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param start_pos the start position of the text to be cut + * @param end_pos the end position of the text to be cut + * + * @return a long int representation of 1 for success, 0 otherwise + */ static long /*int*/ atkEditableText_cut_text (long /*int*/ atkObject, long /*int*/ start_pos, long /*int*/ end_pos) { AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { @@ -794,6 +870,20 @@ class AccessibleObject { return parentResult; } + /** + * Delete text start_pos up to (but not including) end_pos. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param start_pos the start position of the text to be deleted + * @param end_pos the end position of the text to be deleted + * + * @return a long int representation of 1 for success, 0 otherwise + */ static long /*int*/ atkEditableText_delete_text (long /*int*/ atkObject, long /*int*/ start_pos, long /*int*/ end_pos) { AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { @@ -820,6 +910,19 @@ class AccessibleObject { return parentResult; } + /** + * Paste text from clipboard to specified position. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param position the position to paste + * + * @return a long int representation of 1 for success, 0 otherwise + */ static long /*int*/ atkEditableText_paste_text (long /*int*/ atkObject, long /*int*/ position) { AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { @@ -2272,9 +2375,19 @@ class AccessibleObject { return parentResult; } - // TODO_a11y: refactor this - static AtkTextIface getTextIface (long /*int*/ atkObject) { - if (OS.g_type_is_a (OS.g_type_parent (OS.G_OBJECT_TYPE (atkObject)), ATK.ATK_TYPE_TEXT())) { + /** + * Fills a Java AtkTextIface struct with that of the parent class. + * This is a Java implementation of what is referred to in GObject as "chaining up". + * See: https://developer.gnome.org/gobject/stable/howto-gobject-chainup.html + * + * @param atkObject a pointer to the current AtkObject + * + * @return an AtkTextIface Java object representing the interface struct of atkObject's + * parent + */ + static AtkTextIface getParentTextIface (long /*int*/ atkObject) { + long /*int*/ type = OS.GTK3 ? OS.swt_fixed_accessible_get_type() : OS.G_OBJECT_TYPE (atkObject); + if (OS.g_type_is_a (OS.g_type_parent (type), ATK.ATK_TYPE_TEXT())) { AtkTextIface iface = new AtkTextIface (); ATK.memmove (iface, OS.g_type_interface_peek_parent (ATK.ATK_TEXT_GET_IFACE (atkObject))); return iface; @@ -2282,8 +2395,43 @@ class AccessibleObject { return null; } - static long /*int*/ atkText_get_character_extents (long /*int*/ atkObject, long /*int*/ offset, long /*int*/ x, long /*int*/ y, long /*int*/ width, long /*int*/ height, long /*int*/ coords) { - if (DEBUG) print ("-->atkText_get_character_extents"); + static String getString (long /*int*/ strPtr) { + int length = C.strlen (strPtr); + byte [] buffer = new byte [length]; + C.memmove (buffer, strPtr, length); + return new String (Converter.mbcsToWcs (buffer)); + } + + static long /*int*/ getStringPtr (String str) { + byte [] buffer = Converter.wcsToMbcs(str != null ? str : "", true); + long /*int*/ ptr = OS.g_malloc(buffer.length); + C.memmove(ptr, buffer, buffer.length); + return ptr; + } + + /** + * Get the bounding box containing the glyph representing the character + * at a particular text offset. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param offset the offset of the text character for which bounding info + * is required + * @param x the pointer for the x coordinate of the bounding box + * @param y the pointer for the y coordinate of the bounding box + * @param width the pointer for the width of the bounding box + * @param height the pointer for the height of the bounding box + * @param coords long int representing the AtkCoordType for the coordinates + * + * @return a long int representation of 0 indicating that the method completed + * successfully + */ + static long /*int*/ atkText_get_character_extents (long /*int*/ atkObject, long /*int*/ offset, + long /*int*/ x, long /*int*/ y, long /*int*/ width, long /*int*/ height, long /*int*/ coords) { AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -2310,29 +2458,34 @@ class AccessibleObject { return 0; } } - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.get_character_extents != 0) { OS.call (iface.get_character_extents, atkObject, offset, x, y, width, height, coords); } return 0; } - static String getString (long /*int*/ strPtr) { - int length = C.strlen (strPtr); - byte [] buffer = new byte [length]; - C.memmove (buffer, strPtr, length); - return new String (Converter.mbcsToWcs (buffer)); - } - - static long /*int*/ getStringPtr (String str) { - byte [] buffer = Converter.wcsToMbcs(str != null ? str : "", true); - long /*int*/ ptr = OS.g_malloc(buffer.length); - C.memmove(ptr, buffer, buffer.length); - return ptr; - } - - static long /*int*/ atkText_get_range_extents (long /*int*/ atkObject, long /*int*/ start_offset, long /*int*/ end_offset, long /*int*/ coord_type, long /*int*/ rect) { - if (DEBUG) print ("-->atkText_get_range_extents"); + /** + * Get the bounding box for text within the specified range. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param start_offset the offset of the first text character for which + * bounding info is required + * @param end_offset the offset of the last text character after the last + * character for which boundary info is required + * @param coord_type long int representing the AtkCoordType for the coordinates + * @param rect a pointer to the AtkTextRectangle which is filled by this function + * + * @return a long int representation of 0 indicating that the method completed + * successfully + */ + static long /*int*/ atkText_get_range_extents (long /*int*/ atkObject, long /*int*/ start_offset, + long /*int*/ end_offset, long /*int*/ coord_type, long /*int*/ rect) { AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -2361,15 +2514,31 @@ class AccessibleObject { return 0; } } - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.get_range_extents != 0) { ATK.call (iface.get_range_extents, atkObject, start_offset, end_offset, coord_type, rect); } return 0; } - static long /*int*/ atkText_get_run_attributes (long /*int*/ atkObject, long /*int*/ offset, long /*int*/ start_offset, long /*int*/ end_offset) { - if (DEBUG) print ("-->atkText_get_run_attributes"); + /** + * Creates an AtkAttributeSet which consists of the attributes explicitly + * set at the position offset in the text. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param offset the offset at which to get the attributes + * @param start_offset the address to put the start offset of the range + * @param end_offset the address to put the end offset of the range + * + * @return a pointer to the AtkAttributeSet created + */ + static long /*int*/ atkText_get_run_attributes (long /*int*/ atkObject, long /*int*/ offset, + long /*int*/ start_offset, long /*int*/ end_offset) { AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -2495,15 +2664,31 @@ class AccessibleObject { } } long /*int*/ parentResult = 0; - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.get_run_attributes != 0) { parentResult = OS.call (iface.get_run_attributes, atkObject, offset, start_offset, end_offset); } return parentResult; } - static long /*int*/ atkText_get_offset_at_point (long /*int*/ atkObject, long /*int*/ x, long /*int*/ y, long /*int*/ coords) { - if (DEBUG) print ("-->atkText_get_offset_at_point"); + /** + * Gets the offset of the character located at coordinates x and y. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param x screen x-position of the character + * @param y screen y-position of the character + * @param coords long int representing the AtkCoordType for the coordinates + * + * @return the offset to the character which is located at the specified + * x and y coordinates + */ + static long /*int*/ atkText_get_offset_at_point (long /*int*/ atkObject, long /*int*/ x, + long /*int*/ y, long /*int*/ coords) { AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -2527,15 +2712,28 @@ class AccessibleObject { } } long /*int*/ parentResult = 0; - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.get_offset_at_point != 0) { parentResult = OS.call (iface.get_offset_at_point, atkObject, x, y, coords); } return parentResult; } + /** + * Adds a selection bounded by the specified offsets. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param start_offset the start position of the selected region + * @param end_offset the offset of the first character after the selected region + * + * @return a long int representation of 1 for success, 0 otherwise + */ static long /*int*/ atkText_add_selection (long /*int*/ atkObject, long /*int*/ start_offset, long /*int*/ end_offset) { - if (DEBUG) print ("-->atkText_add_selection"); AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -2553,15 +2751,27 @@ class AccessibleObject { } } long /*int*/ parentResult = 0; - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.add_selection != 0) { parentResult = ATK.call (iface.add_selection, atkObject, start_offset, end_offset); } return parentResult; } + /** + * Removes the specified selection. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param selection_num the selection number. + * + * @return a long int representation of 1 for success, 0 otherwise + */ static long /*int*/ atkText_remove_selection (long /*int*/ atkObject, long /*int*/ selection_num) { - if (DEBUG) print ("-->atkText_remove_selection"); AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -2578,15 +2788,27 @@ class AccessibleObject { } } long /*int*/ parentResult = 0; - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.remove_selection != 0) { parentResult = ATK.call (iface.remove_selection, atkObject, selection_num); } return parentResult; } + /** + * Sets the caret (cursor) position to the specified offset. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param offset the position + * + * @return a long int representation of 1 for success, 0 otherwise + */ static long /*int*/ atkText_set_caret_offset (long /*int*/ atkObject, long /*int*/ offset) { - if (DEBUG) print ("-->atkText_set_caret_offset"); AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -2602,15 +2824,30 @@ class AccessibleObject { return ACC.OK.equals(event.result) ? 1 : 0; } } - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.set_caret_offset != 0) { return ATK.call (iface.set_caret_offset, atkObject, offset); } return 0; } - static long /*int*/ atkText_set_selection (long /*int*/ atkObject, long /*int*/ selection_num, long /*int*/ start_offset, long /*int*/ end_offset) { - if (DEBUG) print ("-->atkText_set_selection"); + /** + * Changes the start and end offset of the specified selection. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param selection_num the selection number + * @param start_offset the new start position of the selection + * @param end_offset the new end position of the selection + * + * @return a long int representation of 1 for success, 0 otherwise + */ + static long /*int*/ atkText_set_selection (long /*int*/ atkObject, long /*int*/ selection_num, + long /*int*/ start_offset, long /*int*/ end_offset) { AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -2629,18 +2866,29 @@ class AccessibleObject { } } long /*int*/ parentResult = 0; - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.set_selection != 0) { parentResult = OS.call (iface.set_selection, atkObject, selection_num, start_offset, end_offset); } return parentResult; } + /** + * Gets the offset position of the caret (cursor). + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * + * @return a long int representation of the offset position of the caret (cursor) + */ static long /*int*/ atkText_get_caret_offset (long /*int*/ atkObject) { - if (DEBUG) print ("-->atkText_get_caret_offset"); AccessibleObject object = getAccessibleObject (atkObject); long /*int*/ parentResult = 0; - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.get_caret_offset != 0) { parentResult = ATK.call (iface.get_caret_offset, atkObject); } @@ -2672,8 +2920,26 @@ class AccessibleObject { return parentResult; } - static long /*int*/ atkText_get_bounded_ranges (long /*int*/ atkObject, long /*int*/ rect, long /*int*/ coord_type, long /*int*/ x_clip_type, long /*int*/ y_clip_type) { - if (DEBUG) print ("-->atkText_get_bounded_ranges"); + /** + * Get the ranges of text in the specified bounding box. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param rect the AtkTextRectangle giving the dimensions of the bounding box + * @param coord_type long int representing the AtkCoordType for the coordinates + * @param x_clip_type a long int representing the AtkTextClipType of the + * horizontal clip + * @param y_clip_type a long int representing the AtkTextClipType of the + * vertical clip + * + * @return a pointer to the array of AtkTextRanges + */ + static long /*int*/ atkText_get_bounded_ranges (long /*int*/ atkObject, long /*int*/ rect, + long /*int*/ coord_type, long /*int*/ x_clip_type, long /*int*/ y_clip_type) { AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -2726,15 +2992,27 @@ class AccessibleObject { } } long /*int*/ parentResult = 0; - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.get_bounded_ranges != 0) { parentResult = ATK.call (iface.get_bounded_ranges, atkObject); } return parentResult; } + /** + * Gets the specified text. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param offset position + * + * @return a long int representing the character at offset + */ static long /*int*/ atkText_get_character_at_offset (long /*int*/ atkObject, long /*int*/ offset) { - if (DEBUG) print ("-->atkText_get_character_at_offset"); AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -2755,15 +3033,26 @@ class AccessibleObject { String text = object.getText (); if (text != null && text.length() > offset) return text.charAt ((int)/*64*/offset); } - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.get_character_at_offset != 0) { return ATK.call (iface.get_character_at_offset, atkObject, offset); } return 0; } + /** + * Gets the character count. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * + * @return the number of characters + */ static long /*int*/ atkText_get_character_count (long /*int*/ atkObject) { - if (DEBUG) print ("-->atkText_get_character_count"); AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -2780,15 +3069,26 @@ class AccessibleObject { String text = object.getText (); if (text != null) return text.length (); } - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.get_character_count != 0) { return ATK.call (iface.get_character_count, atkObject); } return 0; } + /** + * Gets the number of selected regions. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * + * @return the number of selected regions, or -1 if a failure occurred + */ static long /*int*/ atkText_get_n_selections (long /*int*/ atkObject) { - if (DEBUG) print ("-->atkText_get_n_selections"); AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -2815,20 +3115,35 @@ class AccessibleObject { } } long /*int*/ parentResult = 0; - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.get_n_selections != 0) { parentResult = ATK.call (iface.get_n_selections, atkObject); } return parentResult; } - static long /*int*/ atkText_get_selection (long /*int*/ atkObject, long /*int*/ selection_num, long /*int*/ start_offset, long /*int*/ end_offset) { - if (DEBUG) print ("-->atkText_get_selection"); + /** + * Gets the text from the specified selection. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param selection_num the selection number + * @param start_offset passes back the start position of the selected region + * @param end_offset passes back the end position of the selected region + * + * @return a pointer to the newly allocated string containing the selected text + */ + static long /*int*/ atkText_get_selection (long /*int*/ atkObject, long /*int*/ selection_num, + long /*int*/ start_offset, long /*int*/ end_offset) { AccessibleObject object = getAccessibleObject (atkObject); long /*int*/ parentResult = 0; C.memmove (start_offset, new int[] {0}, 4); C.memmove (end_offset, new int[] {0}, 4); - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.get_selection != 0) { parentResult = OS.call (iface.get_selection, atkObject, selection_num, start_offset, end_offset); } @@ -2891,8 +3206,22 @@ class AccessibleObject { return parentResult; } + /** + * Gets the specified text. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param start_offset start position + * @param end_offset end position, or -1 for the end of the string + * + * @return a pointer to the newly allocated string containing the text + * from start_offset up to (but not including) end_offset + */ static long /*int*/ atkText_get_text (long /*int*/ atkObject, long /*int*/ start_offset, long /*int*/ end_offset) { - if (DEBUG) print ("-->atkText_get_text: " + atkObject + " " + start_offset + "," + end_offset); AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -2921,15 +3250,34 @@ class AccessibleObject { return getStringPtr (text); } } - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.get_text != 0) { return ATK.call (iface.get_text, atkObject, start_offset, end_offset); } return 0; } - static long /*int*/ atkText_get_text_after_offset (long /*int*/ atkObject, long /*int*/ offset_value, long /*int*/ boundary_type, long /*int*/ start_offset, long /*int*/ end_offset) { - if (DEBUG) print ("-->atkText_get_text_after_offset"); + // TODO_a11y: implement atk_text_get_string_at_offset() once Orca is updated + + /** + * Gets the specified text. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param offset position + * @param boundary_type the AtkTextBoundary + * @param start_offset the start offset of the returned string + * @param end_offset the end_offset of the first character after the returned string + * + * @return a pointer to the newly allocated string containing + * the text after offset bounded by the specified boundary_type + */ + static long /*int*/ atkText_get_text_after_offset (long /*int*/ atkObject, long /*int*/ offset_value, + long /*int*/ boundary_type, long /*int*/ start_offset, long /*int*/ end_offset) { AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -3169,15 +3517,32 @@ class AccessibleObject { return getStringPtr (text); } } - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.get_text_after_offset != 0) { return ATK.call (iface.get_text_after_offset, atkObject, offset_value, boundary_type, start_offset, end_offset); } return 0; } - static long /*int*/ atkText_get_text_at_offset (long /*int*/ atkObject, long /*int*/ offset_value, long /*int*/ boundary_type, long /*int*/ start_offset, long /*int*/ end_offset) { - if (DEBUG) print ("-->atkText_get_text_at_offset: " + offset_value + " start: " + start_offset + " end: " + end_offset); + /** + * Gets the specified text. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param offset position + * @param boundary_type the AtkTextBoundary + * @param start_offset the start offset of the returned string + * @param end_offset the end_offset of the first character after the returned string + * + * @return a pointer to the newly allocated string containing the + * text at offset bounded by the specified boundary_type + */ + static long /*int*/ atkText_get_text_at_offset (long /*int*/ atkObject, long /*int*/ offset_value, + long /*int*/ boundary_type, long /*int*/ start_offset, long /*int*/ end_offset) { AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -3360,15 +3725,32 @@ class AccessibleObject { return getStringPtr (text); } } - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.get_text_at_offset != 0) { return ATK.call (iface.get_text_at_offset, atkObject, offset_value, boundary_type, start_offset, end_offset); } return 0; } - static long /*int*/ atkText_get_text_before_offset (long /*int*/ atkObject, long /*int*/ offset_value, long /*int*/ boundary_type, long /*int*/ start_offset, long /*int*/ end_offset) { - if (DEBUG) print ("-->atkText_get_text_before_offset"); + /** + * Gets the specified text. + * + * This is the implementation of an ATK function which + * queries the Accessible listeners at the Java level. On GTK3 the ATK + * interfaces are implemented in os_custom.c and access this method via + * JNI. + * + * @param atkObject a pointer to the current AtkObject + * @param offset position + * @param boundary_type the AtkTextBoundary + * @param start_offset the start offset of the returned string + * @param end_offset the end_offset of the first character after the returned string + * + * @return a pointer to the newly allocated string containing + * the text before offset bounded by the specified boundary_type + */ + static long /*int*/ atkText_get_text_before_offset (long /*int*/ atkObject, long /*int*/ offset_value, + long /*int*/ boundary_type, long /*int*/ start_offset, long /*int*/ end_offset) { AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; @@ -3556,7 +3938,7 @@ class AccessibleObject { return getStringPtr (text); } } - AtkTextIface iface = getTextIface (atkObject); + AtkTextIface iface = getParentTextIface (atkObject); if (iface != null && iface.get_text_before_offset != 0) { return ATK.call (iface.get_text_before_offset, atkObject, offset_value, boundary_type, start_offset, end_offset); } @@ -3735,7 +4117,7 @@ class AccessibleObject { int length = size(listeners); if (length > 0) { String parentText = ""; //$NON-NLS-1$ - AtkTextIface iface = getTextIface (atkHandle); + AtkTextIface iface = getParentTextIface (atkHandle); if (iface != null && iface.get_character_count != 0) { long /*int*/ characterCount = ATK.call (iface.get_character_count, atkHandle); if (characterCount > 0 && iface.get_text != 0) { |