src/solaris/native/sun/xawt/XlibWrapper.c

Print this page

        

*** 2161,2165 **** --- 2161,2205 ---- free(pRect); (*env)->ReleaseIntArrayElements(env, bitmap, values, JNI_ABORT); } + typedef struct { + JNIEnv *env; + jobject predicateObject; + jmethodID predicateMID; + + jobject event; + } CheckIfEventStruct; + + static Bool + check_if_event_predicate(Display* dpy, XEvent* event, char* arg) { + CheckIfEventStruct * data = (CheckIfEventStruct *)arg; + //NOTE: event == data->event.pData + + return (Bool)((*(data->env))->CallBooleanMethod(data->env, + data->predicateObject, data->predicateMID, + data->event)); + } + + JNIEXPORT jboolean JNICALL + Java_sun_awt_X11_XlibWrapper_CheckIfEvent + (JNIEnv *env, jclass clazz, jlong display, jobject event, jlong event_return, jobject predicate) + { + //NOTE: event_return == event.pData + + AWT_CHECK_HAVE_LOCK(); + + CheckIfEventStruct data; + + data.env = env; + data.predicateObject = predicate; + data.predicateMID = (*env)->GetMethodID(env, + (*env)->GetObjectClass(env, predicate), + "doesMatch", "(Lsun/awt/X11/XEvent;)Z"); + data.event = event; + + return (jboolean)XCheckIfEvent((Display *)jlong_to_ptr(display), + (XEvent *)jlong_to_ptr(event_return), check_if_event_predicate, + (char*)&data); + } +