[java-atk-wrapper] Make sure to create jaw_instance from the EDT



commit 5491a793a2157c3bf5a07cbc549da79d577f90a4
Author: Samuel Thibault <samuel thibault ens-lyon org>
Date:   Fri Jun 14 09:07:02 2019 +0200

    Make sure to create jaw_instance from the EDT

 jni/src/AtkWrapper.c                               |  8 ++++++++
 jni/src/jawcomponent.c                             |  2 +-
 jni/src/jawhyperlink.c                             |  2 +-
 jni/src/jawimpl.c                                  | 13 +++++++++++--
 jni/src/jawimpl.h                                  |  1 +
 jni/src/jawobject.c                                |  6 +++---
 jni/src/jawselection.c                             |  2 +-
 jni/src/jawtable.c                                 | 10 +++++-----
 jni/src/jawtablecell.c                             |  2 +-
 wrapper/org/GNOME/Accessibility/AtkWrapper.java.in |  5 +++++
 10 files changed, 37 insertions(+), 14 deletions(-)
---
diff --git a/jni/src/AtkWrapper.c b/jni/src/AtkWrapper.c
index a8434d1..e84286a 100644
--- a/jni/src/AtkWrapper.c
+++ b/jni/src/AtkWrapper.c
@@ -1187,6 +1187,14 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_dispatchKeyEvent(JNIEnv *jniEnv,
   return key_consumed;
 }
 
+JNIEXPORT jlong
+JNICALL Java_org_GNOME_Accessibility_AtkWrapper_getInstance(JNIEnv *jniEnv,
+                                                            jclass jClass,
+                                                            jobject ac)
+{
+  return jaw_impl_get_instance(jniEnv, ac);
+}
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/jni/src/jawcomponent.c b/jni/src/jawcomponent.c
index b156fde..44934de 100644
--- a/jni/src/jawcomponent.c
+++ b/jni/src/jawcomponent.c
@@ -160,7 +160,7 @@ jaw_component_ref_accessible_at_point (AtkComponent *component, gint x, gint y,
                                                  (jint)coord_type);
   (*jniEnv)->DeleteGlobalRef(jniEnv, atk_component);
 
-  JawImpl* jaw_impl = jaw_impl_get_instance( jniEnv, child_ac );
+  JawImpl* jaw_impl = jaw_impl_get_instance_from_jaw( jniEnv, child_ac );
 
   g_object_ref( G_OBJECT(jaw_impl) );
 
diff --git a/jni/src/jawhyperlink.c b/jni/src/jawhyperlink.c
index b802202..5723f5e 100644
--- a/jni/src/jawhyperlink.c
+++ b/jni/src/jawhyperlink.c
@@ -138,7 +138,7 @@ jaw_hyperlink_get_object (AtkHyperlink *atk_hyperlink,
        jmid = (*jniEnv)->GetMethodID( jniEnv, classAccessible, "getAccessibleContext", 
"()Ljavax/accessibility/AccessibleContext;" );
        jobject ac = (*jniEnv)->CallObjectMethod( jniEnv, jobj, jmid );
 
-       AtkObject *obj = (AtkObject*) jaw_impl_get_instance( jniEnv, ac );
+       AtkObject *obj = (AtkObject*) jaw_impl_get_instance_from_jaw( jniEnv, ac );
 
        return obj;
 }
diff --git a/jni/src/jawimpl.c b/jni/src/jawimpl.c
index 11272ce..3492b82 100644
--- a/jni/src/jawimpl.c
+++ b/jni/src/jawimpl.c
@@ -318,6 +318,15 @@ jaw_impl_get_instance (JNIEnv *jniEnv, jobject ac)
   return jaw_impl;
 }
 
+JawImpl*
+jaw_impl_get_instance_from_jaw (JNIEnv *jniEnv, jobject ac)
+{
+  jclass classWrapper = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkWrapper");
+  jmethodID jmid = (*jniEnv)->GetStaticMethodID(jniEnv, classWrapper, "getInstanceFromSwing", 
"(Ljavax/accessibility/AccessibleContext;)J");
+  jlong ptr = (*jniEnv)->CallStaticObjectMethod(jniEnv, classWrapper, jmid, ac);
+  return ptr;
+}
+
 JawImpl*
 jaw_impl_find_instance (JNIEnv *jniEnv, jobject ac)
 {
@@ -656,7 +665,7 @@ jaw_impl_ref_child (AtkObject *atk_obj, gint i)
                                 "()Ljavax/accessibility/AccessibleContext;" );
   jobject child_ac = (*jniEnv)->CallObjectMethod( jniEnv, jchild, jmid );
 
