[java-atk-wrapper] adding right version get/setDescription and remove getName



commit fc61e1e29f5561aec082a5d0077f14e58bc5eb7e
Author: giuseppe <giuseppe dhcp-64-173 muc redhat com>
Date:   Thu Jul 25 14:11:54 2019 +0200

    adding right version get/setDescription and remove getName

 jni/src/jawaction.c                            | 69 +++-----------------------
 wrapper/org/GNOME/Accessibility/AtkAction.java | 60 +++++++++++-----------
 2 files changed, 40 insertions(+), 89 deletions(-)
---
diff --git a/jni/src/jawaction.c b/jni/src/jawaction.c
index cbbca75..35585bf 100644
--- a/jni/src/jawaction.c
+++ b/jni/src/jawaction.c
@@ -25,15 +25,13 @@
 static gboolean jaw_action_do_action(AtkAction *action, gint i);
 static gint jaw_action_get_n_actions(AtkAction *action);
 static const gchar* jaw_action_get_description(AtkAction *action, gint i);
-static const gchar* jaw_action_get_name(AtkAction      *action, gint i);
 static const gchar* jaw_action_get_keybinding (AtkAction *action, gint i);
 static gboolean jaw_action_set_description (AtkAction *action, gint i, const gchar *description);
 static const gchar* jaw_action_get_localized_name(AtkAction *action, gint i);
 
 typedef struct _ActionData {
   jobject atk_action;
-  gchar* action_name;
-  jstring jstrActionName;
+  gchar* localized_name;
   jstring jstrLocalizedName;
   gchar* action_description;
   jstring jstrActionDescription;
@@ -48,7 +46,6 @@ jaw_action_interface_init (AtkActionIface *iface, gpointer data)
   iface->do_action = jaw_action_do_action;
   iface->get_n_actions = jaw_action_get_n_actions;
   iface->get_description = jaw_action_get_description;
-  iface->get_name = jaw_action_get_name;
   iface->get_keybinding = jaw_action_get_keybinding;
   iface->set_description = jaw_action_set_description;
   iface->get_localized_name = jaw_action_get_localized_name;
@@ -81,19 +78,11 @@ jaw_action_data_finalize (gpointer p)
   JNIEnv *jniEnv = jaw_util_get_jni_env();
 
   if (data && data->atk_action) {
-    if (data->action_name != NULL) {
-      (*jniEnv)->ReleaseStringUTFChars(jniEnv,
-                                       data->jstrActionName,
-                                       data->action_name);
-      (*jniEnv)->ReleaseStringUTFChars(jniEnv,
-                                       data->jstrLocalizedName,
-                                       data->action_name);
-
-      (*jniEnv)->DeleteGlobalRef(jniEnv, data->jstrActionName);
+    if (data->localized_name != NULL) {
+      (*jniEnv)->ReleaseStringUTFChars(jniEnv, data->jstrLocalizedName, data->localized_name);
       (*jniEnv)->DeleteGlobalRef(jniEnv, data->jstrLocalizedName);
-      data->jstrActionName = NULL;
       data->jstrLocalizedName = NULL;
-      data->action_name = NULL;
+      data->localized_name = NULL;
     }
 
     if (data->action_description != NULL) {
@@ -255,48 +244,6 @@ jaw_action_set_description (AtkAction *action, gint i, const gchar *description)
   return jisset;
 }
 
-static const gchar*
-jaw_action_get_name (AtkAction *action, gint i)
-{
-  JAW_DEBUG_C("%p, %d", action, i);
-  JawObject *jaw_obj = JAW_OBJECT(action);
-  if(!jaw_obj){
-    JAW_DEBUG_I("jaw_obj == NULL");
-    return NULL;
-  }
-  ActionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_ACTION);
-  JNIEnv *jniEnv = jaw_util_get_jni_env();
-  jobject atk_action = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_action);
-  if (!atk_action) {
-    JAW_DEBUG_I("atk_action == NULL");
-    return NULL;
-  }
-
-  jclass classAtkAction = (*jniEnv)->FindClass(jniEnv,
-                                               "org/GNOME/Accessibility/AtkAction");
-  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
-                                          classAtkAction,
-                                          "get_name",
-                                          "(I)Ljava/lang/String;");
-  jstring jstr = (*jniEnv)->CallObjectMethod(jniEnv, atk_action, jmid, (jint)i);
-  (*jniEnv)->DeleteGlobalRef(jniEnv, atk_action);
-
-  if (data->action_name != NULL)
-  {
-    (*jniEnv)->ReleaseStringUTFChars(jniEnv,
-                                     data->jstrActionName,
-                                     data->action_name);
-    (*jniEnv)->DeleteGlobalRef(jniEnv, data->jstrActionName);
-  }
-
-  data->jstrActionName = (*jniEnv)->NewGlobalRef(jniEnv, jstr);
-  data->action_name = (gchar*)(*jniEnv)->GetStringUTFChars(jniEnv,
-                                                           data->jstrActionName,
-                                                           NULL);
-
-  return data->action_name;
-}
-
 static const gchar*
 jaw_action_get_localized_name (AtkAction *action, gint i)
 {
@@ -321,14 +268,14 @@ jaw_action_get_localized_name (AtkAction *action, gint i)
                                        "(I)Ljava/lang/String;");
   jstring jstr = (*env)->CallObjectMethod(env, atk_action, jmid, (jint)i);
   (*env)->DeleteGlobalRef(env, atk_action);
