static AtkStateSet* jaw_object_ref_state_set (AtkObject *atk_obj) { JawObject *jaw_obj = JAW_OBJECT(atk_obj); AtkStateSet* state_set = jaw_obj->state_set; atk_state_set_clear_states( state_set ); jobject ac = jaw_obj->acc_context; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAccessibleContext = (*jniEnv)->FindClass( jniEnv, "javax/accessibility/AccessibleContext" ); jmethodID jmid = (*jniEnv)->GetMethodID( jniEnv, classAccessibleContext, "getAccessibleStateSet", "()Ljavax/accessibility/AccessibleStateSet;" ); jobject jstate_set = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid ); jclass classAccessibleStateSet = (*jniEnv)->FindClass( jniEnv, "javax/accessibility/AccessibleStateSet" ); jmid = (*jniEnv)->GetMethodID(jniEnv, classAccessibleStateSet, "toArray", "()[Ljavax/accessibility/AccessibleState;"); jobjectArray jstate_arr = (*jniEnv)->CallObjectMethod( jniEnv, jstate_set, jmid ); jsize jarr_size = (*jniEnv)->GetArrayLength(jniEnv, jstate_arr); jsize i; for (i = 0; i < jarr_size; i++) { jobject jstate = (*jniEnv)->GetObjectArrayElement( jniEnv, jstate_arr, i ); AtkStateType state_type = jaw_util_get_atk_state_type_from_java_state( jniEnv, jstate ); atk_state_set_add_state( state_set, state_type ); if (state_type == ATK_STATE_ENABLED) { atk_state_set_add_state( state_set, ATK_STATE_SENSITIVE ); } } g_object_ref(G_OBJECT(state_set)); return state_set; }
static void jaw_value_get_current_value (AtkValue *obj, GValue *value) { if (!value) { return; } JawObject *jaw_obj = JAW_OBJECT(obj); ValueData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_VALUE); jobject atk_value = data->atk_value; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAtkValue = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkValue"); jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAtkValue, "get_current_value", "()Ljava/lang/Number;"); jobject jnumber = (*jniEnv)->CallObjectMethod(jniEnv, atk_value, jmid); if (!jnumber) { return; } get_g_value_from_java_number(jniEnv, jnumber, value); }
static void free_callback_para (CallbackPara *para) { JNIEnv *jniEnv = jaw_util_get_jni_env(); if (jniEnv == NULL) { free_callback_para(para); return; } if (para->global_ac == NULL) { if (jaw_debug) g_warning("free_callback_para: para->global_ac == NULL"); free_callback_para(para); return; } (*jniEnv)->DeleteGlobalRef(jniEnv, para->global_ac); if (para->args) { (*jniEnv)->DeleteGlobalRef(jniEnv, para->args); } g_free(para); }
static gint jaw_table_get_selected_rows (AtkTable *table, gint **selected) { JawObject *jaw_obj = JAW_OBJECT(table); TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE); jobject atk_table = data->atk_table; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAtkTable = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkTable"); jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAtkTable, "get_selected_rows", "()[I"); jintArray jrowArray = (*jniEnv)->CallObjectMethod(jniEnv, atk_table, jmid); if (!jrowArray) { return 0; } jsize length = (*jniEnv)->GetArrayLength(jniEnv, jrowArray); jint *jrows = (*jniEnv)->GetIntArrayElements(jniEnv, jrowArray, NULL); gint *rows = g_new(gint, length); gint i; for (i = 0; i < length; i++) { rows[i] = (gint)jrows[i]; } (*jniEnv)->ReleaseIntArrayElements(jniEnv, jrowArray, jrows, JNI_ABORT); return (gint)length; }
static void jaw_object_finalize (GObject *gobject) { /* Customized finalize code */ JawObject *jaw_obj = JAW_OBJECT(gobject); AtkObject *atk_obj = ATK_OBJECT(gobject); JNIEnv *jniEnv = jaw_util_get_jni_env(); if (atk_obj->name != NULL) { (*jniEnv)->ReleaseStringUTFChars(jniEnv, jaw_obj->jstrName, atk_obj->name); (*jniEnv)->DeleteGlobalRef(jniEnv, jaw_obj->jstrName); jaw_obj->jstrName = NULL; atk_obj->name = NULL; } if (atk_obj->description != NULL) { (*jniEnv)->ReleaseStringUTFChars(jniEnv, jaw_obj->jstrDescription, atk_obj->description); (*jniEnv)->DeleteGlobalRef(jniEnv, jaw_obj->jstrDescription); jaw_obj->jstrDescription = NULL; atk_obj->description = NULL; } if (jaw_obj->state_set != NULL) { g_object_unref(G_OBJECT(jaw_obj->state_set)); } /* Chain up to parent's finalize method */ G_OBJECT_CLASS(jaw_object_parent_class)->finalize(gobject); }
static AtkObject* jaw_impl_ref_child (AtkObject *atk_obj, gint i) { JawObject *jaw_obj = JAW_OBJECT(atk_obj); jobject ac = jaw_obj->acc_context; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAccessibleContext = (*jniEnv)->FindClass(jniEnv, "javax/accessibility/AccessibleContext" ); jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAccessibleContext, "getAccessibleChild", "(I)Ljavax/accessibility/Accessible;" ); jobject jchild = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid, i ); if (jchild == NULL) { return NULL; } jclass classAccessible = (*jniEnv)->FindClass( jniEnv, "javax/accessibility/Accessible" ); 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 ); if (G_OBJECT(obj) != NULL) g_object_ref(G_OBJECT(obj)); return obj; }
static gchar* jaw_text_get_selection (AtkText *text, gint selection_num, gint *start_offset, gint *end_offset) { JawObject *jaw_obj = JAW_OBJECT(text); TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT); jobject atk_text = data->atk_text; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAtkText = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkText"); jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAtkText, "get_selection", "()Lorg/GNOME/Accessibility/AtkText$StringSequence;"); jobject jStrSeq = (*jniEnv)->CallObjectMethod(jniEnv, atk_text, jmid); if (jStrSeq == NULL) { return NULL; } jclass classStringSeq = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkText$StringSequence"); jfieldID jfidStr = (*jniEnv)->GetFieldID(jniEnv, classStringSeq, "str", "Ljava/lang/String;"); jfieldID jfidStart = (*jniEnv)->GetFieldID(jniEnv, classStringSeq, "start_offset", "I"); jfieldID jfidEnd = (*jniEnv)->GetFieldID(jniEnv, classStringSeq, "end_offset", "I"); jstring jStr = (*jniEnv)->GetObjectField(jniEnv, jStrSeq, jfidStr); *start_offset = (gint)(*jniEnv)->GetIntField(jniEnv, jStrSeq, jfidStart); *end_offset = (gint)(*jniEnv)->GetIntField(jniEnv, jStrSeq, jfidEnd); return jaw_text_get_gtext_from_jstr(jniEnv, data, jStr); }
static G_CONST_RETURN gchar* jaw_object_get_name (AtkObject *atk_obj) { JawObject *jaw_obj = JAW_OBJECT(atk_obj); jobject ac = jaw_obj->acc_context; JNIEnv *jniEnv = jaw_util_get_jni_env(); if (atk_object_get_role(atk_obj) == ATK_ROLE_COMBO_BOX && atk_object_get_n_accessible_children(atk_obj) == 1) { AtkSelection *selection = ATK_SELECTION(atk_obj); if (selection != NULL) { AtkObject *child = atk_selection_ref_selection(selection, 0); if (child != NULL) { return atk_object_get_name(child); } } } jclass classAccessibleContext = (*jniEnv)->FindClass( jniEnv, "javax/accessibility/AccessibleContext" ); jmethodID jmid = (*jniEnv)->GetMethodID( jniEnv, classAccessibleContext, "getAccessibleName", "()Ljava/lang/String;" ); jstring jstr = (*jniEnv)->CallObjectMethod( jniEnv, ac, jmid ); if (atk_obj->name != NULL) { (*jniEnv)->ReleaseStringUTFChars(jniEnv, jaw_obj->jstrName, atk_obj->name); (*jniEnv)->DeleteGlobalRef(jniEnv, jaw_obj->jstrName); } if (jstr != NULL) { jaw_obj->jstrName = (*jniEnv)->NewGlobalRef(jniEnv, jstr); atk_obj->name = (gchar*)(*jniEnv)->GetStringUTFChars(jniEnv, jaw_obj->jstrName, NULL); } return atk_obj->name; }
gboolean jaw_util_is_same_jobject(gconstpointer a, gconstpointer b) { JNIEnv *jniEnv = jaw_util_get_jni_env(); if ( (*jniEnv)->IsSameObject(jniEnv, (jobject)a, (jobject)b) ) { return TRUE; } else { return FALSE; } }
JawImpl* jaw_impl_get_instance (JNIEnv *jniEnv, jobject ac) { JawImpl *jaw_impl; jniEnv = jaw_util_get_jni_env(); if (jniEnv == NULL) return NULL; g_mutex_lock(&objectTableMutex); if (objectTable == NULL) objectTable = g_hash_table_new (NULL, NULL); g_mutex_unlock(&objectTableMutex); jaw_impl = object_table_lookup(jniEnv, ac); if (jaw_impl == NULL) { jobject global_ac = (*jniEnv)->NewGlobalRef(jniEnv, ac); if (global_ac != NULL) { guint tflag = jaw_util_get_tflag_from_jobj(jniEnv, global_ac); jaw_impl = (JawImpl*)g_object_new(JAW_TYPE_IMPL(tflag), NULL); if (jaw_impl != NULL) { JawObject *jaw_obj = JAW_OBJECT(jaw_impl); if (jaw_obj != NULL) { jaw_obj->acc_context = global_ac; jaw_obj->storedData = g_hash_table_new(g_str_hash, g_str_equal); aggregate_interface(jniEnv, jaw_obj, tflag); atk_object_initialize(ATK_OBJECT(jaw_impl), NULL); object_table_insert(jniEnv, global_ac, jaw_impl); } else { if (jaw_debug) g_warning("jaw_impl_get_instance: jaw_obj == NULL"); return NULL; } } else { if (jaw_debug) g_warning("jaw_impl_get_instance: jaw_impl == NULL"); } } else { if (jaw_debug) g_warning("jaw_impl_get_instance: global_ac == NULL"); return NULL; } } return jaw_impl; }
static gdouble jaw_value_get_increment (AtkValue *obj) { JawObject *jaw_obj = JAW_OBJECT(obj); ValueData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_VALUE); jobject atk_value = data->atk_value; JNIEnv *env = jaw_util_get_jni_env(); jclass classAtkValue = (*env)->FindClass(env, "org/GNOME/Accessibility/AtkValue"); jmethodID jmid = (*env)->GetMethodID(env, classAtkValue, "getIncrement", "()D"); return (*env)->CallDoubleMethod(env, atk_value, jmid); }
void jaw_value_data_finalize (gpointer p) { ValueData *data = (ValueData*)p; JNIEnv *jniEnv = jaw_util_get_jni_env(); if (data && data->atk_value) { (*jniEnv)->DeleteGlobalRef(jniEnv, data->atk_value); data->atk_value = NULL; } }
gpointer jaw_text_data_init (jobject ac) { TextData *data = g_new0(TextData, 1); JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classText = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkText"); jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classText, "<init>", "(Ljavax/accessibility/AccessibleContext;)V"); jobject jatk_text = (*jniEnv)->NewObject(jniEnv, classText, jmid, ac); data->atk_text = (*jniEnv)->NewGlobalRef(jniEnv, jatk_text); return data; }
static gint jaw_object_get_n_children (AtkObject *atk_obj) { JawObject *jaw_obj = JAW_OBJECT(atk_obj); jobject ac = jaw_obj->acc_context; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAccessibleContext = (*jniEnv)->FindClass( jniEnv, "javax/accessibility/AccessibleContext" ); jmethodID jmid = (*jniEnv)->GetMethodID( jniEnv, classAccessibleContext, "getAccessibleChildrenCount", "()I"); jint count = (*jniEnv)->CallIntMethod( jniEnv, ac, jmid ); return (gint)count; }
static gint jaw_table_get_n_rows (AtkTable *table) { JawObject *jaw_obj = JAW_OBJECT(table); TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE); jobject atk_table = data->atk_table; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAtkTable = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkTable"); jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAtkTable, "get_n_rows", "()I"); jint jrows = (*jniEnv)->CallIntMethod(jniEnv, atk_table, jmid); return (gint)jrows; }
static gint jaw_table_get_row_extent_at (AtkTable *table, gint row, gint column) { JawObject *jaw_obj = JAW_OBJECT(table); TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE); jobject atk_table = data->atk_table; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAtkTable = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkTable"); jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAtkTable, "get_row_extent_at", "(II)I"); jint jextent = (*jniEnv)->CallIntMethod(jniEnv, atk_table, jmid, (jint)row, (jint)column); return (gint)jextent; }
static gint jaw_text_get_n_selections (AtkText *text) { JawObject *jaw_obj = JAW_OBJECT(text); TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT); jobject atk_text = data->atk_text; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAtkText = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkText"); jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAtkText, "get_n_selections", "()I"); jint jselections = (*jniEnv)->CallIntMethod(jniEnv, atk_text, jmid); return (gint)jselections; }
static gunichar jaw_text_get_character_at_offset (AtkText *text, gint offset) { JawObject *jaw_obj = JAW_OBJECT(text); TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT); jobject atk_text = data->atk_text; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAtkText = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkText"); jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAtkText, "get_character_at_offset", "(I)C"); jchar jcharacter = (*jniEnv)->CallCharMethod( jniEnv, atk_text, jmid, (jint)offset ); return (gunichar)jcharacter; }
static gint jaw_text_get_offset_at_point (AtkText *text, gint x, gint y, AtkCoordType coords) { JawObject *jaw_obj = JAW_OBJECT(text); TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT); jobject atk_text = data->atk_text; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAtkText = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkText"); jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAtkText, "get_offset_at_point", "(III)I"); jint joffset = (*jniEnv)->CallIntMethod(jniEnv, atk_text, jmid, (jint)x, (jint)y, (jint)coords); return (gint)joffset; }
static gchar* jaw_text_get_text (AtkText *text, gint start_offset, gint end_offset) { JawObject *jaw_obj = JAW_OBJECT(text); TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT); jobject atk_text = data->atk_text; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAtkText = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkText"); jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAtkText, "get_text", "(II)Ljava/lang/String;"); jstring jstr = (*jniEnv)->CallObjectMethod( jniEnv, atk_text, jmid, (jint)start_offset, (jint)end_offset ); return jaw_text_get_gtext_from_jstr(jniEnv, data, jstr); }
static gboolean component_removed_handler (gpointer p) { JNIEnv *jniEnv; CallbackPara *para = (CallbackPara*)p; jobject global_ac = para->global_ac; jniEnv = jaw_util_get_jni_env(); if (jniEnv == NULL) { if (jaw_debug) g_warning("component_removed_handler: env == NULL"); free_callback_para(para); return G_SOURCE_REMOVE; } if (global_ac == NULL) { if (jaw_debug) g_warning("component_removed_handler: global_ac == NULL"); free_callback_para(para); return G_SOURCE_REMOVE; } JawImpl* jaw_impl = jaw_impl_get_instance(jniEnv, global_ac); if (jaw_impl == NULL) { if (jaw_debug) g_warning("component_removed_handler: jaw_impl == NULL"); free_callback_para(para); return G_SOURCE_REMOVE; } AtkObject* atk_obj = ATK_OBJECT(jaw_impl); if (atk_obj == NULL) { if (jaw_debug) g_warning("component_removed_handler: atk_obj == NULL"); free_callback_para(para); return G_SOURCE_REMOVE; } if (atk_object_get_role(atk_obj) == ATK_ROLE_TOOL_TIP) atk_object_notify_state_change(atk_obj, ATK_STATE_SHOWING, FALSE); free_callback_para(para); return G_SOURCE_REMOVE; }
static AtkRange* jaw_value_get_range(AtkValue *obj) { JawObject *jaw_obj = JAW_OBJECT(obj); ValueData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_VALUE); jobject atk_value = data->atk_value; JNIEnv *env = jaw_util_get_jni_env(); jclass classAtkValue = (*env)->FindClass(env, "org/GNOME/Accessibility/AtkValue"); jmethodID jmidMin = (*env)->GetMethodID(env, classAtkValue, "getMinimumValue", "()D"); jmethodID jmidMax = (*env)->GetMethodID(env, classAtkValue, "getMaximumValue", "()D"); return atk_range_new((gdouble)(*env)->CallDoubleMethod(env, atk_value, jmidMin), (gdouble)(*env)->CallDoubleMethod(env, atk_value, jmidMax), NULL); // NULL description }
/** * Signal is emitted when the position or size of the component changes. */ static gboolean bounds_changed_handler (gpointer p) { JNIEnv *jniEnv; CallbackPara *para = (CallbackPara*)p; jobject global_ac = para->global_ac; jniEnv = jaw_util_get_jni_env(); if (jniEnv == NULL) { if (jaw_debug) g_warning("bounds_changed_handler: env == NULL"); free_callback_para(para); return G_SOURCE_REMOVE; } if (global_ac == NULL) { if (jaw_debug) g_warning("bounds_changed_handler: global_ac == NULL"); free_callback_para(para); return G_SOURCE_REMOVE; } JawImpl* jaw_impl = jaw_impl_get_instance(jniEnv, global_ac); if (jaw_impl == NULL) { if (jaw_debug) g_warning("bounds_changed_handler: jaw_impl == NULL"); free_callback_para(para); return G_SOURCE_REMOVE; } AtkObject* atk_obj = ATK_OBJECT(jaw_impl); if (atk_obj == NULL) { if (jaw_debug) g_warning("bounds_changed_handler: atk_obj == NULL"); free_callback_para(para); return G_SOURCE_REMOVE; } g_signal_emit_by_name(atk_obj, "bounds_changed"); free_callback_para(para); return G_SOURCE_REMOVE; }
static gint jaw_object_get_index_in_parent (AtkObject *atk_obj) { if (jaw_toplevel_get_child_index(JAW_TOPLEVEL(atk_get_root()), atk_obj) != -1) { return jaw_toplevel_get_child_index(JAW_TOPLEVEL(atk_get_root()), atk_obj); } JawObject *jaw_obj = JAW_OBJECT(atk_obj); jobject ac = jaw_obj->acc_context; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAccessibleContext = (*jniEnv)->FindClass( jniEnv, "javax/accessibility/AccessibleContext" ); jmethodID jmid = (*jniEnv)->GetMethodID( jniEnv, classAccessibleContext, "getAccessibleIndexInParent", "()I"); jint index = (*jniEnv)->CallIntMethod( jniEnv, ac, jmid ); return (gint)index; }
static void jaw_impl_initialize (AtkObject *atk_obj, gpointer data) { ATK_OBJECT_CLASS(jaw_impl_parent_class)->initialize(atk_obj, data); JawObject *jaw_obj = JAW_OBJECT(atk_obj); jobject ac = jaw_obj->acc_context; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAtkWrapper = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkWrapper"); jmethodID jmid = (*jniEnv)->GetStaticMethodID(jniEnv, classAtkWrapper, "registerPropertyChangeListener", "(Ljavax/accessibility/AccessibleContext;)V"); (*jniEnv)->CallStaticVoidMethod(jniEnv, classAtkWrapper, jmid, ac); }
void jaw_table_data_finalize (gpointer p) { TableData *data = (TableData*)p; JNIEnv *jniEnv = jaw_util_get_jni_env(); if (data && data->atk_table) { if (data->description != NULL) { (*jniEnv)->ReleaseStringUTFChars(jniEnv, data->jstrDescription, data->description); (*jniEnv)->DeleteGlobalRef(jniEnv, data->jstrDescription); data->jstrDescription = NULL; data->description = NULL; } (*jniEnv)->DeleteGlobalRef(jniEnv, data->atk_table); data->atk_table = NULL; } }
static gboolean jaw_table_is_selected (AtkTable *table, gint row, gint column) { JawObject *jaw_obj = JAW_OBJECT(table); TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE); jobject atk_table = data->atk_table; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAtkTable = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkTable"); jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAtkTable, "is_selected", "(II)Z"); jboolean jselected = (*jniEnv)->CallBooleanMethod(jniEnv, atk_table, jmid, (jint)row, (jint)column); if (jselected == JNI_TRUE) { return TRUE; } return FALSE; }
void jaw_text_data_finalize (gpointer p) { TextData *data = (TextData*)p; JNIEnv *jniEnv = jaw_util_get_jni_env(); if (data && data->atk_text) { if (data->text != NULL) { (*jniEnv)->ReleaseStringUTFChars(jniEnv, data->jstrText, data->text); (*jniEnv)->DeleteGlobalRef(jniEnv, data->jstrText); data->jstrText = NULL; data->text = NULL; } (*jniEnv)->DeleteGlobalRef(jniEnv, data->atk_text); data->atk_text = NULL; } }
static void jaw_value_set_value(AtkValue *obj, const gdouble value) { if (!value) return; JawObject *jaw_obj = JAW_OBJECT(obj); ValueData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_VALUE); jobject atk_value = data->atk_value; JNIEnv *env = jaw_util_get_jni_env(); jclass classAtkValue = (*env)->FindClass(env, "org/GNOME/Accessibility/AtkValue"); jmethodID jmid = (*env)->GetMethodID(env, classAtkValue, "setValue", "(Ljava/lang/Number;)V"); (*env)->CallVoidMethod(env, atk_value, jmid,(jdouble)value); }
static gboolean jaw_text_set_caret_offset (AtkText *text, gint offset) { JawObject *jaw_obj = JAW_OBJECT(text); TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT); jobject atk_text = data->atk_text; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAtkText = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkText"); jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAtkText, "set_caret_offset", "(I)Z"); jboolean jresult = (*jniEnv)->CallBooleanMethod(jniEnv, atk_text, jmid, (jint)offset); if (jresult == JNI_TRUE) { return TRUE; } else { return FALSE; } }