gboolean module_feedkey (int nKeyVal, int nKeyState) { if (!g_pChewingCtx) return FALSE; if (!g_himeModMainFuncs.mf_tsin_pho_mode ()) return FALSE; hime_label_clear (MAX_SEG_NUM); chewing_set_ShapeMode (g_pChewingCtx, g_himeModMainFuncs.mf_current_shape_mode()); if (nKeyState & (Mod1Mask|Mod4Mask|Mod5Mask|ControlMask)) return FALSE; if (!hime_key_filter (&nKeyVal)) return FALSE; if (!hime_buffer_commit ()) return FALSE; if (!hime_buffer_label_show ()) return FALSE; if (!hime_zuin_label_show ()) return FALSE; module_show_win (); return TRUE; }
gboolean module_feedkey (int nKeyVal, int nKeyState) { if (!g_pChewingCtx) return FALSE; if (!g_himeModMainFuncs.mf_tsin_pho_mode ()) return FALSE; hime_label_clear (MAX_SEG_NUM); if (!hime_key_filter (&nKeyVal)) return FALSE; if (!hime_zuin_label_show ()) return FALSE; if (!hime_buffer_label_show ()) return FALSE; if (!hime_buffer_commit ()) return FALSE; 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; }
gboolean module_feedkey(int key, int kvstate) { int i; #if 0 if (key <= XK_KP_9 && key >= XK_KP_0) key -= XK_KP_0 - '0'; #endif key=toupper(key); if (key==XK_BackSpace||key==XK_Delete) { #if WIN32 if (*gmf.mf_test_mode) return intcode_cin>0; #endif if (intcode_cin) intcode_cin--; else return 0; goto dispIn; } else if ((key<'0'||key>'F'||(key>'9' && key<'A')) && (key!=' ')){ return 0; } if (current_intcode==INTCODE_BIG5) { if (intcode_cin==0 && key<'8') return 1; if (intcode_cin==1 && inch[0]=='F' && key=='F') return 1; if (intcode_cin==2 && (key<'4' || (key>'7' && key<'A'))) return 1; if (intcode_cin==3 && (inch[2]=='7'||inch[2]=='F') && key=='F') return 1; } if (!intcode_cin && key==' ') return 0; #if WIN32 if (*gmf.mf_test_mode) return 1; #endif if ((intcode_cin<MAX_INTCODE-1 || (current_intcode!=INTCODE_BIG5 && intcode_cin < MAX_INTCODE)) && key!=' ') inch[intcode_cin++]=key; dispIn: clear_int_code_all(); #if 1 if (intcode_cin) module_show_win(); #endif for(i=0;i<intcode_cin;i++) { disp_int(i, _(dstr[h2i(inch[i])])); } if ((current_intcode==INTCODE_BIG5 && intcode_cin==4 || current_intcode==INTCODE_UTF32 && intcode_cin==6) && *gmf.mf_gtab_press_full_auto_send || key==' ') { u_char utf8[CH_SZ+1]; if (current_intcode==INTCODE_BIG5) { u_char ttt[3]; ttt[2]=ttt[3]=0; ttt[0]=(h2i(inch[0])<<4)+h2i(inch[1]); ttt[1]=(h2i(inch[2])<<4)+h2i(inch[3]); big5_utf8((char *)ttt, (char *)utf8); } else { int i; u_int v = 0; for(i=0; i < intcode_cin; i++) { v <<= 4; v |= h2i(inch[i]); } utf32to8((char *)utf8, (char *)&v); } gmf.mf_send_utf8_ch((char *)utf8); intcode_cin=0; clear_int_code_all(); } return 1; }
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_himeModMainFuncs.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; } hime_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_himeModMainFuncs.mf_pho_chars[nPhoIdx], szWord) != NULL) hime_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_himeModMainFuncs.mf_hide_selections_win (); pszTmp = chewing_buffer_String (g_pChewingCtx); // init cand_no chewing_cand_Enumerate (g_pChewingCtx); g_himeModMainFuncs.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; hime_label_cand_show (pszChewingCand, nIdx++); free (pszChewingCand); } } for (nIdx = 0; nIdx < chewing_buffer_Len (g_pChewingCtx); nIdx++) { memcpy (szWord, pszTmp + (nIdx * 3), 3); hime_label_show (szWord, nIdx); } free (pszTmp); } if (chewing_commit_Check (g_pChewingCtx)) { pszTmp = chewing_commit_String (g_pChewingCtx); g_himeModMainFuncs.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; }
void create_win_intcode() { if (gwin_int) { module_show_win(); return; } gwin_int = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_has_resize_grip(GTK_WINDOW(gwin_int), FALSE); gtk_window_set_resizable(GTK_WINDOW(gwin_int), FALSE); #if WIN32 gmf.mf_set_no_focus(gwin_int); #endif // gtk_window_set_default_size(GTK_WINDOW (gwin_int), 1, 1); gtk_container_set_border_width (GTK_CONTAINER (gwin_int), 0); GdkWindow *gdkwin = gtk_widget_get_window(gwin_int); GtkWidget *frame = gtk_frame_new(NULL); gtk_container_set_border_width (GTK_CONTAINER (frame), 0); gtk_container_add (GTK_CONTAINER(gwin_int), frame); GtkWidget *hbox_top = gtk_hbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), hbox_top); GtkWidget *button_intcode = gtk_button_new_with_label(_(_L("內碼"))); g_signal_connect (G_OBJECT (button_intcode), "button_press_event", G_CALLBACK (gmf.mf_inmd_switch_popup_handler), NULL); gtk_box_pack_start (GTK_BOX (hbox_top), button_intcode, FALSE, FALSE, 0); button_int = gtk_button_new(); gtk_container_set_border_width (GTK_CONTAINER (button_int), 0); gtk_box_pack_start (GTK_BOX (hbox_top), button_int, FALSE, FALSE, 0); GtkWidget *hbox_int = gtk_hbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (button_int), hbox_int); int i; for(i=0; i < MAX_INTCODE;i ++) { GtkWidget *label = gtk_label_new(_(full_space)); labels_int[i] = label; gtk_box_pack_start (GTK_BOX (hbox_int), label, FALSE, FALSE, 0); gmf.mf_set_label_font_size(label, *gmf.mf_gcin_font_size); } GtkWidget *intsel = create_int_opts(); gtk_box_pack_start (GTK_BOX (hbox_top), intsel, FALSE, FALSE, 0); gtk_widget_show_all (gwin_int); gtk_widget_realize (gwin_int); #if WIN32 gmf.mf_win32_init_win(gwin_int); #else set_no_focus(gwin_int); #endif adj_intcode_buttons(); minimize_win(); // dbg("create %x\n",gwin_int); }