[Anthy-dev 595] Re: uim 0.3.0 released

Back to archive index

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;
 	}
     }


Anthy-dev メーリングリストの案内
Back to archive index