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



commit fa3e01b75a30c91ae690a45b59976e59981bb63f
Author: Giuseppe <giuseppecapaldo93 gmail com>
Date:   Tue Jun 18 00:20:15 2019 +0200

    Delegate getArrayAccessibleState call to EDT

 jni/src/jawobject.c                            | 26 +++++++-------------------
 wrapper/org/GNOME/Accessibility/AtkObject.java | 10 ++++++++++
 2 files changed, 17 insertions(+), 19 deletions(-)
---
diff --git a/jni/src/jawobject.c b/jni/src/jawobject.c
index dab4552..cbf3e77 100644
--- a/jni/src/jawobject.c
+++ b/jni/src/jawobject.c
@@ -466,25 +466,14 @@ jaw_object_ref_state_set (AtkObject *atk_obj)
   if (!ac) {
     return NULL;
   }
-  jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv,
-                                                       "javax/accessibility/AccessibleContext" );
-  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
-                                          classAccessibleContext,
-                                          "getAccessibleStateSet",
-                                          "()Ljavax/accessibility/AccessibleStateSet;" );
-  jobject jstate_set = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
-  (*jniEnv)->DeleteGlobalRef(jniEnv, ac);
-  if (jstate_set == NULL)
-    return NULL;
 
-  jclass classAccessibleStateSet = (*jniEnv)->FindClass(jniEnv,
-                                                        "javax/accessibility/AccessibleStateSet" );
-  jmid = (*jniEnv)->GetMethodID(jniEnv,
-                                classAccessibleStateSet,
-                                "toArray",
-                                "()[Ljavax/accessibility/AccessibleState;");
+  jclass atkObject = (*jniEnv)->FindClass (jniEnv, "org/GNOME/Accessibility/AtkObject");
+  jmethodID jmid = (*jniEnv)->GetStaticMethodID (jniEnv, atkObject, "getArrayAccessibleState", 
"(Ljavax/accessibility/AccessibleContext;)[Ljavax/accessibility/AccessibleState;");
+  jobject jstate_arr = (*jniEnv)->CallStaticObjectMethod (jniEnv, atkObject, jmid, ac);
 
-  jobjectArray jstate_arr = (*jniEnv)->CallObjectMethod( jniEnv, jstate_set, jmid );
+  (*jniEnv)->DeleteGlobalRef(jniEnv, ac);
+  if (jstate_arr == NULL)
+    return NULL;
 
   jsize jarr_size = (*jniEnv)->GetArrayLength(jniEnv, jstate_arr);
   jsize i;
@@ -499,8 +488,7 @@ jaw_object_ref_state_set (AtkObject *atk_obj)
     }
   }
 
-  if (G_OBJECT(state_set) != NULL)
-    g_object_ref(G_OBJECT(state_set));
+  g_object_ref(G_OBJECT(state_set));
 
   return state_set;
 }
diff --git a/wrapper/org/GNOME/Accessibility/AtkObject.java b/wrapper/org/GNOME/Accessibility/AtkObject.java
index 2516508..2d8037c 100644
--- a/wrapper/org/GNOME/Accessibility/AtkObject.java
+++ b/wrapper/org/GNOME/Accessibility/AtkObject.java
@@ -80,6 +80,16 @@ public class AtkObject{
         return displayString.equalsIgnoreCase("paragraph");
     }
 
+    public static AccessibleState[] getArrayAccessibleState(AccessibleContext ac){
+        return AtkUtil.invokeInSwing( () -> {
+            AccessibleStateSet stateSet = ac.getAccessibleStateSet();
+            if (stateSet == null)
+                return null;
+            else
+                return stateSet.toArray();
+        }, 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]