void AwtObject::SendEvent(jobject event) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); #ifdef DEBUG if (reportEvents) { jstring eventStr = JNU_ToString(env, event); DASSERT(!safe_ExceptionOccurred(env)); jstring targetStr = (jstring)JNU_CallMethodByName(env, NULL, GetTarget(env),"getName", "()Ljava/lang/String;").l; DASSERT(!safe_ExceptionOccurred(env)); printf("Posting %S to %S\n", TO_WSTRING(eventStr), TO_WSTRING(targetStr)); } #endif /* Post event to the system EventQueue. */ JNU_CallMethodByName(env, NULL, GetPeer(env), "postEvent", "(Ljava/awt/AWTEvent;)V", event); { jthrowable exc = safe_ExceptionOccurred(env); if (exc) { env->DeleteLocalRef(exc); env->ExceptionDescribe(); } } DASSERT(!safe_ExceptionOccurred(env)); }
/* Execute a callback to the associated Java peer. */ void AwtObject::DoCallback(const char* methodName, const char* methodSig, ...) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); /* don't callback during the create & initialization process */ if (m_peerObject != NULL && m_callbacksEnabled) { va_list args; va_start(args, methodSig); #ifdef DEBUG if (reportEvents) { jstring targetStr = (jstring)JNU_CallMethodByName(env, NULL, GetTarget(env), "getName", "()Ljava/lang/String;").l; DASSERT(!safe_ExceptionOccurred(env)); printf("Posting %s%s method to %S\n", methodName, methodSig, TO_WSTRING(targetStr)); } #endif /* caching would do much good here */ JNU_CallMethodByNameV(env, NULL, GetPeer(env), methodName, methodSig, args); { jthrowable exc = safe_ExceptionOccurred(env); if (exc) { env->DeleteLocalRef(exc); env->ExceptionDescribe(); env->ExceptionClear(); } } DASSERT(!safe_ExceptionOccurred(env)); va_end(args); } }
JNIEXPORT void JNICALL Java_sun_awt_pocketpc_PPCTextComponentPeer_setText (JNIEnv *env, jobject thisObj, jstring text) { CHECK_PEER(thisObj); AwtTextComponent* c = PDATA(AwtTextComponent, thisObj); int length = env->GetStringLength(text); #ifndef UNICODE TCHAR* buffer = new TCHAR[length * 2 + 1]; buffer = TO_WSTRING(text); #else WCHAR* buffer = new WCHAR[length + 1]; env->GetStringRegion(text, 0, length, (jchar*)buffer); buffer[length] = 0; //or it should be TEXT('\0') or L'\0'??? #endif buffer = AwtTextComponent::AddCR(buffer, length); c->SetText(buffer); /* Fix for TCK bug: setText() does not generate valueChangedEvent */ if (env->IsInstanceOf(c->GetTarget(), WCachedIDs.java_awt_TextAreaClass)) { c->WmNotify(EN_CHANGE); } delete[] buffer; }
BOOL AwtMenuItem::IsSeparator() { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); if (env->EnsureLocalCapacity(2) < 0) { return FALSE; } jobject jitem = GetTarget(env); jstring label = (jstring)(env)->GetObjectField(jitem, AwtMenuItem::labelID); LPWSTR labelW = TO_WSTRING(label); BOOL isSeparator = (labelW && (wcscmp(labelW, L"-") == 0)); env->DeleteLocalRef(label); env->DeleteLocalRef(jitem); return isSeparator; }