[java-atk-wrapper] Delegate getAccessibleParent call to EDT



commit 0f609e803b56a413ad5240d311ad18108b474888
Author: Giuseppe <giuseppecapaldo93 gmail com>
Date:   Mon Jun 17 21:50:41 2019 +0200

    Delegate getAccessibleParent call to EDT

 jni/src/jawobject.c                            | 39 +++++++++-----------------
 wrapper/org/GNOME/Accessibility/AtkObject.java | 10 +++++++
 2 files changed, 23 insertions(+), 26 deletions(-)
---
diff --git a/jni/src/jawobject.c b/jni/src/jawobject.c
index 77fd818..02dbe7e 100644
--- a/jni/src/jawobject.c
+++ b/jni/src/jawobject.c
@@ -195,41 +195,28 @@ jaw_object_finalize (GObject *gobject)
   }
 }
 
-static AtkObject* jaw_object_get_parent(AtkObject *atk_obj)
+static AtkObject*
+jaw_object_get_parent(AtkObject *atk_obj)
 {
   if (jaw_toplevel_get_child_index(JAW_TOPLEVEL(atk_get_root()), atk_obj) != -1)
-  {
     return ATK_OBJECT(atk_get_root());
-  }
 
   JawObject *jaw_obj = JAW_OBJECT(atk_obj);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject ac = (*jniEnv)->NewGlobalRef(jniEnv, jaw_obj->acc_context);
-  if (!ac) {
+  if (!ac)
     return NULL;
-  }
 
-  jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv,
-                                                       "javax/accessibility/AccessibleContext" );
-  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
-                                          classAccessibleContext,
-                                          "getAccessibleParent",
-                                          "()Ljavax/accessibility/Accessible;");
-  jobject jparent = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
-  (*jniEnv)->DeleteGlobalRef(jniEnv, ac);
-  if (jparent != NULL )
-  {
-    jclass classAccessible = (*jniEnv)->FindClass(jniEnv,
-                                                  "javax/accessibility/Accessible" );
-    jmid = (*jniEnv)->GetMethodID(jniEnv,
-                                  classAccessible,
-                                  "getAccessibleContext",
-                                  "()Ljavax/accessibility/AccessibleContext;");
-    jobject parent_ac = (*jniEnv)->CallObjectMethod(jniEnv, jparent, jmid);
-    AtkObject *parent_obj = (AtkObject*) jaw_object_table_lookup( jniEnv, parent_ac );
-    if (parent_obj != NULL )
-       return parent_obj;
-  }
+  jclass atkObject = (*jniEnv)->FindClass (jniEnv,"org/GNOME/Accessibility/AtkObject");
+  jmethodID jmid = (*jniEnv)->GetStaticMethodID (jniEnv, atkObject, "getAccessibleParent", 
"(Ljavax/accessibility/AccessibleContext;)Ljavax/accessibility/AccessibleContext;");
+  jobject jparent = (*jniEnv)->CallStaticObjectMethod (jniEnv, atkObject, jmid, ac);
+  (*jniEnv)->DeleteGlobalRef (jniEnv, ac);
+
+  AtkObject *parent_obj = (AtkObject*) jaw_object_table_lookup (jniEnv, jparent);
+  if (parent_obj != NULL )
+    return parent_obj;
+
+  // FIXME: Should we rather return null?
   return ATK_OBJECT(atk_get_root());
 }
 
diff --git a/wrapper/org/GNOME/Accessibility/AtkObject.java b/wrapper/org/GNOME/Accessibility/AtkObject.java
index 3196563..0b665ef 100644
--- a/wrapper/org/GNOME/Accessibility/AtkObject.java
+++ b/wrapper/org/GNOME/Accessibility/AtkObject.java
@@ -37,6 +37,16 @@ import java.util.Locale;
 */
 public class AtkObject{
 
+    public static AccessibleContext getAccessibleParent(AccessibleContext ac){
+        return AtkUtil.invokeInSwing( () -> {
+            Accessible father = ac.getAccessibleParent();
+            if (father != null)
+                return father.getAccessibleContext();
+            else
+                return null;
+        }, null);
+    }
+
     public static int hashCode(AccessibleContext ac){
         return AtkUtil.invokeInSwing( () -> { return ac.hashCode(); }, 0);
     }


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