Blame jni/src/jawaction.c

Packit Service 31d16d
/*
Packit Service 31d16d
 * Java ATK Wrapper for GNOME
Packit Service 31d16d
 * Copyright (C) 2009 Sun Microsystems Inc.
Packit Service 31d16d
 *
Packit Service 31d16d
 * This library is free software; you can redistribute it and/or
Packit Service 31d16d
 * modify it under the terms of the GNU Lesser General Public
Packit Service 31d16d
 * License as published by the Free Software Foundation; either
Packit Service 31d16d
 * version 2.1 of the License, or (at your option) any later version.
Packit Service 31d16d
 *
Packit Service 31d16d
 * This library is distributed in the hope that it will be useful,
Packit Service 31d16d
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 31d16d
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 31d16d
 * Lesser General Public License for more details.
Packit Service 31d16d
 *
Packit Service 31d16d
 * You should have received a copy of the GNU Lesser General Public
Packit Service 31d16d
 * License along with this library; if not, write to the Free Software
Packit Service 31d16d
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit Service 31d16d
 */
Packit Service 31d16d
Packit Service 31d16d
#include <atk/atk.h>
Packit Service 31d16d
#include <glib.h>
Packit Service 31d16d
#include "jawimpl.h"
Packit Service 31d16d
#include "jawutil.h"
Packit Service 31d16d
Packit Service 31d16d
extern void	jaw_action_interface_init (AtkActionIface*);
Packit Service 31d16d
extern gpointer	jaw_action_data_init (jobject ac);
Packit Service 31d16d
extern void	jaw_action_data_finalize (gpointer);
Packit Service 31d16d
Packit Service 31d16d
static gboolean jaw_action_do_action(AtkAction *action, gint i);
Packit Service 31d16d
static gint jaw_action_get_n_actions(AtkAction *action);
Packit Service 31d16d
static const gchar* jaw_action_get_description(AtkAction *action, gint i);
Packit Service 31d16d
static const gchar* jaw_action_get_name(AtkAction	*action, gint i);
Packit Service 31d16d
static const gchar* jaw_action_get_keybinding (AtkAction *action, gint i);
Packit Service 31d16d
static gboolean jaw_action_set_description (AtkAction *action, gint i, const gchar *description);
Packit Service 31d16d
/*static const gchar*	jaw_get_localized_name			(AtkAction	*action,
Packit Service 31d16d
									 gint		i);*/
Packit Service 31d16d
Packit Service 31d16d
typedef struct _ActionData {
Packit Service 31d16d
  jobject atk_action;
Packit Service 31d16d
  gchar* action_name;
Packit Service 31d16d
  jstring jstrActionName;
Packit Service 31d16d
  gchar* action_description;
Packit Service 31d16d
  jstring jstrActionDescription;
Packit Service 31d16d
  gchar* action_keybinding;
Packit Service 31d16d
  jstring jstrActionKeybinding;
Packit Service 31d16d
} ActionData;
Packit Service 31d16d
Packit Service 31d16d
void
Packit Service 31d16d
jaw_action_interface_init (AtkActionIface *iface)
Packit Service 31d16d
{
Packit Service 31d16d
  iface->do_action = jaw_action_do_action;
Packit Service 31d16d
  iface->get_n_actions = jaw_action_get_n_actions;
Packit Service 31d16d
  iface->get_description = jaw_action_get_description;
Packit Service 31d16d
  iface->get_name = jaw_action_get_name;
Packit Service 31d16d
  iface->get_keybinding = jaw_action_get_keybinding;
Packit Service 31d16d
  iface->set_description = jaw_action_set_description;
Packit Service 31d16d
  iface->get_localized_name = NULL; /*jaw_get_localized_name;*/
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
gpointer
Packit Service 31d16d
jaw_action_data_init (jobject ac)
Packit Service 31d16d
{
Packit Service 31d16d
  ActionData *data = g_new0(ActionData, 1);
Packit Service 31d16d
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
  jclass classAction = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                            "org/GNOME/Accessibility/AtkAction");
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAction,
Packit Service 31d16d
                                          "<init>",
Packit Service 31d16d
                                          "(Ljavax/accessibility/AccessibleContext;)V");
Packit Service 31d16d
  jobject jatk_action = (*jniEnv)->NewObject(jniEnv, classAction, jmid, ac);
Packit Service 31d16d
  data->atk_action = (*jniEnv)->NewGlobalRef(jniEnv, jatk_action);
