星期五, 3月 18, 2011

gcin筆記

gcin輸入法以 INMD 定義,在 gtab-list.cpp 裡載入,從 gtab.list 載入,裏面決定了檔名、方法...

如果要加新酷音,
  • 在 method_codes[] 裡增加一個項目, !CHEWING
  • gtab.list 裡增加一個新的項目,新酷音 ] !CHEWING chewing.png
  • MAX_GTAB_NUM_KEY 也要再加1
  • load_gtab_list 一開頭把 method_type 寫死了,所以這邊也要加,inmd[16].method_type=method_type_CHEWING
  • 加 method_type_CHEWING


以上從 gcin-setup.cpp 的 cb_default_input_method() 開始追
callback 裡呼叫了 create_gtablist_window(),然後再呼叫 create_model()。從裏面的 add_items() 再看到 load_gtab_list() 而推導的。

從 GtkIMContextClass 的 filter_keypress 開始看: gtk_im_context_gcin_filter_keypress

大致上的架構是這樣子:
gtk_im_context -> gcin client <-> gcin server

eve.cpp 裡的 ProcessKeyPress 是處理 Key 的部份,所以這邊可以看到輸入法的切換、暫時切換為英文、選phrase...等等的處理。

沒有留言: