Пример #1
0
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));
}
Пример #2
0
/* 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;
}
Пример #4
0
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;
}