Etsushi Kato
ekato****@ees*****
2004年 2月 23日 (月) 19:57:38 JST
On Mon, Feb 23, 2004 at 04:40:53AM +0900, TOKUNAGA Hiroyuki <tkng****@xem*****> wrote: > * uim-xim > - テンキーが使えるように(2chのななしさん) XIM の部分はあまり重要ではないかもしれませんが、個人的に気になったので 少し変更してみました。 まず、KP_* の keysym だけを XLookupString() したあといきなり書き変えて しまっているので、これをすでに存在している keyState(keyEventX *x) での key_sym 変更コードに移してまとめました。 次に、uim-0.3.0 になって uim-xim でもテンキーは使えるようになったので すが、漢字モードのときにテンキーの + とか - を押してしまうと、全角の記 号になってしまいます。これではせっかくテンキーを使う意味が半減してしま うような気がしますし、gtk immodule の挙動とも異なるので、漢字モードで もテンキーでの記号入力は普通の ASCII 記号が出るようにしました。 どうやったかというと大したことはなく、keyState の keysym 変換において テンキーの keysym をそのまま使うようにした、というだけです。こうすれば、 InputContext::pushKey(keyState *k) から呼び出される uim_press_key() で commit_raw_flag が 1 になり、XimIC::OnKeyEvent(keyEventX e) で COMMIT_RAW となり uim を通さず send_key_event() でそのままイベントを送 ることができているようです。 gtk immodule のほうは、テンキーの記号がUKey_Other になっても uim_key_snoop() が FALSE になるので、結果的には uim を通さず入力できて いるようです (ということで、gtk-im-uim.c の convert_keyval() の GDK_KP_0 から GDK_KP_9 の変換部分はとりあえずは必要ないようです。この あたりは、API とかテーブルの変更によって今後変ってくるのかもしれません が)。 -- Etsushi Kato ekato****@ees***** -------------- next part -------------- --- uim/uim-0.3.0.1/xim/ximim.cpp.orig Fri Feb 20 22:42:39 2004 +++ uim/uim-0.3.0.1/xim/ximim.cpp Mon Feb 23 17:40:44 2004 @@ -247,31 +247,6 @@ k.press = (k.ev.type == KeyPress); k.key_sym = ks; - switch (ks) { - case XK_KP_0: - case XK_KP_1: - case XK_KP_2: - case XK_KP_3: - case XK_KP_4: - case XK_KP_5: - case XK_KP_6: - case XK_KP_7: - case XK_KP_8: - case XK_KP_9: - case XK_KP_Equal: - case XK_KP_Multiply: - case XK_KP_Add: - case XK_KP_Separator: - case XK_KP_Subtract: - case XK_KP_Decimal: - case XK_KP_Divide: - k.key_sym = ks - XK_KP_Space; - break; - case XK_KP_Enter: - k.key_sym = XK_Return; - break; - } - if (ic) { ic->OnKeyEvent(k); } --- uim-0.3.0.1/xim/ximserver.cpp.orig Sat Feb 21 17:15:41 2004 +++ uim-0.3.0.1/xim/ximserver.cpp Mon Feb 23 18:29:46 2004 @@ -533,6 +533,26 @@ case XK_Mode_switch: mKey = UKey_Mode_switch; break; case XK_Henkan_Mode: mKey = UKey_Henkan_Mode; break; case XK_Muhenkan: mKey = UKey_Muhenkan; break; + case XK_KP_0: + case XK_KP_1: + case XK_KP_2: + case XK_KP_3: + case XK_KP_4: + case XK_KP_5: + case XK_KP_6: + case XK_KP_7: + case XK_KP_8: + case XK_KP_9: + case XK_KP_Equal: + case XK_KP_Multiply: + case XK_KP_Add: + case XK_KP_Separator: + case XK_KP_Subtract: + case XK_KP_Decimal: + case XK_KP_Divide: + case XK_KP_Enter: + mKey = x->key_sym; + break; default: mKey = UKey_Other; } }