[java-atk-wrapper] Make sure to create jaw_instance from the EDT
- From: Samuel Thibault <sthibaul src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [java-atk-wrapper] Make sure to create jaw_instance from the EDT
- Date: Fri, 14 Jun 2019 07:25:47 +0000 (UTC)
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]