|
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 |
|