結局
FX::FXApp::hasInputMethodなる関数が、
#ifdef WIN32 return true; #else return xim!=NULL; #endif
などとのたまわっているので常にtrue。
その割にコールバックの中に
/* case WM_IME_STARTCOMPOSITION: if(activeWindow){ activeWindow->handle(this, MKUINT(0,SEL_IME_START), NULL); } return def_window_proc((HWND)hwnd,iMsg,wParam,lParam); case WM_IME_ENDCOMPOSITION: if(activeWindow){ activeWindow->handle(this, MKUINT(0,SEL_IME_END), NULL); } return def_window_proc((HWND)hwnd,iMsg,wParam,lParam); case WM_IME_COMPOSITION: if((lParam & GCS_RESULTSTR) && activeWindow){ // Limit the input to 2K characters. 2K should be enough for anyone :-) wchar_t wstr[2048]; HIMC himc = ImmGetContext((HWND)window->id()); int len = ImmGetCompositionStringW(himc, GCS_RESULTSTR, NULL, 0); if(len > sizeof(wstr) - sizeof(wstr[0])){ len = sizeof(wstr) - sizeof(wstr[0]); } ImmGetCompositionStringW(himc, GCS_RESULTSTR, wstr, len); ImmReleaseContext((HWND)window->id(), himc); // The length is given in bytes for some reason. wstr[len/sizeof(wstr[0])] = 0; char str[6 * sizeof(wstr) / sizeof(wstr[0])]; int mblen = wcstombs( str, wstr, sizeof(str) ); str[mblen] = 0; activeWindow->handle(this,MKUINT(0,SEL_IME_TEXT),str); } return def_window_proc((HWND)hwnd,iMsg,wParam,lParam); */
というコメントがあって愕然としているわけだが。
少なくともAdleでskkimeは動かない。