Packit Service 31d16d
Packit Service 31d16d
  return data;
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
void
Packit Service 31d16d
jaw_action_data_finalize (gpointer p)
Packit Service 31d16d
{
Packit Service 31d16d
  ActionData *data = (ActionData*)p;
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
Packit Service 31d16d
  if (data && data->atk_action) {
Packit Service 31d16d
    if (data->action_name != NULL) {
Packit Service 31d16d
      (*jniEnv)->ReleaseStringUTFChars(jniEnv,
Packit Service 31d16d
                                       data->jstrActionName,
Packit Service 31d16d
                                       data->action_name);
Packit Service 31d16d
      (*jniEnv)->DeleteGlobalRef(jniEnv, data->jstrActionName);
Packit Service 31d16d
      data->jstrActionName = NULL;
Packit Service 31d16d
      data->action_name = NULL;
Packit Service 31d16d
    }
Packit Service 31d16d
Packit Service 31d16d
    if (data->action_description != NULL) {
Packit Service 31d16d
      (*jniEnv)->ReleaseStringUTFChars(jniEnv,
Packit Service 31d16d
                                       data->jstrActionDescription,
Packit Service 31d16d
                                       data->action_description);
Packit Service 31d16d
      (*jniEnv)->DeleteGlobalRef(jniEnv, data->jstrActionDescription);
Packit Service 31d16d
      data->jstrActionDescription = NULL;
Packit Service 31d16d
      data->action_description = NULL;
Packit Service 31d16d
    }
Packit Service 31d16d
Packit Service 31d16d
    if (data->action_keybinding != NULL) {
Packit Service 31d16d
      (*jniEnv)->ReleaseStringUTFChars(jniEnv,
Packit Service 31d16d
                                       data->jstrActionKeybinding,
Packit Service 31d16d
                                       data->action_keybinding);
Packit Service 31d16d
      (*jniEnv)->DeleteGlobalRef(jniEnv, data->jstrActionKeybinding);
Packit Service 31d16d
      data->jstrActionKeybinding = NULL;
Packit Service 31d16d
      data->action_keybinding = NULL;
Packit Service 31d16d
    }
Packit Service 31d16d
Packit Service 31d16d
    (*jniEnv)->DeleteGlobalRef(jniEnv, data->atk_action);
Packit Service 31d16d
    data->atk_action = NULL;
Packit Service 31d16d
  }
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static gboolean
Packit Service 31d16d
jaw_action_do_action (AtkAction *action, gint i)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(action);
Packit Service 31d16d
  ActionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_ACTION);
Packit Service 31d16d
  jobject atk_action = data->atk_action;
Packit Service 31d16d
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
  jclass classAtkAction = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                               "org/GNOME/Accessibility/AtkAction");
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAtkAction,
Packit Service 31d16d
                                          "do_action",
Packit Service 31d16d
                                          "(I)Z");
Packit Service 31d16d
  jboolean jresult = (*jniEnv)->CallBooleanMethod(jniEnv,
Packit Service 31d16d
                                                  atk_action,
Packit Service 31d16d
                                                  jmid,
Packit Service 31d16d
                                                  (jint)i);
Packit Service 31d16d
Packit Service 31d16d
  if (jresult == JNI_TRUE)
Packit Service 31d16d
    return TRUE;
Packit Service 31d16d
Packit Service 31d16d
  return FALSE;
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static gint
Packit Service 31d16d
jaw_action_get_n_actions (AtkAction *action)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(action);
Packit Service 31d16d
  ActionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_ACTION);
Packit Service 31d16d
  jobject atk_action = data->atk_action;
Packit Service 31d16d
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
  jclass classAtkAction = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                               "org/GNOME/Accessibility/AtkAction");
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAtkAction,
Packit Service 31d16d
                                          "get_n_actions", "()I");
Packit Service 31d16d
Packit Service 31d16d
  return (gint)(*jniEnv)->CallIntMethod(jniEnv, atk_action, jmid);
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static const gchar*
Packit Service 31d16d
jaw_action_get_description (AtkAction *action, gint i)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(action);
Packit Service 31d16d
  ActionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_ACTION);
Packit Service 31d16d
  jobject atk_action = data->atk_action;
Packit Service 31d16d
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
  jclass classAtkAction = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                               "org/GNOME/Accessibility/AtkAction");
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAtkAction,
Packit Service 31d16d
                                          "get_description",
Packit Service 31d16d
                                          "(I)Ljava/lang/String;");
Packit Service 31d16d
  jstring jstr = (*jniEnv)->CallObjectMethod(jniEnv,
Packit Service 31d16d
                                             atk_action,
Packit Service 31d16d
                                             jmid,
Packit Service 31d16d
                                             (jint)i);
Packit Service 31d16d
Packit Service 31d16d
  if (data->action_description != NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    (*jniEnv)->ReleaseStringUTFChars(jniEnv,
Packit Service 31d16d
                                     data->jstrActionDescription,
Packit Service 31d16d
                                     data->action_description);
Packit Service 31d16d
    (*jniEnv)->DeleteGlobalRef(jniEnv, data->jstrActionDescription);
Packit Service 31d16d
  }
Packit Service 31d16d
Packit Service 31d16d
  data->jstrActionDescription = (*jniEnv)->NewGlobalRef(jniEnv, jstr);
Packit Service 31d16d
  data->action_description = (gchar*)(*jniEnv)->GetStringUTFChars(jniEnv,
Packit Service 31d16d
                                                                  data->jstrActionDescription,
Packit Service 31d16d
                                                                  NULL);
