static gboolean ibus_handwrite_engine_process_key_event(IBusEngine *engine, guint keyval, guint keycode, guint modifiers) { IBusHandwriteEngine *handwrite = (IBusHandwriteEngine *) engine; clutter_actor_queue_redraw(handwrite->drawpanel); if (!modifiers) return FALSE; if(!handwrite->engine->strokes->len ) return FALSE; switch (keyval) { case IBUS_BackSpace: if(handwrite->needclear) return FALSE; if (handwrite->engine->strokes->len) { ibus_handwrite_recog_remove_stroke(handwrite->engine, 1); return TRUE; } //ibus_handwrite_engine_disable(handwrite); return FALSE; case IBUS_space: return ibus_handwrite_engine_commit_text(handwrite,0); case IBUS_0 ... IBUS_9: case IBUS_KP_0 ... IBUS_KP_9: return ibus_handwrite_engine_commit_text(handwrite, (keyval > IBUS_KP_0) ? (keyval - IBUS_KP_0) : (keyval - IBUS_0)); case IBUS_Escape: ibus_handwrite_recog_clear_stroke(handwrite->engine); return TRUE; } return FALSE; }
static gboolean ibus_handwrite_engine_process_key_event(IBusEngine *engine, guint keyval, guint keycode, guint modifiers) { IBusHandwriteEngine *handwrite = (IBusHandwriteEngine *) engine; gtk_widget_queue_draw(handwrite->drawpanel); /* filter out the key release event. */ if (modifiers & IBUS_RELEASE_MASK) return TRUE; switch (keyval) { case IBUS_BackSpace: if(handwrite->needclear) return FALSE; if (handwrite->engine->strokes->len) { ibus_handwrite_recog_remove_stroke(handwrite->engine, 1); return TRUE; } //ibus_handwrite_engine_disable(handwrite); return FALSE; case IBUS_space: return ibus_handwrite_engine_commit_text(handwrite,0); case IBUS_0 ... IBUS_9: case IBUS_KP_0 ... IBUS_KP_9: return ibus_handwrite_engine_commit_text(handwrite, (keyval > IBUS_KP_0) ? (keyval - IBUS_KP_0) : (keyval - IBUS_0)); case IBUS_Escape: ibus_handwrite_recog_clear_stroke(handwrite->engine); return TRUE; } return FALSE; }