168 static void DestroyXIMCallback(XIM, XPointer, XPointer);
169 static void OpenXIMCallback(Display *, XPointer, XPointer);
170 /* Solaris XIM Extention */
171 #define XNCommitStringCallback "commitStringCallback"
172 static void CommitStringCallback(XIC, XPointer, XPointer);
173
174 static X11InputMethodData * getX11InputMethodData(JNIEnv *, jobject);
175 static void setX11InputMethodData(JNIEnv *, jobject, X11InputMethodData *);
176 static void destroyX11InputMethodData(JNIEnv *, X11InputMethodData *);
177 static void freeX11InputMethodData(JNIEnv *, X11InputMethodData *);
178
179 #ifdef __solaris__
180 /* Prototype for this function is missing in Solaris X11R6 Xlib.h */
181 extern char *XSetIMValues(
182 #if NeedVarargsPrototypes
183 XIM /* im */, ...
184 #endif
185 );
186 #endif
187
188 #ifdef XAWT_HACK
189 /*
190 * This function is stolen from /src/solaris/hpi/src/system_md.c
191 * It is used in setting the time in Java-level InputEvents
192 */
193 jlong
194 awt_util_nowMillisUTC()
195 {
196 struct timeval t;
197 gettimeofday(&t, NULL);
198 return ((jlong)t.tv_sec) * 1000 + (jlong)(t.tv_usec/1000);
199 }
200 #endif /* XAWT_HACK */
201
202 /*
203 * Converts the wchar_t string to a multi-byte string calling wcstombs(). A
204 * buffer is allocated by malloc() to store the multi-byte string. NULL is
205 * returned if the given wchar_t string pointer is NULL or buffer allocation is
206 * failed.
207 */
208 static char *
209 wcstombsdmp(wchar_t *wcs, int len)
210 {
211 size_t n;
212 char *mbs;
213
214 if (wcs == NULL)
215 return NULL;
216
217 n = len*MB_CUR_MAX + 1;
218
219 mbs = (char *) malloc(n * sizeof(char));
220 if (mbs == NULL) {
529 if (event->keycode != 0) {
530 *keysymp = keysym;
531 result = False;
532 break;
533 }
534 }
535 composing = False;
536 /*FALLTHRU*/
537 case XLookupChars:
538 /*
539 printf("lookupString: status=XLookupChars, type=%d, state=%x, keycode=%x, keysym=%x\n",
540 event->type, event->state, event->keycode, keysym);
541 */
542 javastr = JNU_NewStringPlatform(env, (const char *)pX11IMData->lookup_buf);
543 if (javastr != NULL) {
544 JNU_CallMethodByName(env, NULL,
545 currentX11InputMethodInstance,
546 "dispatchCommittedText",
547 "(Ljava/lang/String;J)V",
548 javastr,
549 #ifndef XAWT_HACK
550 awt_util_nowMillisUTC_offset(event->time));
551 #else
552 event->time);
553 #endif
554 }
555 break;
556
557 case XLookupKeySym:
558 /*
559 printf("lookupString: status=XLookupKeySym, type=%d, state=%x, keycode=%x, keysym=%x\n",
560 event->type, event->state, event->keycode, keysym);
561 */
562 if (keysym == XK_Multi_key)
563 composing = True;
564 if (! composing) {
565 *keysymp = keysym;
566 result = False;
567 }
568 break;
569
570 case XLookupNone:
571 /*
572 printf("lookupString: status=XLookupNone, type=%d, state=%x, keycode=%x, keysym=%x\n",
573 event->type, event->state, event->keycode, keysym);
|
168 static void DestroyXIMCallback(XIM, XPointer, XPointer);
169 static void OpenXIMCallback(Display *, XPointer, XPointer);
170 /* Solaris XIM Extention */
171 #define XNCommitStringCallback "commitStringCallback"
172 static void CommitStringCallback(XIC, XPointer, XPointer);
173
174 static X11InputMethodData * getX11InputMethodData(JNIEnv *, jobject);
175 static void setX11InputMethodData(JNIEnv *, jobject, X11InputMethodData *);
176 static void destroyX11InputMethodData(JNIEnv *, X11InputMethodData *);
177 static void freeX11InputMethodData(JNIEnv *, X11InputMethodData *);
178
179 #ifdef __solaris__
180 /* Prototype for this function is missing in Solaris X11R6 Xlib.h */
181 extern char *XSetIMValues(
182 #if NeedVarargsPrototypes
183 XIM /* im */, ...
184 #endif
185 );
186 #endif
187
188 /*
189 * This function is stolen from /src/solaris/hpi/src/system_md.c
190 * It is used in setting the time in Java-level InputEvents
191 */
192 jlong
193 awt_util_nowMillisUTC()
194 {
195 struct timeval t;
196 gettimeofday(&t, NULL);
197 return ((jlong)t.tv_sec) * 1000 + (jlong)(t.tv_usec/1000);
198 }
199
200 /*
201 * Converts the wchar_t string to a multi-byte string calling wcstombs(). A
202 * buffer is allocated by malloc() to store the multi-byte string. NULL is
203 * returned if the given wchar_t string pointer is NULL or buffer allocation is
204 * failed.
205 */
206 static char *
207 wcstombsdmp(wchar_t *wcs, int len)
208 {
209 size_t n;
210 char *mbs;
211
212 if (wcs == NULL)
213 return NULL;
214
215 n = len*MB_CUR_MAX + 1;
216
217 mbs = (char *) malloc(n * sizeof(char));
218 if (mbs == NULL) {
527 if (event->keycode != 0) {
528 *keysymp = keysym;
529 result = False;
530 break;
531 }
532 }
533 composing = False;
534 /*FALLTHRU*/
535 case XLookupChars:
536 /*
537 printf("lookupString: status=XLookupChars, type=%d, state=%x, keycode=%x, keysym=%x\n",
538 event->type, event->state, event->keycode, keysym);
539 */
540 javastr = JNU_NewStringPlatform(env, (const char *)pX11IMData->lookup_buf);
541 if (javastr != NULL) {
542 JNU_CallMethodByName(env, NULL,
543 currentX11InputMethodInstance,
544 "dispatchCommittedText",
545 "(Ljava/lang/String;J)V",
546 javastr,
547 event->time);
548 }
549 break;
550
551 case XLookupKeySym:
552 /*
553 printf("lookupString: status=XLookupKeySym, type=%d, state=%x, keycode=%x, keysym=%x\n",
554 event->type, event->state, event->keycode, keysym);
555 */
556 if (keysym == XK_Multi_key)
557 composing = True;
558 if (! composing) {
559 *keysymp = keysym;
560 result = False;
561 }
562 break;
563
564 case XLookupNone:
565 /*
566 printf("lookupString: status=XLookupNone, type=%d, state=%x, keycode=%x, keysym=%x\n",
567 event->type, event->state, event->keycode, keysym);
|