Packit Service 31d16d
Packit Service 31d16d
  return data->action_description;
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static gboolean
Packit Service 31d16d
jaw_action_set_description (AtkAction *action, gint i, const gchar *description)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(action);
Packit Service 31d16d
  ActionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_ACTION);
Packit Service 31d16d
  jobject atk_action = data->atk_action;
Packit Service 31d16d
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
  jclass classAtkAction = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                               "org/GNOME/Accessibility/AtkAction");
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAtkAction,
Packit Service 31d16d
                                          "setDescription",
Packit Service 31d16d
                                          "(ILjava/lang/String;)Z");
Packit Service 31d16d
  jboolean jisset = (*jniEnv)->CallBooleanMethod(jniEnv,
Packit Service 31d16d
                                                 atk_action,
Packit Service 31d16d
                                                 jmid,
Packit Service 31d16d
                                                 (jint)i,
Packit Service 31d16d
                                                 (jstring)description);
Packit Service 31d16d
Packit Service 31d16d
  if (jisset == JNI_TRUE)
Packit Service 31d16d
  {
Packit Service 31d16d
    return TRUE;
Packit Service 31d16d
  } else {
Packit Service 31d16d
    return FALSE;
Packit Service 31d16d
  }
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static const gchar*
Packit Service 31d16d
jaw_action_get_name (AtkAction *action, gint i)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(action);
Packit Service 31d16d
  ActionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_ACTION);
Packit Service 31d16d
  jobject atk_action = data->atk_action;
Packit Service 31d16d
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
  jclass classAtkAction = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                               "org/GNOME/Accessibility/AtkAction");
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAtkAction,
Packit Service 31d16d
                                          "get_name",
Packit Service 31d16d
                                          "(I)Ljava/lang/String;");
Packit Service 31d16d
  jstring jstr = (*jniEnv)->CallObjectMethod(jniEnv, atk_action, jmid, (jint)i);
Packit Service 31d16d
Packit Service 31d16d
  if (data->action_name != NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    (*jniEnv)->ReleaseStringUTFChars(jniEnv,
Packit Service 31d16d
                                     data->jstrActionName,
Packit Service 31d16d
                                     data->action_name);
Packit Service 31d16d
    (*jniEnv)->DeleteGlobalRef(jniEnv, data->jstrActionName);
Packit Service 31d16d
  }
Packit Service 31d16d
Packit Service 31d16d
  data->jstrActionName = (*jniEnv)->NewGlobalRef(jniEnv, jstr);
Packit Service 31d16d
  data->action_name = (gchar*)(*jniEnv)->GetStringUTFChars(jniEnv,
Packit Service 31d16d
                                                           data->jstrActionName,
Packit Service 31d16d
                                                           NULL);
Packit Service 31d16d
Packit Service 31d16d
  return data->action_name;
Packit Service 31d16d
}
Packit Service 31d16d
Packit Service 31d16d
static const gchar*
Packit Service 31d16d
jaw_action_get_keybinding (AtkAction *action, gint i)
Packit Service 31d16d
{
Packit Service 31d16d
  JawObject *jaw_obj = JAW_OBJECT(action);
Packit Service 31d16d
  if (jaw_obj == NULL)
Packit Service 31d16d
    return NULL;
Packit Service 31d16d
Packit Service 31d16d
  ActionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_ACTION);
Packit Service 31d16d
  jobject atk_action = data->atk_action;
Packit Service 31d16d
Packit Service 31d16d
  JNIEnv *jniEnv = jaw_util_get_jni_env();
Packit Service 31d16d
  jclass classAtkAction = (*jniEnv)->FindClass(jniEnv,
Packit Service 31d16d
                                               "org/GNOME/Accessibility/AtkAction");
Packit Service 31d16d
  jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv,
Packit Service 31d16d
                                          classAtkAction,
Packit Service 31d16d
                                          "get_keybinding",
Packit Service 31d16d
                                          "(I)Ljava/lang/String;");
Packit Service 31d16d
  jstring jstr = (*jniEnv)->CallObjectMethod(jniEnv, atk_action, jmid, (jint)i);
Packit Service 31d16d
Packit Service 31d16d
  if (data->action_keybinding != NULL)
Packit Service 31d16d
  {
Packit Service 31d16d
    (*jniEnv)->ReleaseStringUTFChars(jniEnv,
Packit Service 31d16d
                                     data->jstrActionKeybinding,
Packit Service 31d16d
                                     data->action_keybinding);
Packit Service 31d16d
Packit Service 31d16d
    (*jniEnv)->DeleteGlobalRef(jniEnv, data->jstrActionKeybinding);
Packit Service 31d16d
  }
Packit Service 31d16d
Packit Service 31d16d
  data->jstrActionKeybinding = (*jniEnv)->NewGlobalRef(jniEnv, jstr);
Packit Service 31d16d
  data->action_keybinding = (gchar*)(*jniEnv)->GetStringUTFChars(jniEnv,
Packit Service 31d16d
                                                                 data->jstrActionKeybinding,
Packit Service 31d16d
                                                                 NULL);
Packit Service 31d16d
  return data->action_keybinding;
Packit Service 31d16d
}
Packit Service 31d16d