-  AtkObject *obj = (AtkObject*) jaw_impl_get_instance( jniEnv, child_ac );
+  AtkObject *obj = (AtkObject*) jaw_impl_get_instance_from_jaw( jniEnv, child_ac );
   if (G_OBJECT(obj) != NULL)
     g_object_ref(G_OBJECT(obj));
 
@@ -822,7 +831,7 @@ jaw_impl_ref_relation_set (AtkObject *atk_obj)
                                       "()Ljavax/accessibility/AccessibleContext;");
         jobject target_ac = (*jniEnv)->CallObjectMethod(jniEnv, jtarget, jmid);
 
-        JawImpl *target_obj = jaw_impl_get_instance(jniEnv, target_ac);
+        JawImpl *target_obj = jaw_impl_get_instance_from_jaw(jniEnv, target_ac);
         if(target_obj == NULL)
           return NULL;
         atk_object_add_relationship(atk_obj, rel_type, (AtkObject*) target_obj);
diff --git a/jni/src/jawimpl.h b/jni/src/jawimpl.h
index 2a960c4..f35bb1b 100644
--- a/jni/src/jawimpl.h
+++ b/jni/src/jawimpl.h
@@ -51,6 +51,7 @@ struct _JawImpl
 };
 
 JawImpl* jaw_impl_get_instance(JNIEnv*, jobject);
+JawImpl* jaw_impl_get_instance_from_jaw(JNIEnv*, jobject);
 JawImpl* jaw_impl_find_instance(JNIEnv*, jobject);
 GHashTable* jaw_impl_get_object_hash_table(void);
 GMutex* jaw_impl_get_object_hash_table_mutex(void);
diff --git a/jni/src/jawobject.c b/jni/src/jawobject.c
index 36156e6..5d52fb5 100644
--- a/jni/src/jawobject.c
+++ b/jni/src/jawobject.c
@@ -579,7 +579,7 @@ static const gchar *jaw_object_get_object_locale (AtkObject *atk_obj)
                                           "()Ljavax/accessibility/AccessibleContext;");
   jobject locale = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid );
   (*jniEnv)->DeleteGlobalRef(jniEnv, ac);
-  JawImpl *target_obj = jaw_impl_get_instance(jniEnv, locale);
+  JawImpl *target_obj = jaw_impl_get_instance_from_jaw(jniEnv, locale);
   if(target_obj == NULL)
     return NULL;
 
@@ -654,7 +654,7 @@ jaw_object_ref_relation_set (AtkObject *atk_obj)
                                       "()Ljavax/accessibility/AccessibleContext;");
         jobject target_ac = (*jniEnv)->CallObjectMethod(jniEnv, jtarget, jmid);
 
-        JawImpl *target_obj = jaw_impl_get_instance(jniEnv, target_ac);
+        JawImpl *target_obj = jaw_impl_get_instance_from_jaw(jniEnv, target_ac);
         if(target_obj == NULL)
           return NULL;
         atk_object_add_relationship(atk_obj, rel_type, ATK_OBJECT(target_obj));
@@ -699,7 +699,7 @@ jaw_object_ref_child(AtkObject *atk_obj, gint i)
                                 "()Ljavax/accessibility/AccessibleContext;" );
   jobject child_ac = (*jniEnv)->CallObjectMethod( jniEnv, jchild, jmid );
 
-  AtkObject *obj = (AtkObject*) jaw_impl_get_instance( jniEnv, child_ac );
+  AtkObject *obj = (AtkObject*) jaw_impl_get_instance_from_jaw( jniEnv, child_ac );
   if (G_OBJECT(obj) != NULL)
     g_object_ref(G_OBJECT(obj));
 
diff --git a/jni/src/jawselection.c b/jni/src/jawselection.c
index 76214f5..571a4b2 100644
--- a/jni/src/jawselection.c
+++ b/jni/src/jawselection.c
@@ -145,7 +145,7 @@ jaw_selection_ref_selection (AtkSelection *selection, gint i)
        jmid = (*jniEnv)->GetMethodID( jniEnv, classAccessible, "getAccessibleContext", 
"()Ljavax/accessibility/AccessibleContext;" );
        jobject child_ac = (*jniEnv)->CallObjectMethod( jniEnv, jchild, jmid );
 
