[java-atk-wrapper] fix cast from AtkObject to Accessible



commit f91b625a13b3c23a7949f08dd2fb1006348f1aba
Author: Giuseppe <giuseppecapaldo93 gmail com>
Date:   Wed Jul 10 22:33:44 2019 +0200

    fix cast from AtkObject to Accessible

 jni/src/jawtable.c | 39 ++++++++++++++++++++++++++++-----------
 1 file changed, 28 insertions(+), 11 deletions(-)
---
diff --git a/jni/src/jawtable.c b/jni/src/jawtable.c
index da6385f..f08e87d 100644
--- a/jni/src/jawtable.c
+++ b/jni/src/jawtable.c
@@ -641,19 +641,28 @@ static void
 jaw_table_set_caption(AtkTable *table, AtkObject *caption)
 {
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj)
+    return;
+  JawObject *jcaption = JAW_OBJECT(caption);
+  if (!jcaption)
+    return;
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
+  jclass accessible = (*env)->FindClass (env, "javax/accessibility/Accessible");
+  if ( !((*env)->IsInstanceOf(env, jcaption->acc_context, accessible)) )
+    return;
+  jobject obj = (*env)->NewGlobalRef(env, jcaption->acc_context);
+  if (!obj)
+    return;
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    (*env)->DeleteGlobalRef(env, obj);
     return;
   }
-
   jclass classAtkTable = (*env)->FindClass(env, "org/GNOME/Accessibility/AtkTable");
-  jmethodID jmid = (*env)->GetMethodID(env,
-                                       classAtkTable,
-                                       "setCaption",
-                                       "(Ljavax/accessibility/Accessible;)V");
-  (*env)->CallVoidMethod(env, atk_table, jmid, (jobject)caption);
+  jmethodID jmid = (*env)->GetMethodID(env, classAtkTable, "setCaption", 
"(Ljavax/accessibility/Accessible;)V");
+  (*env)->CallVoidMethod(env, atk_table, jmid, obj);
+  (*env)->DeleteGlobalRef(env, obj);
   (*env)->DeleteGlobalRef(env, atk_table);
 }
 
@@ -661,18 +670,26 @@ static void
 jaw_table_set_summary(AtkTable *table, AtkObject *summary)
 {
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj)
+    return;
+  JawObject *jsummary = JAW_OBJECT(summary);
+  if (!jsummary)
+    return;
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
+  jclass accessible = (*env)->FindClass (env, "javax/accessibility/Accessible");
+  if ( !((*env)->IsInstanceOf(env, jsummary->acc_context, accessible)) )
+    return;
+  jobject obj = (*env)->NewGlobalRef(env, jsummary->acc_context);
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    (*env)->DeleteGlobalRef(env, obj);
     return;
   }
 
   jclass classAtkTable = (*env)->FindClass(env, "org/GNOME/Accessibility/AtkTable");
-  jmethodID jmid = (*env)->GetMethodID(env,
-                                       classAtkTable,
-                                       "setSummary",
-                                       "(Ljavax/accessibility/Accessible;)V");
-  (*env)->CallVoidMethod(env, atk_table, jmid, (jobject)summary);
+  jmethodID jmid = (*env)->GetMethodID(env, classAtkTable, "setSummary", 
"(Ljavax/accessibility/Accessible;)V");
+  (*env)->CallVoidMethod(env, atk_table, jmid, obj);
+  (*env)->DeleteGlobalRef(env, obj);
   (*env)->DeleteGlobalRef(env, atk_table);
 }


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