int module_feedkey_release(KeySym xkey, int kbstate) { switch (xkey) { case XK_Shift_L: case XK_Shift_R: if ( ( (*gmf.mf_tsin_chinese_english_toggle_key == TSIN_CHINESE_ENGLISH_TOGGLE_KEY_Shift) || (*gmf.mf_tsin_chinese_english_toggle_key == TSIN_CHINESE_ENGLISH_TOGGLE_KEY_ShiftL && xkey == XK_Shift_L) || (*gmf.mf_tsin_chinese_english_toggle_key == TSIN_CHINESE_ENGLISH_TOGGLE_KEY_ShiftR && xkey == XK_Shift_R)) && gmf.mf_current_time() - key_press_time < 300000) { #if WIN32 if (!*gmf.test_mode) #endif { module_flush_input(); key_press_time = 0; gmf.mf_hide_selections_win(); gmf.mf_tsin_set_eng_ch(!gmf.mf_tsin_pho_mode()); } return 1; } else return 0; default: return 0; } }
void module_hide_win (void) { gtk_widget_hide (g_pWinChewing); g_gcinModMainFuncs.mf_hide_selections_win (); g_gcinModMainFuncs.mf_hide_win_sym (); }
void module_hide_win() { if (state == STATE_SELECT) { state = STATE_CONVERT; gmf.mf_hide_selections_win(); } gtk_widget_hide(win_anthy); gmf.mf_hide_win_sym(); }
int module_flush_input() { gmf.mf_hide_selections_win(); int val; if (state==STATE_CONVERT) { val = TRUE; send_seg(); } else { val = send_jp(); } // dbg("cursor %d\n", cursor); clear_all(); return val; }
static gboolean select_idx(int c) { int idx = pageidx + c; if (idx < seg[cursor].selN) { char buf[256]; anthy_get_segment(ac, cursor, idx, buf, sizeof(buf)); gtk_label_set_text(GTK_LABEL(seg[cursor].label), buf); seg[cursor].selidx = idx; state = STATE_CONVERT; gmf.mf_hide_selections_win(); return (segN==1); } return FALSE; }
gboolean module_feedkey (int nKeyVal, int nKeyState) { char *pszTmp = NULL; char *pszChewingCand = NULL; int nZuinLen = 0; char szWord[4]; int nPhoIdx, nBufIdx; int nIdx; if (!g_pChewingCtx) return FALSE; memset (szWord, 0x00, 4); if (!g_gcinModMainFuncs.mf_tsin_pho_mode ()) return FALSE; switch (nKeyVal) { case XK_space: chewing_handle_Space (g_pChewingCtx); break; case XK_Escape: chewing_handle_Esc (g_pChewingCtx); break; case XK_Return: case XK_KP_Enter: chewing_handle_Enter (g_pChewingCtx); break; case XK_Delete: case XK_KP_Delete: chewing_handle_Del (g_pChewingCtx); break; case XK_BackSpace: chewing_handle_Backspace (g_pChewingCtx); break; case XK_Up: case XK_KP_Up: chewing_handle_Up (g_pChewingCtx); break; case XK_Down: case XK_KP_Down: chewing_handle_Down (g_pChewingCtx); break; case XK_Left: case XK_KP_Left: chewing_handle_Left (g_pChewingCtx); break; case XK_Right: case XK_KP_Right: chewing_handle_Right (g_pChewingCtx); break; #if 0 case XK_Shift_L: chewing_handle_ShiftLeft (g_pChewingCtx); break; case XK_Shift_R: chewing_handle_ShiftRight (g_pChewingCtx); break; #endif case XK_Tab: chewing_handle_Tab (g_pChewingCtx); break; default: if (nKeyVal > 32 && nKeyVal < 127) chewing_handle_Default (g_pChewingCtx, nKeyVal); break; } gcin_label_clear (MAX_SEG_NUM); g_nCurrentCursorPos = chewing_cursor_Current (g_pChewingCtx); if (g_nCurrentCursorPos < 0 || g_nCurrentCursorPos > MAX_SEG_NUM) return FALSE; // zuin symbols pszTmp = chewing_zuin_String (g_pChewingCtx, &nZuinLen); if (pszTmp) { for (nBufIdx = 0; nBufIdx < nZuinLen; nBufIdx++) { memcpy (szWord, pszTmp + nBufIdx * 3, 3); for (nPhoIdx = 0; nPhoIdx < 3; nPhoIdx++) if (strstr (g_gcinModMainFuncs.mf_pho_chars[nPhoIdx], szWord) != NULL) gcin_label_show (szWord, nPhoIdx + chewing_buffer_Len (g_pChewingCtx) + 1); } free (pszTmp); } // check if the composing is valid or not if (chewing_buffer_Check (g_pChewingCtx)) { g_gcinModMainFuncs.mf_hide_selections_win (); pszTmp = chewing_buffer_String (g_pChewingCtx); // init cand_no chewing_cand_Enumerate (g_pChewingCtx); g_gcinModMainFuncs.mf_clear_sele (); if (chewing_cand_TotalChoice (g_pChewingCtx)) { nIdx = 0; while (chewing_cand_hasNext (g_pChewingCtx)) { pszChewingCand = chewing_cand_String (g_pChewingCtx); if (nIdx > chewing_get_candPerPage (g_pChewingCtx) - 1) break; gcin_label_cand_show (pszChewingCand, nIdx++); free (pszChewingCand); } } for (nIdx = 0; nIdx < chewing_buffer_Len (g_pChewingCtx); nIdx++) { memcpy (szWord, pszTmp + (nIdx * 3), 3); gcin_label_show (szWord, nIdx); } free (pszTmp); } if (chewing_commit_Check (g_pChewingCtx)) { pszTmp = chewing_commit_String (g_pChewingCtx); g_gcinModMainFuncs.mf_send_text (pszTmp); // FIXME: workaround for repeated commit // it impacts the bEscCleanAllBuf setting! chewing_handle_Esc (g_pChewingCtx); free (pszTmp); } module_show_win (); return TRUE; }
gboolean module_feedkey(int kv, int kvstate) { int lkv = tolower(kv); int shift_m=(kvstate&ShiftMask) > 0; // printf("%x %c %d\n", kv, kv, shift_m); if (kvstate & ControlMask) return FALSE; if (kvstate & (Mod1Mask|Mod4Mask|Mod5Mask)) return FALSE; if (kv==XK_Shift_L||kv==XK_Shift_R) { key_press_time = gmf.mf_current_time(); } if (!gmf.mf_tsin_pho_mode()) return 0; gboolean b_is_empty = is_empty(); switch (kv) { case XK_F7: if (is_empty()) return FALSE; state = STATE_ROMANJI; if (state_hira_kata != STATE_kata) state_hira_kata = STATE_kata; else state_hira_kata = STATE_hira; disp_input(); return TRUE; case XK_F8: if (is_empty()) return FALSE; state = STATE_ROMANJI; if (state_hira_kata != STATE_half_kata) state_hira_kata = STATE_half_kata; else state_hira_kata = STATE_hira; disp_input(); return TRUE; case XK_F11: system("kasumi &"); return TRUE; case XK_F12: system("kasumi -a &"); return TRUE; case XK_Up: if (b_is_empty) return FALSE; if (state==STATE_SELECT) { int N = page_N(); gmf.mf_tss->pho_menu_idx--; if (gmf.mf_tss->pho_menu_idx < 0) gmf.mf_tss->pho_menu_idx = N - 1; disp_select(); } return TRUE; case XK_Down: if (b_is_empty) return FALSE; if (state==STATE_CONVERT) { state = STATE_SELECT; gmf.mf_tss->sel_pho = TRUE; // puts("STATE_SELECT"); disp_select(); } else if (state==STATE_SELECT) { int N = page_N(); gmf.mf_tss->pho_menu_idx=(gmf.mf_tss->pho_menu_idx+1)% N; disp_select(); } return TRUE; case XK_Return: if (b_is_empty) return FALSE; if (state==STATE_SELECT) { if (select_idx(gmf.mf_tss->pho_menu_idx)) goto send; return TRUE; } send: return module_flush_input(); case XK_Escape: if (state==STATE_SELECT) { state = STATE_CONVERT; gmf.mf_tss->sel_pho = FALSE; gmf.mf_clear_sele(); } else if (state==STATE_CONVERT) goto rom; return FALSE; case XK_BackSpace: if (b_is_empty) { state_hira_kata = STATE_hira; return FALSE; } gmf.mf_hide_selections_win(); if (state&(STATE_CONVERT|STATE_SELECT)) { rom: // puts("romanji"); state = STATE_ROMANJI; cursor = jpN; segN = 0; disp_input(); return TRUE; } // puts("back"); if (keysN) { keysN--; keys[keysN]=0; } else if (jpN && cursor) { delete_jpstr(cursor-1); cursor--; } else return FALSE; disp_input(); auto_hide(); return TRUE; case XK_Delete: if (b_is_empty) return FALSE; if (state&STATE_ROMANJI) { if (keysN) return TRUE; delete_jpstr(cursor); disp_input(); } auto_hide(); return TRUE; case XK_Left: if (b_is_empty) return FALSE; if (state&STATE_ROMANJI) { if (keysN) keysN = 0; else { if (cursor) cursor--; } disp_input(); } else if (state&STATE_CONVERT) { if (shift_m) { anthy_resize_segment(ac, cursor, -1); load_seg(); } else { if (cursor) cursor--; } disp_convert(); } return TRUE; case XK_Right: if (b_is_empty) return FALSE; if (state&STATE_ROMANJI) { if (cursor < jpN) cursor++; disp_input(); } else if (state&STATE_CONVERT) { if (shift_m) { anthy_resize_segment(ac, cursor, 1); load_seg(); } else { if (cursor < segN-1) cursor++; } disp_convert(); } return TRUE; case XK_Home: if (b_is_empty) return FALSE; cursor = 0; if (state&STATE_ROMANJI) { disp_input(); } else if (state&STATE_CONVERT) { disp_convert(); } return TRUE; case XK_End: if (b_is_empty) return FALSE; if (state&STATE_ROMANJI) { cursor = jpN; disp_input(); } else if (state&STATE_CONVERT) { cursor = segN-1; disp_convert(); } return TRUE; case XK_Prior: if (state!=STATE_SELECT) return FALSE; prev_page(); return TRUE; case XK_Next: if (state!=STATE_SELECT) return FALSE; next_page(); return TRUE; case ' ': if (b_is_empty) return FALSE; goto lab1; default: if (state==STATE_SELECT) { char *pp; if ((pp=strchr(*gmf.mf_pho_selkey, lkv))) { int c=pp-*gmf.mf_pho_selkey; if (select_idx(c)) goto send; } return TRUE; } } // printf("kv %d\n", kv); if (!is_legal_char(kv)) return FALSE; kv = lkv; if (state==STATE_CONVERT && kv!=' ') { send_seg(); state = STATE_ROMANJI; } lab1: if (state==STATE_ROMANJI) { if (keysN < MAX_KEYS) keys[keysN++]=kv; keys[keysN]=0; parse_key(); disp_input(); } module_show_win(); if (kv==' ') { if (state==STATE_ROMANJI) { char tt[512]; clear_seg_label(); merge_jp(tt, TRUE); // dbg("tt %s %d\n", tt, strlen(tt)); anthy_set_string(ac, tt); load_seg(); } else if (state==STATE_CONVERT) { state = STATE_SELECT; gmf.mf_tss->sel_pho = TRUE; // puts("STATE_SELECT"); disp_select(); } else if (state==STATE_SELECT) { next_page(); } } return TRUE; }