1212 return JNI_FALSE; |
1213 return JNI_FALSE; |
1213 } |
1214 } |
1214 } |
1215 } |
1215 } |
1216 } |
1216 |
1217 |
|
1218 |
|
1219 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsSunKeyboard |
|
1220 (JNIEnv *env, jclass clazz, jlong display) |
|
1221 { |
|
1222 int xx; |
|
1223 AWT_CHECK_HAVE_LOCK(); |
|
1224 xx = XKeysymToKeycode((Display*)jlong_to_ptr(display), SunXK_F37); |
|
1225 return (!xx) ? JNI_FALSE : JNI_TRUE; |
|
1226 } |
|
1227 |
|
1228 JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_IsKanaKeyboard |
|
1229 (JNIEnv *env, jclass clazz, jlong display) |
|
1230 { |
|
1231 int xx; |
|
1232 AWT_CHECK_HAVE_LOCK(); |
|
1233 static jboolean result = JNI_FALSE; |
|
1234 |
|
1235 int32_t minKeyCode, maxKeyCode, keySymsPerKeyCode; |
|
1236 KeySym *keySyms, *keySymsStart, keySym; |
|
1237 int32_t i; |
|
1238 int32_t kanaCount = 0; |
|
1239 |
|
1240 // There's no direct way to determine whether the keyboard has |
|
1241 // a kana lock key. From available keyboard mapping tables, it looks |
|
1242 // like only keyboards with the kana lock key can produce keysyms |
|
1243 // for kana characters. So, as an indirect test, we check for those. |
|
1244 XDisplayKeycodes((Display*)jlong_to_ptr(display), &minKeyCode, &maxKeyCode); |
|
1245 keySyms = XGetKeyboardMapping((Display*)jlong_to_ptr(display), minKeyCode, maxKeyCode - minKeyCode + 1, &keySymsPerKeyCode); |
|
1246 keySymsStart = keySyms; |
|
1247 for (i = 0; i < (maxKeyCode - minKeyCode + 1) * keySymsPerKeyCode; i++) { |
|
1248 keySym = *keySyms++; |
|
1249 if ((keySym & 0xff00) == 0x0400) { |
|
1250 kanaCount++; |
|
1251 } |
|
1252 } |
|
1253 XFree(keySymsStart); |
|
1254 |
|
1255 // use a (somewhat arbitrary) minimum so we don't get confused by a stray function key |
|
1256 result = kanaCount > 10; |
|
1257 return result ? JNI_TRUE : JNI_FALSE; |
|
1258 } |
|
1259 |
1217 JavaVM* jvm = NULL; |
1260 JavaVM* jvm = NULL; |
1218 static int ToolkitErrorHandler(Display * dpy, XErrorEvent * event) { |
1261 static int ToolkitErrorHandler(Display * dpy, XErrorEvent * event) { |
1219 if (jvm != NULL) { |
1262 if (jvm != NULL) { |
1220 JNIEnv * env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); |
1263 JNIEnv * env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); |
1221 return JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XToolkit", "globalErrorHandler", "(JJ)I", |
1264 return JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XToolkit", "globalErrorHandler", "(JJ)I", |
1258 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_CallErrorHandler |
1301 JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_CallErrorHandler |
1259 (JNIEnv *env, jclass clazz, jlong handler, jlong display, jlong event_ptr) |
1302 (JNIEnv *env, jclass clazz, jlong handler, jlong display, jlong event_ptr) |
1260 { |
1303 { |
1261 return (*(XErrorHandler)jlong_to_ptr(handler))((Display*) jlong_to_ptr(display), (XErrorEvent*) jlong_to_ptr(event_ptr)); |
1304 return (*(XErrorHandler)jlong_to_ptr(handler))((Display*) jlong_to_ptr(display), (XErrorEvent*) jlong_to_ptr(event_ptr)); |
1262 } |
1305 } |
|
1306 |
1263 |
1307 |
1264 /* |
1308 /* |
1265 * Class: sun_awt_X11_XlibWrapper |
1309 * Class: sun_awt_X11_XlibWrapper |
1266 * Method: PrintXErrorEvent |
1310 * Method: PrintXErrorEvent |
1267 * Signature: (JJ)V |
1311 * Signature: (JJ)V |
1851 Java_sun_awt_X11_XlibWrapper_XFreeModifiermap(JNIEnv *env, jclass clazz, |
1895 Java_sun_awt_X11_XlibWrapper_XFreeModifiermap(JNIEnv *env, jclass clazz, |
1852 jlong keymap) { |
1896 jlong keymap) { |
1853 AWT_CHECK_HAVE_LOCK(); |
1897 AWT_CHECK_HAVE_LOCK(); |
1854 XFreeModifiermap((XModifierKeymap*) jlong_to_ptr(keymap)); |
1898 XFreeModifiermap((XModifierKeymap*) jlong_to_ptr(keymap)); |
1855 } |
1899 } |
|
1900 /* |
|
1901 * Class: sun_awt_X11_XlibWrapper |
|
1902 * Method: XRefreshKeyboardMapping |
|
1903 * Signature: (J)V |
|
1904 */ |
|
1905 JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XRefreshKeyboardMapping |
|
1906 (JNIEnv *env, jclass clazz, jlong event_ptr) |
|
1907 { |
|
1908 AWT_CHECK_HAVE_LOCK(); |
|
1909 XRefreshKeyboardMapping((XMappingEvent*) jlong_to_ptr(event_ptr)); |
|
1910 } |
1856 |
1911 |
1857 JNIEXPORT void JNICALL |
1912 JNIEXPORT void JNICALL |
1858 Java_sun_awt_X11_XlibWrapper_XChangeActivePointerGrab(JNIEnv *env, jclass clazz, |
1913 Java_sun_awt_X11_XlibWrapper_XChangeActivePointerGrab(JNIEnv *env, jclass clazz, |
1859 jlong display, jint mask, |
1914 jlong display, jint mask, |
1860 jlong cursor, jlong time) { |
1915 jlong cursor, jlong time) { |