summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java
diff options
context:
space:
mode:
authorCarolyn MacLeod <carolyn>2010-10-13 15:05:27 +0000
committerCarolyn MacLeod <carolyn>2010-10-13 15:05:27 +0000
commitbe5aa41634cde1e04ae4d0c10fd398906519cd0c (patch)
treea7bb15c4121e86e08e6d960250c5901803df672f /bundles/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java
parent9c7d16bb18d3860d95141caf8c4f01bb13563f7e (diff)
downloadeclipse.platform.swt-be5aa41634cde1e04ae4d0c10fd398906519cd0c.tar.gz
eclipse.platform.swt-be5aa41634cde1e04ae4d0c10fd398906519cd0c.tar.xz
eclipse.platform.swt-be5aa41634cde1e04ae4d0c10fd398906519cd0c.zip
Bug 324005 - Add IAccessible2EditableText support to Eclipse
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.java205
1 files changed, 205 insertions, 0 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 ec4c6466e6..6d8092aa38 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
@@ -400,6 +400,211 @@ class AccessibleObject {
return parentResult;
}
+
+ static AtkEditableTextIface getEditableTextIface (int /*long*/ atkObject) {
+ if (ATK.g_type_is_a (OS.g_type_parent (OS.G_OBJECT_TYPE (atkObject)), ATK.ATK_TYPE_EDITABLE_TEXT())) {
+ AtkEditableTextIface iface = new AtkEditableTextIface ();
+ ATK.memmove (iface, ATK.g_type_interface_peek_parent (ATK.ATK_EDITABLETEXT_GET_IFACE (atkObject)));
+ return iface;
+ }
+ return null;
+ }
+
+// gboolean atk_editable_text_set_run_attributes(AtkEditableText *text, AtkAttributeSet *attrib_set, gint start_offset, gint end_offset);
+ static int /*long*/ atkEditableText_set_run_attributes (int /*long*/ atkObject, int /*long*/ attrib_set, int /*long*/ start_offset, int /*long*/ end_offset) {
+ if (DEBUG) print ("-->atkEditableText_set_run_attributes");
+ AccessibleObject object = getAccessibleObject (atkObject);
+ if (object != null) {
+ Accessible accessible = object.accessible;
+ Vector listeners = accessible.accessibleEditableTextListeners;
+ int length = listeners.size();
+ if (length > 0) {
+ AccessibleTextAttributeEvent event = new AccessibleTextAttributeEvent(accessible);
+ event.start = (int)/*64*/start_offset;
+ event.end = (int)/*64*/end_offset;
+ // TODO: get attrib_set and set event.textStyle and event.attributes (see atkText_get_run_attributes)
+ for (int i = 0; i < length; i++) {
+ AccessibleEditableTextListener listener = (AccessibleEditableTextListener) listeners.elementAt(i);
+ listener.setTextAttributes(event);
+ }
+ // TODO: dispose event.textStyle font/foreground/background
+ return ACC.OK.equals(event.result) ? 1 : 0;
+ }
+ }
+ int /*long*/ parentResult = 0;
+ AtkEditableTextIface iface = getEditableTextIface (atkObject);
+ if (iface != null && iface.set_run_attributes != 0) {
+ parentResult = ATK.call (iface.set_run_attributes, atkObject, attrib_set, start_offset, end_offset);
+ }
+ return parentResult;
+ }
+
+// void atk_editable_text_set_text_contents (AtkEditableText *text, const gchar *string);
+ static int /*long*/ atkEditableText_set_text_contents (int /*long*/ atkObject, int /*long*/ string) {
+ if (DEBUG) print ("-->atkEditableText_set_text_contents");
+ AccessibleObject object = getAccessibleObject (atkObject);
+ if (object != null) {
+ Accessible accessible = object.accessible;
+ Vector listeners = accessible.accessibleEditableTextListeners;
+ int length = listeners.size();
+ if (length > 0) {
+ AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(accessible);
+ event.start = 0;
+ String text = object.getText ();
+ event.end = text == null ? 0 : text.length ();
+ event.string = getString (string);
+ for (int i = 0; i < length; i++) {
+ AccessibleEditableTextListener listener = (AccessibleEditableTextListener) listeners.elementAt(i);
+ listener.replaceText(event);
+ }
+ return ACC.OK.equals(event.result) ? 1 : 0;
+ }
+ }
+ int /*long*/ parentResult = 0;
+ AtkEditableTextIface iface = getEditableTextIface (atkObject);
+ if (iface != null && iface.set_run_attributes != 0) {
+ parentResult = ATK.call (iface.set_run_attributes, atkObject, string);
+ }
+ return parentResult;
+ }
+
+// void atk_editable_text_insert_text (AtkEditableText *text, const gchar *string, gint length, gint *position);
+ static int /*long*/ atkEditableText_insert_text (int /*long*/ atkObject, int /*long*/ string, int /*long*/ string_length, int /*long*/ position) {
+ if (DEBUG) print ("-->atkEditableText_insert_text");
+ AccessibleObject object = getAccessibleObject (atkObject);
+ if (object != null) {
+ Accessible accessible = object.accessible;
+ Vector listeners = accessible.accessibleEditableTextListeners;
+ int length = listeners.size();
+ if (length > 0) {
+ AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(accessible);
+ int[] pos = new int [1];
+ OS.memmove (pos, position, OS.PTR_SIZEOF);
+ event.start = event.end = pos[0];
+ event.string = getString (string);
+ for (int i = 0; i < length; i++) {
+ AccessibleEditableTextListener listener = (AccessibleEditableTextListener) listeners.elementAt(i);
+ listener.replaceText(event);
+ }
+ return ACC.OK.equals(event.result) ? 1 : 0;
+ }
+ }
+ int /*long*/ parentResult = 0;
+ AtkEditableTextIface iface = getEditableTextIface (atkObject);
+ if (iface != null && iface.set_run_attributes != 0) {
+ parentResult = ATK.call (iface.set_run_attributes, atkObject, string, string_length, position);
+ }
+ return parentResult;
+ }
+
+// void atk_editable_text_copy_text (AtkEditableText *text, gint start_pos, gint end_pos);
+ static int /*long*/ atkEditableText_copy_text(int /*long*/ atkObject, int /*long*/ start_pos, int /*long*/ end_pos) {
+ if (DEBUG) print ("-->atkEditableText_copy_text");
+ AccessibleObject object = getAccessibleObject (atkObject);
+ if (object != null) {
+ Accessible accessible = object.accessible;
+ Vector listeners = accessible.accessibleEditableTextListeners;
+ int length = listeners.size();
+ if (length > 0) {
+ AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(accessible);
+ event.start = (int)/*64*/start_pos;
+ event.end = (int)/*64*/end_pos;
+ for (int i = 0; i < length; i++) {
+ AccessibleEditableTextListener listener = (AccessibleEditableTextListener) listeners.elementAt(i);
+ listener.copyText(event);
+ }
+ return ACC.OK.equals(event.result) ? 1 : 0;
+ }
+ }
+ int /*long*/ parentResult = 0;
+ AtkEditableTextIface iface = getEditableTextIface (atkObject);
+ if (iface != null && iface.set_run_attributes != 0) {
+ parentResult = ATK.call (iface.set_run_attributes, atkObject, start_pos, end_pos);
+ }
+ return parentResult;
+ }
+
+// void atk_editable_text_cut_text (AtkEditableText *text, gint start_pos, gint end_pos);
+ static int /*long*/ atkEditableText_cut_text (int /*long*/ atkObject, int /*long*/ start_pos, int /*long*/ end_pos) {
+ if (DEBUG) print ("-->atkEditableText_cut_text");
+ AccessibleObject object = getAccessibleObject (atkObject);
+ if (object != null) {
+ Accessible accessible = object.accessible;
+ Vector listeners = accessible.accessibleEditableTextListeners;
+ int length = listeners.size();
+ if (length > 0) {
+ AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(accessible);
+ event.start = (int)/*64*/start_pos;
+ event.end = (int)/*64*/end_pos;
+ for (int i = 0; i < length; i++) {
+ AccessibleEditableTextListener listener = (AccessibleEditableTextListener) listeners.elementAt(i);
+ listener.cutText(event);
+ }
+ return ACC.OK.equals(event.result) ? 1 : 0;
+ }
+ }
+ int /*long*/ parentResult = 0;
+ AtkEditableTextIface iface = getEditableTextIface (atkObject);
+ if (iface != null && iface.set_run_attributes != 0) {
+ parentResult = ATK.call (iface.set_run_attributes, atkObject, start_pos, end_pos);
+ }
+ return parentResult;
+ }
+
+// void atk_editable_text_delete_text (AtkEditableText *text, gint start_pos, gint end_pos);
+ static int /*long*/ atkEditableText_delete_text (int /*long*/ atkObject, int /*long*/ start_pos, int /*long*/ end_pos) {
+ if (DEBUG) print ("-->atkEditableText_delete_text");
+ AccessibleObject object = getAccessibleObject (atkObject);
+ if (object != null) {
+ Accessible accessible = object.accessible;
+ Vector listeners = accessible.accessibleEditableTextListeners;
+ int length = listeners.size();
+ if (length > 0) {
+ AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(accessible);
+ event.start = (int)/*64*/start_pos;
+ event.end = (int)/*64*/end_pos;
+ event.string = "";
+ for (int i = 0; i < length; i++) {
+ AccessibleEditableTextListener listener = (AccessibleEditableTextListener) listeners.elementAt(i);
+ listener.replaceText(event);
+ }
+ return ACC.OK.equals(event.result) ? 1 : 0;
+ }
+ }
+ int /*long*/ parentResult = 0;
+ AtkEditableTextIface iface = getEditableTextIface (atkObject);
+ if (iface != null && iface.set_run_attributes != 0) {
+ parentResult = ATK.call (iface.set_run_attributes, atkObject, start_pos, end_pos);
+ }
+ return parentResult;
+ }
+
+// void atk_editable_text_paste_text (AtkEditableText *text, gint position);
+ static int /*long*/ atkEditableText_paste_text (int /*long*/ atkObject, int /*long*/ position) {
+ if (DEBUG) print ("-->atkEditableText_paste_text");
+ AccessibleObject object = getAccessibleObject (atkObject);
+ if (object != null) {
+ Accessible accessible = object.accessible;
+ Vector listeners = accessible.accessibleEditableTextListeners;
+ int length = listeners.size();
+ if (length > 0) {
+ AccessibleEditableTextEvent event = new AccessibleEditableTextEvent(accessible);
+ event.start = (int)/*64*/position;
+ for (int i = 0; i < length; i++) {
+ AccessibleEditableTextListener listener = (AccessibleEditableTextListener) listeners.elementAt(i);
+ listener.pasteText(event);
+ }
+ return ACC.OK.equals(event.result) ? 1 : 0;
+ }
+ }
+ int /*long*/ parentResult = 0;
+ AtkEditableTextIface iface = getEditableTextIface (atkObject);
+ if (iface != null && iface.set_run_attributes != 0) {
+ parentResult = ATK.call (iface.set_run_attributes, atkObject, position);
+ }
+ return parentResult;
+ }
+
static AtkHypertextIface getHypertextIface (int /*long*/ atkObject) {
if (ATK.g_type_is_a (OS.g_type_parent (OS.G_OBJECT_TYPE (atkObject)), ATK.ATK_TYPE_HYPERTEXT())) {
AtkHypertextIface iface = new AtkHypertextIface ();