void parent_commit_text(IBusEngine * iEngine) { IBusChewingEngine *self = IBUS_CHEWING_ENGINE(iEngine); IBUS_CHEWING_LOG(MSG, "* parent_commit_text(-): outgoingText=%s", self->outgoingText->text); #ifdef UNIT_TEST printf("* parent_commit_text(-, %s)\n", self->outgoingText->text); #else ibus_engine_commit_text(iEngine, self->outgoingText); #endif }
/*=================================================== * Mouse events */ void ibus_chewing_engine_candidate_clicked(IBusEngine *engine, guint index, guint button, guint state){ G_DEBUG_MSG(2,"***[I2] candidate_clicked(-, %u, %u, %u) ... proceed.", index, button, state); IBusChewingEngine *self=IBUS_CHEWING_ENGINE(engine); if (index >= chewing_get_candPerPage(self->context) || index <0) { G_DEBUG_MSG(3,"[I3] candidate_clicked() index out of ranged"); return; } if (self->inputMode==CHEWING_INPUT_MODE_SELECTING){ self->_priv->key_last=(guint) self->selKeys[index]; ibus_chewing_engine_handle_Default(self, self->_priv->key_last, FALSE); self_update(self); } else { G_DEBUG_MSG(3,"[I3] candidate_clicked() ... Wrong mode: %u", self->inputMode); } }
gboolean ibus_chewing_engine_process_key_event(IBusEngine *engine, guint keysym, guint keycode, guint modifiers){ gboolean result=TRUE; if (modifiers & IBUS_RELEASE_MASK){ /* Skip release event */ return TRUE; } IBusChewingEngine *self=IBUS_CHEWING_ENGINE(engine); guint kSym=ibus_chewing_engine_keycode_to_keysym(self,keysym, keycode, modifiers); G_DEBUG_MSG(2,"***[I2] process_key_event(-, %x(%s), %x, %x) orig keysym=%x... proceed.",kSym, keyName_get(kSym), keycode, modifiers,keysym); guint state= modifiers & (IBUS_SHIFT_MASK | IBUS_CONTROL_MASK | IBUS_MOD1_MASK); self->_priv->key_last=kSym; if (state==0){ guint kSym_tmp=keysym_KP_to_normal(kSym); if (kSym_tmp){ G_DEBUG_MSG(3,"***[I3] process_key_event(): %x is from keypad.", kSym_tmp); /* Is keypad key */ if ((self->chewingFlags & CHEWING_FLAG_NUMPAD_ALWAYS_NUMBER) && chewing_get_ChiEngMode(self->context)){ chewing_set_ChiEngMode(self->context, 0); self_handle_Default(self,kSym_tmp,FALSE); chewing_set_ChiEngMode(self->context,CHINESE_MODE); }else{ /* Convert kp numbers to normal */ self_handle_Default(self,kSym_tmp,FALSE); } }else{ switch (kSym){ case IBUS_Return: case IBUS_KP_Enter: chewing_handle_Enter(self->context); break; case IBUS_Escape: if (self->inputMode==CHEWING_INPUT_MODE_BYPASS) return FALSE; chewing_handle_Esc(self->context); break; case IBUS_BackSpace: if (self->inputMode==CHEWING_INPUT_MODE_BYPASS) return FALSE; chewing_handle_Backspace(self->context); break; case IBUS_Delete: case IBUS_KP_Delete: if (self->inputMode==CHEWING_INPUT_MODE_BYPASS) return FALSE; chewing_handle_Del(self->context); break; case IBUS_space: case IBUS_KP_Space: if (self->chewingFlags & CHEWING_FLAG_PLAIN_ZHUYIN) { if (chewing_cand_TotalChoice(self->context) == 0) { chewing_handle_Space(self->context); } } else { /** * Fix for space in Temporary English mode. */ chewing_handle_Space(self->context); } if (self->inputMode==CHEWING_INPUT_MODE_SELECTION_DONE || self->inputMode==CHEWING_INPUT_MODE_BYPASS ) ibus_chewing_engine_set_status_flag(self,ENGINE_STATUS_NEED_COMMIT); break; case IBUS_Page_Up: case IBUS_KP_Page_Up: if (self->inputMode==CHEWING_INPUT_MODE_BYPASS) return FALSE; IBUS_ENGINE_GET_CLASS(engine)->page_up(engine); break; case IBUS_Page_Down: case IBUS_KP_Page_Down: if (self->inputMode==CHEWING_INPUT_MODE_BYPASS) return FALSE; IBUS_ENGINE_GET_CLASS(engine)->page_down(engine); break; case IBUS_Up: case IBUS_KP_Up: if (self->inputMode==CHEWING_INPUT_MODE_BYPASS) return FALSE; IBUS_ENGINE_GET_CLASS(engine)->cursor_up(engine); break; case IBUS_Down: case IBUS_KP_Down: if (self->inputMode==CHEWING_INPUT_MODE_BYPASS) return FALSE; IBUS_ENGINE_GET_CLASS(engine)->cursor_down(engine); break; case IBUS_Left: case IBUS_KP_Left: if (self->inputMode==CHEWING_INPUT_MODE_BYPASS) return FALSE; chewing_handle_Left(self->context); break; case IBUS_Right: case IBUS_KP_Right: if (self->inputMode==CHEWING_INPUT_MODE_BYPASS) return FALSE; chewing_handle_Right(self->context); break; case IBUS_Home: case IBUS_KP_Home: if (self->inputMode==CHEWING_INPUT_MODE_BYPASS) return FALSE; chewing_handle_Home(self->context); break; case IBUS_End: case IBUS_KP_End: if (self->inputMode==CHEWING_INPUT_MODE_BYPASS) return FALSE; chewing_handle_End(self->context); break; case IBUS_Tab: if (self->inputMode==CHEWING_INPUT_MODE_BYPASS) return FALSE; chewing_handle_Tab(self->context); break; case IBUS_Caps_Lock: /* When Chi->Eng with incomplete character */ if (chewing_get_ChiEngMode(self->context) && !chewing_zuin_Check(self->context)){ /* chewing_zuin_Check==0 means incomplete character */ /* Send a space to finish the character */ chewing_handle_Space(self->context); } chewing_handle_Capslock(self->context); self_refresh_property(self,"chewing_chieng_prop"); break; case IBUS_Shift_L: case IBUS_Shift_R: /* Some QT application will sneak these through */ return FALSE; case IBUS_Alt_L: case IBUS_Alt_R: /* Some QT application will sneak these through */ return FALSE; case IBUS_Control_L: case IBUS_Control_R: /* Some QT application will sneak these through */ return FALSE; default: self_handle_Default(self,kSym,FALSE); break; } } }else if (state==IBUS_SHIFT_MASK){ switch(kSym){ case IBUS_Left: if (self->inputMode==CHEWING_INPUT_MODE_BYPASS) return FALSE; chewing_handle_ShiftLeft(self->context); break; case IBUS_Right: if (self->inputMode==CHEWING_INPUT_MODE_BYPASS) return FALSE; chewing_handle_ShiftRight(self->context); break; case IBUS_Up: case IBUS_KP_Up: case IBUS_Down: case IBUS_KP_Down: case IBUS_Page_Up: case IBUS_KP_Page_Up: case IBUS_Page_Down: case IBUS_KP_Page_Down: case IBUS_Home: case IBUS_End: if (self->_priv->statusFlags & ENGINE_STATUS_NEED_COMMIT) self_force_commit(self); return FALSE; case IBUS_space: case IBUS_KP_Space: chewing_handle_ShiftSpace(self->context); chewing_set_ShapeMode(self->context, !chewing_get_ShapeMode(self->context)); self_refresh_property(self,"chewing_alnumSize_prop"); break; default: if (kSym>127 || kSym<0){ /* Special keys, must let it through */ return FALSE; } self_handle_Default(self,kSym,TRUE); break; } }else if (state==IBUS_CONTROL_MASK){ if (kSym>=IBUS_0 && kSym<=IBUS_9){ chewing_handle_CtrlNum(self->context,kSym); // }else if (kSym==IBUS_v || kSym==IBUS_V){ // chewing_handle_Right(self->context); }else{ result=FALSE; } }else{ result=FALSE; } if (!result){ return FALSE; } return self_update(self); }