void toggle_im_enabled() { // dbg("toggle_im_enabled\n"); check_CS(); if (current_CS->in_method < 0 || current_CS->in_method > MAX_GTAB_NUM_KEY) p_err("err found"); if (current_CS->im_state != GCIN_STATE_DISABLED) { if (current_CS->im_state == GCIN_STATE_ENG_FULL) { current_CS->im_state = GCIN_STATE_CHINESE; disp_im_half_full(); return; } if (current_method_type() == method_type_TSIN) { #if USE_TSIN flush_tsin_buffer(); #endif } else { output_gbuf(); reset_gtab_all(); } hide_in_win(current_CS); #if 0 hide_win_status(); #endif current_CS->im_state = GCIN_STATE_DISABLED; update_win_kbm(); #if TRAY_ENABLED disp_tray_icon(); #endif } else { if (!current_method_type()) init_gtab(current_CS->in_method); init_state_chinese(current_CS); reset_current_in_win_xy(); #if 1 show_in_win(current_CS); update_in_win_pos(); #else update_in_win_pos(); show_in_win(current_CS); #endif update_win_kbm(); #if TRAY_ENABLED disp_tray_icon(); #endif } }
static void cb_button_sym(GtkButton *button, GtkWidget *label) { // dbg("cb_button_sym\n"); char *str = (char *) gtk_label_get_text(GTK_LABEL(label)); #if USE_TSIN if (current_method_type() == method_type_TSIN && current_CS->im_state == GCIN_STATE_CHINESE) { add_to_tsin_buf_str(str); if (tsin_cursor_end()) { flush_tsin_buffer(); output_buffer_call_back(); } else { force_preedit_shift(); } } else #endif if (gtab_phrase_on()) { insert_gbuf_nokey(str); if (gtab_cursor_end()) { output_gbuf(); output_buffer_call_back(); } else force_preedit_shift(); } else { send_text_call_back(str); } switch (current_method_type()) { case method_type_PHO: clr_in_area_pho(); break; #if USE_TSIN case method_type_TSIN: tsin_reset_in_pho(); break; #endif #if USE_ANTHY case method_type_ANTHY: break; #endif default: reset_gtab_all(); break; } if (gcin_win_sym_click_close) { win_sym_enabled=0; hide_win_sym(); } }
gboolean win_is_visible() { if (!current_CS) return FALSE; switch (current_method_type()) { case method_type_PHO: return gwin_pho && GTK_WIDGET_VISIBLE(gwin_pho); #if USE_TSIN case method_type_TSIN: return gwin0 && GTK_WIDGET_VISIBLE(gwin0); #endif case method_type_INT_CODE: return gwin_int && GTK_WIDGET_VISIBLE(gwin_int); #if USE_ANTHY case method_type_ANTHY: return anthy_visible(); #endif default: if (!gwin_gtab) return FALSE; return gwin_gtab && GTK_WIDGET_VISIBLE(gwin_gtab); } return FALSE; }
void show_in_win(ClientState *cs) { if (!cs) { #if 0 dbg("show_in_win: ic is null"); #endif return; } switch (current_method_type()) { case method_type_PHO: show_win_pho(); break; #if USE_TSIN case method_type_TSIN: show_win0(); break; #endif case method_type_MODULE: module_cb1(cs)->module_show_win(); break; default: show_win_gtab(); } #if 0 show_win_stautus(); #endif }
gboolean full_char_proc(KeySym keysym) { char *s = half_char_to_full_char(keysym); if (!s) return 0; char tt[CH_SZ+1]; utf8cpy(tt, s); if (current_CS->im_state == HIME_STATE_ENG_FULL) { send_text(tt); return 1; } if (current_method_type() == 6 && current_CS->im_state == HIME_STATE_CHINESE) add_to_tsin_buf_str(tt); else if (gtab_phrase_on() && ggg.gbufN) insert_gbuf_nokey(tt); else send_text(tt); return 1; }
void show_in_win(ClientState *cs) { if (!cs) { #if 0 dbg("show_in_win: ic is null"); #endif return; } switch (current_method_type()) { case method_type_PHO: show_win_pho(); break; #if USE_TSIN case method_type_TSIN: show_win0(); break; #endif case method_type_INT_CODE: show_win_int(); break; #if USE_ANTHY case method_type_ANTHY: show_win_anthy(); break; #endif default: show_win_gtab(); } #if 0 show_win_stautus(); #endif }
int hime_get_preedit(ClientState *cs, char *str, HIME_PREEDIT_ATTR attr[], int *cursor, int *comp_flag) { // dbg("hime_get_preedit %x\n", current_CS); if (!current_CS) { //empty: // dbg("empty\n"); str[0]=0; *cursor=0; return 0; } str[0]=0; *comp_flag=0; // cs->use_preedit = TRUE; switch(current_method_type()) { case method_type_PHO: return pho_get_preedit(str, attr, cursor, comp_flag); #if USE_TSIN case method_type_TSIN: return tsin_get_preedit(str, attr, cursor, comp_flag); #endif case method_type_MODULE: if (inmd[current_CS->in_method].mod_cb_funcs) return module_cb()->module_get_preedit(str, attr, cursor, comp_flag); default: return gtab_get_preedit(str, attr, cursor, comp_flag); // dbg("metho %d\n", current_CS->in_method); } return 0; }
void flush_edit_buffer() { // dbg("flush_edit_buffer\n"); if (!current_CS) return; // dbg("gcin_reset\n"); switch(current_method_type()) { #if USE_TSIN case method_type_TSIN: flush_tsin_buffer(); break; #endif #if USE_ANTHY case method_type_ANTHY: flush_anthy_input(); break; #endif default: output_gbuf(); // dbg("metho %d\n", current_CS->in_method); } #if 0 dbg("output_bufferN:%d\n", output_bufferN); if (output_bufferN) { output_buffer_call_back(); } #endif }
void gcin_reset() { #if 1 if (!current_CS) return; // dbg("gcin_reset\n"); switch(current_method_type()) { case method_type_PHO: pho_reset(); return; case method_type_INT_CODE: return; #if USE_TSIN case method_type_TSIN: tsin_reset(); return; #endif #if USE_ANTHY case method_type_ANTHY: gcin_anthy_reset(); return; #endif default: gtab_reset(); // dbg("metho %d\n", current_CS->in_method); } #endif }
void hime_reset() { #if 1 if (!current_CS) return; // dbg("hime_reset\n"); switch(current_method_type()) { case method_type_PHO: pho_reset(); return; #if USE_TSIN case method_type_TSIN: tsin_reset(); return; #endif case method_type_MODULE: if (inmd[current_CS->in_method].mod_cb_funcs) module_cb()->module_reset(); return; default: gtab_reset(); // dbg("metho %d\n", current_CS->in_method); } #endif }
void flush_edit_buffer() { // dbg("flush_edit_buffer\n"); if (!current_CS) return; // dbg("hime_reset\n"); switch(current_method_type()) { #if USE_TSIN case method_type_TSIN: flush_tsin_buffer(); break; #endif case method_type_MODULE: if (inmd[current_CS->in_method].mod_cb_funcs) module_cb()->module_flush_input(); break; default: output_gbuf(); // dbg("metho %d\n", current_CS->in_method); } #if 0 dbg("output_bufferN:%d\n", output_bufferN); if (output_bufferN) { output_buffer_call_back(); } #endif }
gboolean ProcessTestKeyPress(KeySym keysym, u_int kev_state) { if (!current_CS) return TRUE; // dbg("hime_reset\n"); gboolean v; test_mode= TRUE; switch(current_method_type()) { case method_type_PHO: pho_save_gst(); v = ProcessKeyPress(keysym, kev_state); pho_restore_gst(); break; case method_type_TSIN: tsin_save_gst(); v = ProcessKeyPress(keysym, kev_state); tsin_restore_gst(); break; case method_type_MODULE: break; default: gtab_save_gst(); v = ProcessKeyPress(keysym, kev_state); gtab_restore_gst(); } test_mode= FALSE; return v; }
void update_active_in_win_geom() { // dbg("update_active_in_win_geom\n"); switch (current_method_type()) { case method_type_PHO: get_win_pho_geom(); break; #if USE_TSIN case method_type_TSIN: get_win0_geom(); break; #endif case method_type_INT_CODE: get_win_int_geom(); break; #if USE_ANTHY case method_type_ANTHY: get_win_anthy_geom(); break; #endif default: get_win_gtab_geom(); break; } }
static void sym_lookup_key(char *instr, char *outstr) { if (current_method_type() == method_type_PHO || current_method_type() == method_type_TSIN) { str_to_all_phokey_chars(instr, outstr); } else { outstr[0]=0; while (*instr) { char tt[512]; tt[0]=0; lookup_gtab_out(instr, tt); strcat(outstr, tt); instr+= utf8_sz(instr); if (*instr) strcat(outstr, " | "); } } }
void move_in_win(ClientState *cs, int x, int y) { check_CS(); if (current_CS && current_CS->fixed_pos) { x = current_CS->fixed_x; y = current_CS->fixed_y; } else if (gcin_input_style == InputStyleRoot) { x = gcin_root_x; y = gcin_root_y; } #if 0 dbg("move_in_win %d %d\n",x, y); #endif #if 1 if (current_in_win_x == x && current_in_win_y == y) return; #endif current_in_win_x = x ; current_in_win_y = y; switch (current_method_type()) { case method_type_PHO: move_win_pho(x, y); break; #if USE_TSIN case method_type_TSIN: move_win0(x, y); break; #endif case method_type_INT_CODE: move_win_int(x, y); break; #if USE_ANTHY case method_type_ANTHY: move_win_anthy(x, y); break; #endif default: if (!cs->in_method) return; move_win_gtab(x, y); } }
void toggle_half_full_char() { #if WIN32 if (test_mode) return; #endif check_CS(); if (!hime_shift_space_eng_full) { current_CS->b_half_full_char = 0; tss.tsin_half_full=0; disp_im_half_full(); return; } // dbg("toggle_half_full_char\n"); if (current_method_type() == method_type_TSIN && current_CS->im_state == HIME_STATE_CHINESE) { tsin_toggle_half_full(); } else { if (current_CS->im_state == HIME_STATE_ENG_FULL) { current_CS->im_state = HIME_STATE_DISABLED; hide_in_win(current_CS); } else if (current_CS->im_state == HIME_STATE_DISABLED) { toggle_im_enabled(); current_CS->im_state = HIME_STATE_ENG_FULL; } else if (current_CS->im_state == HIME_STATE_CHINESE) { current_CS->b_half_full_char = !current_CS->b_half_full_char; } // dbg("current_CS->in_method %d\n", current_CS->in_method); disp_im_half_full(); } save_CS_current_to_temp(); // dbg("half full toggle\n"); }
void update_active_in_win_geom() { // dbg("update_active_in_win_geom\n"); switch (current_method_type()) { case method_type_PHO: get_win_pho_geom(); break; #if USE_TSIN case method_type_TSIN: get_win0_geom(); break; #endif case method_type_MODULE: module_cb()->module_get_win_geom(); break; default: get_win_gtab_geom(); break; } }
void move_in_win(ClientState *cs, int x, int y) { check_CS(); if (current_CS && current_CS->fixed_pos) { x = current_CS->fixed_x; y = current_CS->fixed_y; } else if (hime_input_style == InputStyleRoot) { x = hime_root_x; y = hime_root_y; } #if 0 dbg("move_in_win %d %d\n",x, y); #endif #if 0 if (current_in_win_x == x && current_in_win_y == y) return; #endif current_in_win_x = x ; current_in_win_y = y; switch (current_method_type()) { case method_type_PHO: move_win_pho(x, y); break; #if USE_TSIN case method_type_TSIN: move_win0(x, y); break; #endif case method_type_MODULE: if (inmd[cs->in_method].mod_cb_funcs) module_cb1(cs)->module_move_win(x, y); break; default: if (!cs->in_method) return; move_win_gtab(x, y); } }
void hide_in_win(ClientState *cs) { if (!cs) { #if 0 dbg("hide_in_win: ic is null\n"); #endif return; } #if 0 dbg("hide_in_win %d\n", ic->in_method); #endif if (timeout_handle) { g_source_remove(timeout_handle); timeout_handle = 0; } switch (current_method_type()) { case method_type_PHO: hide_win_pho(); break; #if USE_TSIN case method_type_TSIN: // flush_tsin_buffer(); hide_win0(); break; #endif case method_type_INT_CODE: hide_win_int(); break; #if USE_ANTHY case method_type_ANTHY: hide_win_anthy(); break; #endif default: hide_win_gtab(); } reset_current_in_win_xy(); }
gboolean win_is_visible() { if (!current_CS) return FALSE; switch (current_method_type()) { case method_type_PHO: return gwin_pho && GTK_WIDGET_VISIBLE(gwin_pho); #if USE_TSIN case method_type_TSIN: return gwin0 && GTK_WIDGET_VISIBLE(gwin0); #endif case method_type_MODULE: return module_cb()->module_win_visible(); default: if (!gwin_gtab) return FALSE; return gwin_gtab && GTK_WIDGET_VISIBLE(gwin_gtab); } return FALSE; }
void disp_im_half_full() { // dbg("disp_im_half_full\n"); #if TRAY_ENABLED disp_tray_icon(); #endif switch (current_method_type()) { case method_type_PHO: win_pho_disp_half_full(); break; #if USE_TSIN case method_type_TSIN: win_tsin_disp_half_full(); break; #endif default: win_gtab_disp_half_full(); break; } }
// <Shift><Space> is pressed void toggle_half_full_char() { check_CS(); if (!hime_shift_space_eng_full) { current_CS->b_half_full_char = 0; tss.tsin_half_full=0; disp_im_half_full(); return; } // dbg("toggle_half_full_char\n"); if (current_method_type() == method_type_TSIN && current_CS->im_state == HIME_STATE_CHINESE) { tsin_toggle_half_full(); } else { switch (current_CS->im_state) { case HIME_STATE_ENG_FULL: current_CS->im_state = HIME_STATE_DISABLED; hide_in_win(current_CS); break; case HIME_STATE_DISABLED: toggle_im_enabled(); current_CS->im_state = HIME_STATE_ENG_FULL; break; case HIME_STATE_CHINESE: current_CS->b_half_full_char = !current_CS->b_half_full_char; break; } // dbg("current_CS->in_method %d\n", current_CS->in_method); disp_im_half_full(); } save_CS_current_to_temp(); // dbg("half full toggle\n"); }
// return TRUE if the key press is processed gboolean ProcessKeyRelease(KeySym keysym, u_int kev_state) { disp_win_kbm_capslock(); check_CS(); #if 0 dbg_time("key release %x %x\n", keysym, kev_state); #endif if (current_CS->im_state == HIME_STATE_DISABLED) return FALSE; #if 1 if (current_CS->b_hime_protocol && (last_keysym == XK_Shift_L || last_keysym == XK_Shift_R || last_keysym == XK_Control_L || last_keysym == XK_Control_R)) { if (((keysym == XK_Control_L || keysym == XK_Control_R) && (kev_state & ShiftMask)) || ((keysym == XK_Shift_L || keysym == XK_Shift_R) && (kev_state & ControlMask))) { cycle_next_in_method(); return TRUE; } } #endif switch(current_method_type()) { case method_type_TSIN: return feedkey_pp_release(keysym, kev_state); case method_type_MODULE: if (!module_cb()) return FALSE; return module_cb()->module_feedkey_release(keysym, kev_state); default: return feedkey_gtab_release(keysym, kev_state); } return FALSE; }
void update_active_in_win_geom() { HIME_module_callback_functions *mod_cbs; // dbg("update_active_in_win_geom\n"); switch (current_method_type()) { case method_type_PHO: get_win_pho_geom(); break; #if USE_TSIN case method_type_TSIN: get_win0_geom(); break; #endif case method_type_MODULE: mod_cbs = module_cb(); if(mod_cbs && mod_cbs->module_get_win_geom) mod_cbs->module_get_win_geom(); break; default: get_win_gtab_geom(); break; } }
// return TRUE if the key press is processed gboolean ProcessKeyRelease(KeySym keysym, u_int kev_state) { check_CS(); #if 0 dbg_time("key release %x %x\n", keysym, kev_state); #endif if (current_CS->im_state == GCIN_STATE_DISABLED) return FALSE; #if 1 if (current_CS->b_gcin_protocol && (last_keysym == XK_Shift_L || last_keysym == XK_Shift_R || last_keysym == XK_Control_L || last_keysym == XK_Control_R)) { if (((keysym == XK_Control_L || keysym == XK_Control_R) && (kev_state & ShiftMask)) || ((keysym == XK_Shift_L || keysym == XK_Shift_R) && (kev_state & ControlMask))) { cycle_next_in_method(); return TRUE; } } #endif #if USE_TSIN switch(current_method_type()) { case method_type_TSIN: return feedkey_pp_release(keysym, kev_state); #if USE_ANTHY case method_type_ANTHY: return feedkey_anthy_release(keysym, kev_state); #endif } #endif return FALSE; }
void hide_in_win(ClientState *cs) { if (!cs) { #if 0 dbg("hide_in_win: ic is null\n"); #endif return; } #if 0 dbg("hide_in_win %d\n", ic->in_method); #endif if (timeout_handle) { g_source_remove(timeout_handle); timeout_handle = 0; } switch (current_method_type()) { case method_type_PHO: hide_win_pho(); break; #if USE_TSIN case method_type_TSIN: // flush_tsin_buffer(); hide_win0(); break; #endif case method_type_MODULE: if (inmd[cs->in_method].mod_cb_funcs) module_cb1(cs)->module_hide_win(); break; default: hide_win_gtab(); } reset_current_in_win_xy(); }
int gcin_get_preedit(ClientState *cs, char *str, GCIN_PREEDIT_ATTR attr[], int *cursor, int *sub_comp_len) { // dbg("gcin_get_preedit %x\n", current_CS); if (!current_CS) { empty: // dbg("empty\n"); str[0]=0; *cursor=0; return 0; } str[0]=0; *sub_comp_len=0; // cs->use_preedit = TRUE; switch(current_method_type()) { case method_type_PHO: return pho_get_preedit(str, attr, cursor, sub_comp_len); case method_type_INT_CODE: return int_get_preedit(str, attr, cursor, sub_comp_len); #if USE_TSIN case method_type_TSIN: return tsin_get_preedit(str, attr, cursor, sub_comp_len); #endif #if USE_ANTHY case method_type_ANTHY: return anthy_get_preedit(str, attr, cursor); #endif default: return gtab_get_preedit(str, attr, cursor, sub_comp_len); // dbg("metho %d\n", current_CS->in_method); } return 0; }
static void reload_data() { dbg("reload_data\n"); load_setttings(); if (current_method_type()==method_type_TSIN) set_wselkey(pho_selkey); // load_tsin_db(); change_win0_style(); change_win1_font(); change_win_gtab_style(); // change_win_pho_style(); load_tab_pho_file(); change_tsin_color(); update_win_kbm_inited(); destroy_inmd_menu(); load_gtab_list(TRUE); update_item_active_all(); #if 0 gcb_main(); #endif }
void load_tray_icon_win32() { dbg("load_tray_icon_win32\n"); #if WIN32 // when login, creating icon too early may cause block in gtk_status_icon_new_from_file if (win32_tray_disabled /* || !gcin_status_tray */) return; #endif // dbg("load_tray_icon_win32\n"); #if UNIX char *tip; tip=""; #else wchar_t *tip; tip=L""; #endif char *iconame="en-tsin.png"; char tt[32]; strcpy(tt, iconame); if (!current_CS || current_CS->im_state == GCIN_STATE_DISABLED||current_CS->im_state == GCIN_STATE_ENG_FULL) { iconame=capslock_on?"en-gcin-A.png":GCIN_TRAY_PNG; } else { iconame=inmd[current_CS->in_method].icon; } // dbg("caps %d %s\n", capslock_on, iconame); // dbg("tsin_pho_mode() %d\n", tsin_pho_mode()); gboolean is_tsin = current_method_type()==method_type_TSIN; if (current_CS && current_CS->im_state == GCIN_STATE_CHINESE && !tsin_pho_mode()) { if ((is_tsin || current_method_type()==method_type_MODULE)) { strcpy(tt, "en-"); strcat(tt, iconame); if (capslock_on && is_tsin) strcpy(tt, "en-tsin-A.png"); } else { if (current_method_type()==method_type_GTAB) { strcpy(tt, capslock_on?"en-gtab-A.png":"en-gtab.png"); } } iconame = tt; } dbg("iconame %s\n", iconame); char fname[128]; fname[0]=0; if (iconame) get_icon_path(iconame, fname); char *icon_st=NULL; char fname_state[128]; // dbg("%d %d\n",current_CS->im_state,current_CS->b_half_full_char); if (current_CS && (current_CS->im_state == GCIN_STATE_ENG_FULL || current_CS->im_state != GCIN_STATE_DISABLED && current_CS->b_half_full_char || current_method_type()==method_type_TSIN && tss.tsin_half_full)) { if (gb_output) { icon_st="full-simp.png"; tip = _L("全形/簡體輸出"); } else { icon_st="full-trad.png"; tip = _L("全形/正體輸出"); } } else { if (gb_output) { icon_st="half-simp.png"; tip= _L("半形/簡體輸出"); } else { icon_st="half-trad.png"; tip = _L("半形/正體輸出"); } } get_icon_path(icon_st, fname_state); // dbg("wwwwwwww %s\n", fname_state); if (gcin_status_win) disp_win_screen_status(fname, fname_state); if (!gcin_status_tray) return; #if UNIX if (gcin_win32_icon==GCIN_TRAY_UNIX) return; #endif if (icon_main) { // dbg("set %s %s\n", fname, fname_state); gtk_status_icon_set_from_file(icon_main, fname); gtk_status_icon_set_from_file(icon_state, fname_state); } else { // dbg("gtk_status_icon_new_from_file a\n"); icon_main = gtk_status_icon_new_from_file(fname); g_signal_connect(G_OBJECT(icon_main),"activate", G_CALLBACK (cb_activate), NULL); g_signal_connect(G_OBJECT(icon_main),"popup-menu", G_CALLBACK (cb_popup), NULL); // dbg("gtk_status_icon_new_from_file %s b\n", fname_state); icon_state = gtk_status_icon_new_from_file(fname_state); g_signal_connect(G_OBJECT(icon_state),"activate", G_CALLBACK (cb_activate_state), NULL); g_signal_connect(G_OBJECT(icon_state),"popup-menu", G_CALLBACK (cb_popup_state), NULL); // dbg("icon %s %s\n", fname, fname_state); } #if GTK_CHECK_VERSION(2,16,0) if (icon_state) gtk_status_icon_set_tooltip_text(icon_state, _(tip)); #endif if (icon_main) { char tt[64]; if (current_CS && inmd[current_CS->in_method].cname && inmd[current_CS->in_method].cname[0]) { dbg("cname %s\n", inmd[current_CS->in_method].cname); strcpy(tt, inmd[current_CS->in_method].cname); } if (!iconame || !strcmp(iconame, GCIN_TRAY_PNG) || !tsin_pho_mode()) strcpy(tt, "English"); #if GTK_CHECK_VERSION(2,16,0) gtk_status_icon_set_tooltip_text(icon_main, tt); #endif } return; }
gboolean feed_phrase(KeySym ksym, int state) { int i; // dbg("ksym:%x %c\n", ksym, ksym); load_phrase("phrase.table", &file_modify_time, tran, tranN); load_phrase("phrase-ctrl.table", &ctrl_file_modify_time, tran_ctrl, tran_ctrlN); if (ksym < 0x7f && isupper(ksym)) ksym = tolower(ksym); struct keystruc *tr; int trN; if (state & ControlMask) { tr = tran_ctrl; trN = tran_ctrlN; } else { tr = tran; trN = tranN; } char tt[2], *str; for(i=0; i < trN; i++) { if (tr[i].ksym!= ksym) continue; str = ((state & LockMask) && tr[i].str_caps) ? tr[i].str_caps : tr[i].str; if (str) { send_it: #if USE_TSIN if (current_method_type() == method_type_TSIN && current_CS->im_state == GCIN_STATE_CHINESE) { add_to_tsin_buf_str(str); if (tsin_cursor_end()) flush_tsin_buffer(); } else #endif if (gtab_phrase_on()) { insert_gbuf_nokey(str); if (gtab_cursor_end()) output_gbuf(); } else send_text(str); return TRUE; } } #if 0 if ((state&(ControlMask|ShiftMask|Mod1Mask|Mod4Mask|Mod5Mask))==ShiftMask && ksym>=' ' && ksym < 0x7e) { str = tt; tt[0]=ksym; tt[1]=0; goto send_it; } #endif return FALSE; }