[Input pipe] Try to get copy-paste works

This commit is contained in:
khanhduytran0 2021-01-22 13:50:33 +07:00
parent 6fbb8fdb20
commit 7d6f837dea
3 changed files with 12 additions and 4 deletions

View File

@ -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) {

View File

@ -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;
}

View File

@ -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();