-  if (data->action_name != NULL)
+  if (data->localized_name != NULL)
   {
-    (*env)->ReleaseStringUTFChars(env, data->jstrLocalizedName, data->action_name);
+    (*env)->ReleaseStringUTFChars(env, data->jstrLocalizedName, data->localized_name);
     (*env)->DeleteGlobalRef(env, data->jstrLocalizedName);
   }
   data->jstrLocalizedName = (*env)->NewGlobalRef(env, jstr);
-  data->action_name = (gchar*)(*env)->GetStringUTFChars(env, data->jstrLocalizedName, NULL);
-  return data->action_name;
+  data->localized_name = (gchar*)(*env)->GetStringUTFChars(env, data->jstrLocalizedName, NULL);
+  return data->localized_name;
 }
 
 static const gchar*
diff --git a/wrapper/org/GNOME/Accessibility/AtkAction.java b/wrapper/org/GNOME/Accessibility/AtkAction.java
index 032ced6..246fd34 100644
--- a/wrapper/org/GNOME/Accessibility/AtkAction.java
+++ b/wrapper/org/GNOME/Accessibility/AtkAction.java
@@ -30,11 +30,15 @@ public class AtkAction {
        AccessibleContext ac;
        AccessibleAction acc_action;
        AccessibleExtendedComponent acc_ext_component;
+       String[] descriptions;
+       int nactions;
 
        public AtkAction (AccessibleContext ac) {
                super();
                this.ac = ac;
                this.acc_action = ac.getAccessibleAction();
+               this.nactions = this.acc_action.getAccessibleActionCount();
+               this.descriptions = new String[nactions];
                AccessibleComponent acc_component = ac.getAccessibleComponent();
                if (acc_component instanceof AccessibleExtendedComponent) {
                        this.acc_ext_component = (AccessibleExtendedComponent)acc_component;
@@ -50,30 +54,25 @@ public class AtkAction {
                return true;
        }
 
-       public int get_n_actions () {
-               return AtkUtil.invokeInSwing( () -> { return acc_action.getAccessibleActionCount(); }, 0);
-       }
+       public int get_n_actions () { return this.nactions; }
 
-       // FIXME: get and set methods seem wrong
        public String get_description (int i) {
-               String description = "<description>";
-               return description;
+               if (i >= nactions){
+                       return null;
+               }
+               if(descriptions[i] != null){
+                       return descriptions[i];
+               }
+               descriptions[i] = AtkUtil.invokeInSwing( () -> { return 
acc_action.getAccessibleActionDescription(i); }, "");
+               return descriptions[i];
        }
-
-        public boolean setDescription(int i, String description) {
-               if (description ==  acc_action.getAccessibleActionDescription(i) &&
-                   description != null)
-                     return true;
-               return false;
-        }
-
-       public String get_name (int i) {
-               String name = acc_action.getAccessibleActionDescription(i);
-               if (name == null) {
-                       name = "";
+       
+       public boolean setDescription(int i, String description) {
+               if (i >= nactions){
+                       return false;
                }
-
-               return name;
+               descriptions[i] = description;
+               return true;
        }
 
  /**
@@ -88,16 +87,21 @@ public class AtkAction {
   *          class is one way to work around that)
   */
        public String getLocalizedName (int i) {
+               if (i >= nactions){
+                       return null;
+               }
+               if (descriptions[i] != null){
+                       return descriptions[i];
+               }
                return AtkUtil.invokeInSwing ( () -> {
-                       String name        = ac.getAccessibleName();
-                       String description = acc_action.getAccessibleActionDescription(i);
-                       if (description == name && description != null)
-                               return description;
-                       if (description == null && name != null)
+                       descriptions[i] = acc_action.getAccessibleActionDescription(i);
+                       if (descriptions[i] != null)
+                               return descriptions[i];
+                       String name = ac.getAccessibleName();
+                       if (name != null)
                                return name;
-                       if (description != null)
-                               return description;
-                       return "";
+                       descriptions[i] = "";
+                       return descriptions[i];
                }, null);
        }
 


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