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

Print this page

        

@@ -2161,5 +2161,45 @@
     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);
+}
+