src/solaris/native/sun/awt/awt_InputMethod.c

Print this page
rev 7203 : imported patch 7006052


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