[java-atk-wrapper] Fix getting object's locale
- From: Samuel Thibault <sthibaul src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [java-atk-wrapper] Fix getting object's locale
- Date: Sun, 28 Jul 2019 09:22:11 +0000 (UTC)
commit e7e79accfe5c5fbb8e7182b1970a2ebe80ccbd78
Author: Samuel Thibault <samuel thibault ens-lyon org>
Date: Sun Jul 28 11:22:04 2019 +0200
Fix getting object's locale
jni/src/jawobject.c | 33 +++++++++++++++++++++-----
jni/src/jawobject.h | 2 ++
wrapper/org/GNOME/Accessibility/AtkObject.java | 20 ++++++++++++++--
3 files changed, 47 insertions(+), 8 deletions(-)
---
diff --git a/jni/src/jawobject.c b/jni/src/jawobject.c
index 5f63b0b..f05091f 100644
--- a/jni/src/jawobject.c
+++ b/jni/src/jawobject.c
@@ -194,6 +194,14 @@ jaw_object_finalize (GObject *gobject)
atk_obj->description = NULL;
}
+ if (jaw_obj->locale != NULL)
+ {
+ (*jniEnv)->ReleaseStringUTFChars(jniEnv, jaw_obj->jstrLocale, jaw_obj->locale);
+ (*jniEnv)->DeleteGlobalRef(jniEnv, jaw_obj->jstrLocale);
+ jaw_obj->jstrLocale = NULL;
+ jaw_obj->locale = NULL;
+ }
+
if (G_OBJECT(jaw_obj->state_set) != NULL)
{
g_object_unref(G_OBJECT(jaw_obj->state_set));
@@ -515,15 +523,28 @@ static const gchar *jaw_object_get_object_locale (AtkObject *atk_obj)
}
jclass atkObject = (*jniEnv)->FindClass (jniEnv, "org/GNOME/Accessibility/AtkObject");
- jmethodID jmid = (*jniEnv)->GetStaticMethodID (jniEnv, atkObject, "getLocale",
"(Ljavax/accessibility/AccessibleContext;)Ljavax/accessibility/Locale;");
- jobject locale = (*jniEnv)->CallStaticObjectMethod (jniEnv, atkObject, jmid, ac);
+ jmethodID jmid = (*jniEnv)->GetStaticMethodID (jniEnv, atkObject, "getLocale",
"(Ljavax/accessibility/AccessibleContext;)Ljava/lang/String;");
+ jobject jstr = (*jniEnv)->CallStaticObjectMethod (jniEnv, atkObject, jmid, ac);
(*jniEnv)->DeleteGlobalRef(jniEnv, ac);
- JawImpl *target_obj = jaw_impl_get_instance_from_jaw(jniEnv, locale);
- if(target_obj == NULL)
- return NULL;
- return atk_object_get_object_locale((AtkObject*) target_obj);
+ if (jaw_obj->locale != NULL)
+ {
+ (*jniEnv)->ReleaseStringUTFChars(jniEnv, jaw_obj->jstrLocale, jaw_obj->locale);
+ (*jniEnv)->DeleteGlobalRef(jniEnv, jaw_obj->jstrLocale);
+ jaw_obj->jstrLocale = NULL;
+ jaw_obj->locale = NULL;
+ }
+
+ if (jstr != NULL)
+ {
+ jaw_obj->jstrLocale = (*jniEnv)->NewGlobalRef(jniEnv, jstr);
+ jaw_obj->locale = (gchar*)(*jniEnv)->GetStringUTFChars(jniEnv,
+ jaw_obj->jstrLocale,
+ NULL);
+ }
+
+ return jaw_obj->locale;
}
static AtkRelationSet*
diff --git a/jni/src/jawobject.h b/jni/src/jawobject.h
index ab13a56..158011f 100644
--- a/jni/src/jawobject.h
+++ b/jni/src/jawobject.h
@@ -42,6 +42,8 @@ struct _JawObject
jobject acc_context;
jstring jstrName;
jstring jstrDescription;
+ jstring jstrLocale;
+ gchar *locale;
AtkStateSet *state_set;
GHashTable *storedData;
diff --git a/wrapper/org/GNOME/Accessibility/AtkObject.java b/wrapper/org/GNOME/Accessibility/AtkObject.java
index 5f5fd59..1ce61f6 100644
--- a/wrapper/org/GNOME/Accessibility/AtkObject.java
+++ b/wrapper/org/GNOME/Accessibility/AtkObject.java
@@ -153,8 +153,24 @@ public class AtkObject{
}, null);
}
- public static Locale getLocale(AccessibleContext ac){
- return AtkUtil.invokeInSwing( () -> { return ac.getLocale(); }, null);
+ public static String getLocale(AccessibleContext ac){
+ return AtkUtil.invokeInSwing( () -> {
+ Locale l = ac.getLocale();
+ String locale = l.getLanguage();
+ String country = l.getCountry();
+ String script = l.getScript();
+ String variant = l.getVariant();
+ if (country.length() != 0) {
+ locale += "_" + country;
+ }
+ if (script.length() != 0) {
+ locale += "@" + script;
+ }
+ if (variant.length() != 0) {
+ locale += "@" + variant;
+ }
+ return locale;
+ }, null);
}
public static class WrapKeyAndTarget{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]