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);
+ }
+