< prev index next >

src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c

Print this page




1260     AWT_UNLOCK();
1261 }
1262 
1263 static void OpenXIMCallback(Display *display, XPointer client_data, XPointer call_data) {
1264     XIMCallback ximCallback;
1265 
1266     X11im = XOpenIM(display, NULL, NULL, NULL);
1267     if (X11im == NULL) {
1268         return;
1269     }
1270 
1271     ximCallback.callback = (XIMProc)DestroyXIMCallback;
1272     ximCallback.client_data = NULL;
1273     XSetIMValues(X11im, XNDestroyCallback, &ximCallback, NULL);
1274 }
1275 
1276 static void DestroyXIMCallback(XIM im, XPointer client_data, XPointer call_data) {
1277     /* mark that XIM server was destroyed */
1278     X11im = NULL;
1279     JNIEnv* env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);


1280     /* free the old pX11IMData and set it to null. this also avoids crashing
1281      * the jvm if the XIM server reappears */
1282     X11InputMethodData *pX11IMData = getX11InputMethodData(env, currentX11InputMethodInstance);



1283 }
1284 
1285 JNIEXPORT jboolean JNICALL
1286 Java_sun_awt_X11_XInputMethod_openXIMNative(JNIEnv *env,
1287                                             jobject this,
1288                                             jlong display)
1289 {
1290     Bool registered;
1291 
1292     AWT_LOCK();
1293 
1294     dpy = (Display *)jlong_to_ptr(display);
1295 
1296 /* Use IMInstantiate call back only on Linux, as there is a bug in Solaris
1297    (4768335)
1298 */
1299 #if defined(__linux__) || defined(MACOSX)
1300     registered = XRegisterIMInstantiateCallback(dpy, NULL, NULL,
1301                      NULL, (XIDProc)OpenXIMCallback, NULL);
1302     if (!registered) {




1260     AWT_UNLOCK();
1261 }
1262 
1263 static void OpenXIMCallback(Display *display, XPointer client_data, XPointer call_data) {
1264     XIMCallback ximCallback;
1265 
1266     X11im = XOpenIM(display, NULL, NULL, NULL);
1267     if (X11im == NULL) {
1268         return;
1269     }
1270 
1271     ximCallback.callback = (XIMProc)DestroyXIMCallback;
1272     ximCallback.client_data = NULL;
1273     XSetIMValues(X11im, XNDestroyCallback, &ximCallback, NULL);
1274 }
1275 
1276 static void DestroyXIMCallback(XIM im, XPointer client_data, XPointer call_data) {
1277     /* mark that XIM server was destroyed */
1278     X11im = NULL;
1279     JNIEnv* env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
1280 
1281     AWT_LOCK();
1282     /* free the old pX11IMData and set it to null. this also avoids crashing
1283      * the jvm if the XIM server reappears */
1284     while (x11InputMethodGRefListHead != NULL) { 
1285         getX11InputMethodData(env, x11InputMethodGRefListHead->inputMethodGRef);
1286     }
1287     AWT_UNLOCK();
1288 }
1289 
1290 JNIEXPORT jboolean JNICALL
1291 Java_sun_awt_X11_XInputMethod_openXIMNative(JNIEnv *env,
1292                                             jobject this,
1293                                             jlong display)
1294 {
1295     Bool registered;
1296 
1297     AWT_LOCK();
1298 
1299     dpy = (Display *)jlong_to_ptr(display);
1300 
1301 /* Use IMInstantiate call back only on Linux, as there is a bug in Solaris
1302    (4768335)
1303 */
1304 #if defined(__linux__) || defined(MACOSX)
1305     registered = XRegisterIMInstantiateCallback(dpy, NULL, NULL,
1306                      NULL, (XIDProc)OpenXIMCallback, NULL);
1307     if (!registered) {


< prev index next >