fix copy to clipboard 1.13-

This commit is contained in:
ShirosakiMio 2023-07-11 20:48:44 +08:00
parent 3e4faf43d2
commit 146e766115
5 changed files with 33 additions and 18 deletions

View File

@ -82,6 +82,7 @@ include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := fcl_awt
LOCAL_SHARED_LIBRARIES := fcl
LOCAL_SRC_FILES := awt/awt_bridge.c
include $(BUILD_SHARED_LIBRARY)

View File

@ -2,47 +2,61 @@
#include <assert.h>
#include <string.h>
#include <stdio.h>
#include "fcl/include/fcl_internal.h"
static JavaVM* dalvikJavaVMPtr;
static JavaVM *dalvikJavaVMPtr;
jclass class_FCLBridge;
jmethodID method_OpenLink;
jmethodID method_OpenPath;
jint JNI_OnLoad(JavaVM* vm, void* reserved) {
jint JNI_OnLoad(JavaVM *vm, void *reserved) {
if (dalvikJavaVMPtr == NULL) {
dalvikJavaVMPtr = vm;
JNIEnv *env = NULL;
(*vm)->GetEnv(vm, (void**)&env, JNI_VERSION_1_4);
class_FCLBridge = (*env)->NewGlobalRef(env, (*env)->FindClass(env, "com/tungsten/fclauncher/bridge/FCLBridge"));
method_OpenLink = (*env)->GetStaticMethodID(env, class_FCLBridge, "openLink", "(Ljava/lang/String;)V");
method_OpenPath = (*env)->GetStaticMethodID(env, class_FCLBridge, "openLink", "(Ljava/lang/String;)V");
(*vm)->GetEnv(vm, (void **) &env, JNI_VERSION_1_4);
class_FCLBridge = fcl.class_FCLBridge;
method_OpenLink = (*env)->GetStaticMethodID(env, class_FCLBridge, "openLink",
"(Ljava/lang/String;)V");
}
return JNI_VERSION_1_4;
}
JNIEXPORT void JNICALL Java_net_java_openjdk_cacio_ctc_CTCDesktopPeer_openFile(JNIEnv *env, jclass clazz, jstring filePath) {
JNIEXPORT void JNICALL
Java_net_java_openjdk_cacio_ctc_CTCDesktopPeer_openFile(JNIEnv *env, jclass clazz,
jstring filePath) {
JNIEnv *dalvikEnv;
char detachable = 0;
if((*dalvikJavaVMPtr)->GetEnv(dalvikJavaVMPtr, (void **) &dalvikEnv, JNI_VERSION_1_6) == JNI_EDETACHED) {
if ((*dalvikJavaVMPtr)->GetEnv(dalvikJavaVMPtr, (void **) &dalvikEnv, JNI_VERSION_1_6) ==
JNI_EDETACHED) {
(*dalvikJavaVMPtr)->AttachCurrentThread(dalvikJavaVMPtr, &dalvikEnv, NULL);
detachable = 1;
}
const char* stringChars = (*env)->GetStringUTFChars(env, filePath, NULL);
(*dalvikEnv)->CallStaticVoidMethod(dalvikEnv, class_FCLBridge, method_OpenPath, (*dalvikEnv)->NewStringUTF(dalvikEnv, stringChars));
const char *stringChars = (*env)->GetStringUTFChars(env, filePath, NULL);
(*dalvikEnv)->CallStaticVoidMethod(dalvikEnv, class_FCLBridge, method_OpenLink,
(*dalvikEnv)->NewStringUTF(dalvikEnv, stringChars));
(*env)->ReleaseStringUTFChars(env, filePath, stringChars);
if(detachable) (*dalvikJavaVMPtr)->DetachCurrentThread(dalvikJavaVMPtr);
if (detachable) (*dalvikJavaVMPtr)->DetachCurrentThread(dalvikJavaVMPtr);
}
JNIEXPORT void JNICALL Java_net_java_openjdk_cacio_ctc_CTCDesktopPeer_openUri(JNIEnv *env, jclass clazz, jstring uri) {
JNIEXPORT void JNICALL
Java_net_java_openjdk_cacio_ctc_CTCDesktopPeer_openUri(JNIEnv *env, jclass clazz, jstring uri) {
JNIEnv *dalvikEnv;
char detachable = 0;
if((*dalvikJavaVMPtr)->GetEnv(dalvikJavaVMPtr, (void **) &dalvikEnv, JNI_VERSION_1_6) == JNI_EDETACHED) {
if ((*dalvikJavaVMPtr)->GetEnv(dalvikJavaVMPtr, (void **) &dalvikEnv, JNI_VERSION_1_6) ==
JNI_EDETACHED) {
(*dalvikJavaVMPtr)->AttachCurrentThread(dalvikJavaVMPtr, &dalvikEnv, NULL);
detachable = 1;
}
const char* stringChars = (*env)->GetStringUTFChars(env, uri, NULL);
(*dalvikEnv)->CallStaticVoidMethod(dalvikEnv, class_FCLBridge, method_OpenLink, (*dalvikEnv)->NewStringUTF(dalvikEnv, stringChars));
const char *stringChars = (*env)->GetStringUTFChars(env, uri, NULL);
(*dalvikEnv)->CallStaticVoidMethod(dalvikEnv, class_FCLBridge, method_OpenLink,
(*dalvikEnv)->NewStringUTF(dalvikEnv, stringChars));
(*env)->ReleaseStringUTFChars(env, uri, stringChars);
if(detachable) (*dalvikJavaVMPtr)->DetachCurrentThread(dalvikJavaVMPtr);
if (detachable) (*dalvikJavaVMPtr)->DetachCurrentThread(dalvikJavaVMPtr);
}
JNIEXPORT void JNICALL
Java_sun_awt_peer_cacio_FCLClipboard_clipboardCopy(JNIEnv *env, jclass clazz, jstring str) {
const char *stringChars = (*env)->GetStringUTFChars(env, str, NULL);
fclSetPrimaryClipString(stringChars);
(*env)->ReleaseStringUTFChars(env, str, stringChars);
}