[java-atk-wrapper] Table: implement get_index_at



commit e65af70562011cb79fc2e2028351ea7e02685e44
Author: Samuel Thibault <samuel thibault ens-lyon org>
Date:   Sun Jul 28 11:50:17 2019 +0200

    Table: implement get_index_at

 jni/src/jawtable.c                            | 28 ++++++++++++++++++++++++++-
 wrapper/org/GNOME/Accessibility/AtkTable.java | 16 +++++++++++++++
 2 files changed, 43 insertions(+), 1 deletion(-)
---
diff --git a/jni/src/jawtable.c b/jni/src/jawtable.c
index 0383d3b..9315459 100644
--- a/jni/src/jawtable.c
+++ b/jni/src/jawtable.c
@@ -24,6 +24,7 @@
 #include "jawutil.h"
 
 static AtkObject*   jaw_table_ref_at(AtkTable *table, gint row, gint column);
+static gint         jaw_table_get_index_at(AtkTable *table, gint row, gint column);
 static gint         jaw_table_get_column_at_index(AtkTable *table, gint index);
 static gint         jaw_table_get_row_at_index(AtkTable *table, gint index);
 static gint         jaw_table_get_n_columns(AtkTable *table);
@@ -67,7 +68,7 @@ jaw_table_interface_init (AtkTableIface *iface, gpointer data)
 {
   JAW_DEBUG_ALL("%p, %p", iface, data);
   iface->ref_at = jaw_table_ref_at;
-  // TODO: iface->get_index_at
+  iface->get_index_at = jaw_table_get_index_at;
   iface->get_column_at_index = jaw_table_get_column_at_index;
   iface->get_row_at_index = jaw_table_get_row_at_index;
   iface->get_n_columns = jaw_table_get_n_columns;
@@ -174,6 +175,31 @@ jaw_table_ref_at (AtkTable *table, gint    row, gint column)
   return ATK_OBJECT(jaw_impl);
 }
 
+static gint
+jaw_table_get_index_at (AtkTable *table, gint row, gint column)
+{
+  JAW_DEBUG_C("%p, %d, %d", table, row, column);
+  JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
+  TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
+  JNIEnv *env = jaw_util_get_jni_env();
+  jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
+  if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
+    return 0;
+  }
+
+  jclass classAtkTable = (*env)->FindClass(env, "org/GNOME/Accessibility/AtkTable");
+  jmethodID jmid = (*env)->GetMethodID(env, classAtkTable, "get_index_at", "(II)I");
+  jint jindex = (*env)->CallIntMethod(env, atk_table, jmid, (jint)row, (jint)column);
+  (*env)->DeleteGlobalRef(env, atk_table);
+
+  return (gint)jindex;
+}
+
 static gint
 jaw_table_get_column_at_index (AtkTable *table, gint index)
 {
diff --git a/wrapper/org/GNOME/Accessibility/AtkTable.java b/wrapper/org/GNOME/Accessibility/AtkTable.java
index 1af00f4..92d1777 100644
--- a/wrapper/org/GNOME/Accessibility/AtkTable.java
+++ b/wrapper/org/GNOME/Accessibility/AtkTable.java
@@ -50,6 +50,22 @@ public class AtkTable {
                }, null);
        }
 
+       public int get_index_at (int row, int column) {
+               AccessibleTable acc_table = _acc_table.get();
+               if (acc_table == null)
+                       return -1;
+
+               return AtkUtil.invokeInSwing ( () -> {
+                       Accessible child = acc_table.getAccessibleAt(row, column);
+                       if (child == null)
+                               return -1;
+                       AccessibleContext child_ac = child.getAccessibleContext();
+                       if (child_ac == null)
+                               return -1;
+                       return child_ac.getAccessibleIndexInParent();
+               }, -1);
+       }
+
        public int get_column_at_index (int index) {
                AccessibleTable acc_table = _acc_table.get();
                if (acc_table == null)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]