-       AtkObject *obj = (AtkObject*) jaw_impl_get_instance( jniEnv, child_ac );
+       AtkObject *obj = (AtkObject*) jaw_impl_get_instance_from_jaw( jniEnv, child_ac );
        g_object_ref (G_OBJECT(obj));
 
        return obj;
diff --git a/jni/src/jawtable.c b/jni/src/jawtable.c
index 8dd1479..50d86fc 100644
--- a/jni/src/jawtable.c
+++ b/jni/src/jawtable.c
@@ -152,7 +152,7 @@ jaw_table_ref_at (AtkTable *table, gint     row, gint column)
   if (!jac)
     return NULL;
 
-  JawImpl* jaw_impl = jaw_impl_get_instance( env, jac );
+  JawImpl* jaw_impl = jaw_impl_get_instance_from_jaw( env, jac );
 
   if (G_OBJECT(jaw_impl) != NULL)
     g_object_ref(G_OBJECT(jaw_impl));
@@ -297,7 +297,7 @@ jaw_table_get_caption (AtkTable     *table)
   if (!jac)
     return NULL;
 
-  JawImpl* jaw_impl = jaw_impl_get_instance( env, jac );
+  JawImpl* jaw_impl = jaw_impl_get_instance_from_jaw( env, jac );
 
   return ATK_OBJECT(jaw_impl);
 }
@@ -377,7 +377,7 @@ jaw_table_get_column_header (AtkTable *table, gint column)
   if (!jac)
     return NULL;
 
-  JawImpl* jaw_impl = jaw_impl_get_instance( env, jac );
+  JawImpl* jaw_impl = jaw_impl_get_instance_from_jaw( env, jac );
 
   return ATK_OBJECT(jaw_impl);
 }
@@ -401,7 +401,7 @@ jaw_table_get_row_header (AtkTable *table, gint row)
   if (!jac)
     return NULL;
 
-  JawImpl* jaw_impl = jaw_impl_get_instance( env, jac );
+  JawImpl* jaw_impl = jaw_impl_get_instance_from_jaw( env, jac );
 
   return ATK_OBJECT(jaw_impl);
 }
@@ -425,7 +425,7 @@ jaw_table_get_summary (AtkTable *table)
   if (!jac)
     return NULL;
 
-  JawImpl* jaw_impl = jaw_impl_get_instance( env, jac );
+  JawImpl* jaw_impl = jaw_impl_get_instance_from_jaw( env, jac );
 
   return ATK_OBJECT(jaw_impl);
 }
diff --git a/jni/src/jawtablecell.c b/jni/src/jawtablecell.c
index 862c763..bf3cf54 100644
--- a/jni/src/jawtablecell.c
+++ b/jni/src/jawtablecell.c
@@ -106,7 +106,7 @@ jaw_table_cell_get_table(AtkTableCell *cell)
   if (!jac)
     return NULL;
 
-  JawImpl* jaw_impl = jaw_impl_get_instance(jniEnv, jac);
+  JawImpl* jaw_impl = jaw_impl_get_instance_from_jaw(jniEnv, jac);
 
   return ATK_OBJECT(jaw_impl);
 }
diff --git a/wrapper/org/GNOME/Accessibility/AtkWrapper.java.in 
b/wrapper/org/GNOME/Accessibility/AtkWrapper.java.in
index e997b70..0af1773 100644
--- a/wrapper/org/GNOME/Accessibility/AtkWrapper.java.in
+++ b/wrapper/org/GNOME/Accessibility/AtkWrapper.java.in
@@ -674,6 +674,7 @@ public class AtkWrapper {
   public native static void componentRemoved(AccessibleContext ac);
   public native static void boundsChanged(AccessibleContext ac);
   public native static boolean dispatchKeyEvent(AtkKeyEvent e);
+  public native static long getInstance(AccessibleContext ac);
 
   public static void printLog(String str) {
     System.out.println(str);
@@ -718,6 +719,10 @@ public class AtkWrapper {
     });
   }
 
+  public static long getInstanceFromSwing(AccessibleContext ac) {
+    return AtkUtil.invokeInSwing( () -> { return getInstance(ac); }, 0l);
+  }
+
   public static void main(String args[]) {
     new AtkWrapper();
   }


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