/* * If the application doesn't receive events with timestamp for a long time * XtLastTimestampProcessed() will return out-of-date value. This may cause * selection handling routines to fail (see BugTraq ID 4085183). * This routine is to resolve this problem. It queries the current X server * time by appending a zero-length data to a property as prescribed by * X11 Reference Manual. * Note that this is a round-trip request, so it can be slow. If you know * that the Xt timestamp is up-to-date use XtLastTimestampProcessed(). */ Time awt_util_getCurrentServerTime() { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); static Atom _XA_JAVA_TIME_PROPERTY_ATOM = 0; Time server_time = 0; AWT_LOCK(); if (_XA_JAVA_TIME_PROPERTY_ATOM == 0) { XtAddEventHandler(awt_root_shell, PropertyChangeMask, False, propertyChangeEventHandler, NULL); _XA_JAVA_TIME_PROPERTY_ATOM = XInternAtom(awt_display, "_SUNW_JAVA_AWT_TIME", False); } timeStampUpdated = False; XChangeProperty(awt_display, XtWindow(awt_root_shell), _XA_JAVA_TIME_PROPERTY_ATOM, XA_ATOM, 32, PropModeAppend, (unsigned char *)"", 0); XFlush(awt_display); if (awt_currentThreadIsPrivileged(env)) { XEvent event; XMaskEvent(awt_display, PropertyChangeMask, &event); XtDispatchEvent(&event); } else { awt_MToolkit_modalWait(isTimeStampUpdated, NULL); } server_time = XtLastTimestampProcessed(awt_display); AWT_UNLOCK(); return server_time; }
jobject targetFont; XmString mfstr = NULL; XmString shortcut_str = NULL; XmString str = NULL; jobject font; jobject shortcut; jboolean IsMultiFont; jboolean isCheckbox; jstring label; jobject globalRef = (*env)->NewGlobalRef(env, this); const jchar *unicodeLabel = NULL; jsize unicodeLabelLen = 0; jboolean isCopy = JNI_FALSE; // We call client code on this thread, so it must *NOT* be privileged DASSERT(!awt_currentThreadIsPrivileged(env)); JNU_SetLongFieldFromPtr(env, this, mMenuItemPeerIDs.jniGlobalRef, globalRef); fdata = NULL; fflush(stderr); target = (*env)->GetObjectField(env, this, mMenuItemPeerIDs.target); if (JNU_IsNull(env, target)) { JNU_ThrowNullPointerException(env, "NullPointerException"); return; } font = JNU_CallMethodByName(env, NULL, target, "getFont_NoClientCode", "()Ljava/awt/Font;").l;