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) {
|