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



commit 44acff98e4cf399527beacd2ed3adc8f96a39197
Author: Giuseppe <giuseppecapaldo93 gmail com>
Date:   Thu Jun 20 00:16:55 2019 +0200

    Delegate setAccessibleParent call to EDT

 jni/src/jawobject.c                            | 30 +++++++++-----------------
 wrapper/org/GNOME/Accessibility/AtkObject.java |  9 ++++++--
 2 files changed, 17 insertions(+), 22 deletions(-)
---
diff --git a/jni/src/jawobject.c b/jni/src/jawobject.c
index 53ef5ce..cfa93f2 100644
--- a/jni/src/jawobject.c
+++ b/jni/src/jawobject.c
@@ -234,28 +234,18 @@ jaw_object_set_parent(AtkObject *atk_obj, AtkObject *parent)
   if (!ac) {
     return;
   }
-
-  jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv,
-                                                       "javax/accessibility/AccessibleContext" );
-  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
-                                          classAccessibleContext,
-                                          "setAccessibleParent",
-                                          "(Ljavax/accessibility/AccessibleContext;)");
-  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)
+  JawObject *jaw_par = JAW_OBJECT(parent);
+  jobject pa = (*jniEnv)->NewGlobalRef(jniEnv, jaw_par->acc_context);
+  if (!pa) {
       return;
   }
+
+  jclass atkObject = (*jniEnv)->FindClass (jniEnv, "org/GNOME/Accessibility/AtkObject");
+  jmethodID jmid = (*jniEnv)->GetStaticMethodID (jniEnv, atkObject, "setAccessibleParent", 
"(Ljavax/accessibility/AccessibleContext;Ljavax/accessibility/AccessibleContext;)V");
+  (*jniEnv)->CallStaticVoidMethod (jniEnv, atkObject, jmid, ac, pa);
+  //FIXME do we need to emit the signal 'children-changed::add'?
+  (*jniEnv)->DeleteGlobalRef(jniEnv, ac);
+  (*jniEnv)->DeleteGlobalRef(jniEnv, pa);
 }
 
 static const gchar*
diff --git a/wrapper/org/GNOME/Accessibility/AtkObject.java b/wrapper/org/GNOME/Accessibility/AtkObject.java
index e9d4a3f..99a48b5 100644
--- a/wrapper/org/GNOME/Accessibility/AtkObject.java
+++ b/wrapper/org/GNOME/Accessibility/AtkObject.java
@@ -47,8 +47,13 @@ public class AtkObject{
         }, null);
     }
 
-    public static void setAccessibleParent(AccessibleContext ac, Accessible father){
-        AtkUtil.invokeInSwing( () -> { ac.setAccessibleParent(father); } );
+    public static void setAccessibleParent(AccessibleContext ac, AccessibleContext pa){
+        AtkUtil.invokeInSwing( () -> {
+            if (pa instanceof Accessible){
+                Accessible father = (Accessible) pa;
+                ac.setAccessibleParent(father);
+            }
+        } );
     }
 
     public static String getAccessibleName(AccessibleContext ac){


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