From 7d6f837dea4703952b670bc6731937f4ad43837e Mon Sep 17 00:00:00 2001 From: khanhduytran0 Date: Fri, 22 Jan 2021 13:50:33 +0700 Subject: [PATCH] [Input pipe] Try to get copy-paste works --- app_pojavlauncher/src/main/jni/input_bridge_v3.c | 8 ++++---- app_pojavlauncher/src/main/jni/utils.c | 7 +++++++ app_pojavlauncher/src/main/jni/utils.h | 1 + 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app_pojavlauncher/src/main/jni/input_bridge_v3.c b/app_pojavlauncher/src/main/jni/input_bridge_v3.c index d5b399e23..fc105b811 100644 --- a/app_pojavlauncher/src/main/jni/input_bridge_v3.c +++ b/app_pojavlauncher/src/main/jni/input_bridge_v3.c @@ -180,17 +180,17 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeAttachThread return result; } -JNIEXPORT jstring JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeClipboard(JNIEnv* env, jclass clazz, jint action, jstring copy) { +JNIEXPORT jstring JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeClipboard(JNIEnv* env, jclass clazz, jint action, jstring copySrc) { #ifdef DEBUG LOGD("Debug: Clipboard access is going on\n", isUseStackQueueCall); #endif - // TODO: if crash here, then convert jstring to jstring (diff JVM) jclass bridgeClazz = (*dalvikJNIEnvPtr_JRE)->FindClass(dalvikJNIEnvPtr_JRE, "org/lwjgl/glfw/CallbackBridge"); assert(bridgeClazz != NULL); jmethodID bridgeMethod = (*dalvikJNIEnvPtr_JRE)->GetStaticMethodID(dalvikJNIEnvPtr_JRE, bridgeClazz, "accessAndroidClipboard", "(ILjava/lang/String;)Ljava/lang/String;"); assert(bridgeMethod != NULL); - return (jstring) (*dalvikJNIEnvPtr_JRE)->CallStaticObjectMethod(dalvikJNIEnvPtr_JRE, bridgeClazz, bridgeMethod, action, copy); + jstring copyDst = convertStringJVM(runtimeJNIEnvPtr_ANDROID, dalvikJNIEnvPtr_JRE, copySrc); + return convertStringJVM(dalvikJNIEnvPtr_JRE, runtimeJNIEnvPtr_ANDROID, (jstring) (*dalvikJNIEnvPtr_JRE)->CallStaticObjectMethod(dalvikJNIEnvPtr_JRE, bridgeClazz, bridgeMethod, action, copyDst)); } JNIEXPORT jboolean JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSetInputReady(JNIEnv* env, jclass clazz, jboolean inputReady) { @@ -392,4 +392,4 @@ Java_org_lwjgl_glfw_CallbackBridge_nativePutControllerButtons(JNIEnv *env, jclas } (*runtimeJNIEnvPtr_ANDROID)->SetStaticObjectField(runtimeJNIEnvPtr_ANDROID,glfw_joystick_class,glfw_controller_button_data,(*runtimeJNIEnvPtr_ANDROID)->NewDirectByteBuffer(runtimeJNIEnvPtr_ANDROID,src,(*env)->GetDirectBufferCapacity(env,ax_buf))); } -} \ No newline at end of file +} diff --git a/app_pojavlauncher/src/main/jni/utils.c b/app_pojavlauncher/src/main/jni/utils.c index 29a24290c..7eea932df 100644 --- a/app_pojavlauncher/src/main/jni/utils.c +++ b/app_pojavlauncher/src/main/jni/utils.c @@ -48,6 +48,13 @@ void free_char_array(JNIEnv *env, jobjectArray jstringArray, const char **charAr } } +jstring convertStringToJVM(JNIEnv* srcEnv, JNIEnv* dstEnv, jstring srcStr) { + const char* srcStrC = (*srcEnv)->GetStringUTFChars(srcEnv, srcStr, 0); + jstring dstStr = (*dstEnv)->NewStringUTF(dstEnv, srcStrC); + (*srcEnv)->ReleaseStringUTFChars(srcEnv, srcStr, srcStrC); + return dstStr; +} + JNIEXPORT void JNICALL Java_net_kdt_pojavlaunch_utils_JREUtils_setupBridgeSurfaceAWT(JNIEnv *env, jclass clazz, jlong surface) { shared_awt_surface = surface; } diff --git a/app_pojavlauncher/src/main/jni/utils.h b/app_pojavlauncher/src/main/jni/utils.h index 4e56cfbd4..92dc232f0 100644 --- a/app_pojavlauncher/src/main/jni/utils.h +++ b/app_pojavlauncher/src/main/jni/utils.h @@ -20,6 +20,7 @@ jboolean attachThread(bool isAndroid, JNIEnv** secondJNIEnvPtr); char** convert_to_char_array(JNIEnv *env, jobjectArray jstringArray); jobjectArray convert_from_char_array(JNIEnv *env, char **charArray, int num_rows); void free_char_array(JNIEnv *env, jobjectArray jstringArray, const char **charArray); +jstring convertStringToJVM(JNIEnv* srcEnv, JNIEnv* dstEnv, jstring srcStr); void closeGLFWWindow();