Etsushi Kato
ekato****@ees*****
2004年 11月 7日 (日) 20:35:02 JST
さきほど uim の日本語 wiki を見ていましたら、uim-xim 0.4.5 で Tcl/Tk を使ったアプリで入力できないという報告に気づきました。 この問題は Tcl/Tk の XIM 実装の問題なので、scim の X11 frontend や ATOKX などでも生じるかもしれません。 とりあえず、svn repository のものでは --fullsync というオプションを起 動時に与えると、Tcl/Tk でも入力できるようにしておきました。 いちおう、0.4.5 向けにもパッチを添付しておきます。 full-synchronous method と、on-demand-synchronous method のどちらをデ フォルトにすべきか、意見がありましたらどうぞよろしくお願いします。 -- Etsushi Kato ekato****@ees***** -------------- next part -------------- diff -uNr /Users/kato/src/uim/uim-0.4.5.orig/xim/main.cpp /Users/kato/src/uim-0.4.5/xim/main.cpp --- /Users/kato/src/uim/uim-0.4.5.orig/xim/main.cpp Fri Oct 15 18:18:48 2004 +++ /Users/kato/src/uim-0.4.5/xim/main.cpp Sun Nov 7 20:06:58 2004 @@ -69,6 +69,8 @@ "--help , --version :Show usage or version\n" "--list :Show available backend conversion engines\n" "--engine=ENGINE :Use ENGINE as a backend conversion engine at startup\n" +"--fullsync :Use full-synchronous method of XIM event flow\n" +" (use this option if you use Tcl/Tk GUI toolkit)\n" "--trace :trace-connection\n" "--trace-xim :trace-xim-message\n"; const char *default_engine; @@ -440,6 +442,8 @@ g_option_mask |= OPT_TRACE_XIM; } else if (!strncmp(opt, "engine=", 7)) { default_engine = strdup(&argv[i][9]); + } else if (!strcmp(opt, "fullsync")) { + g_option_mask |= OPT_FULL_SYNC; } } } diff -uNr /Users/kato/src/uim/uim-0.4.5.orig/xim/ximim.cpp /Users/kato/src/uim-0.4.5/xim/ximim.cpp --- /Users/kato/src/uim/uim-0.4.5.orig/xim/ximim.cpp Fri Oct 15 18:18:48 2004 +++ /Users/kato/src/uim-0.4.5/xim/ximim.cpp Sun Nov 7 20:08:26 2004 @@ -292,6 +292,8 @@ if (ic) ic->OnKeyEvent(k); + if (g_option_mask & OPT_FULL_SYNC) + send_sync_reply(icid); break; default: printf("unknown type of forwarded event.(%d)\n", k.ev.type); diff -uNr /Users/kato/src/uim/uim-0.4.5.orig/xim/ximserver.h /Users/kato/src/uim-0.4.5/xim/ximserver.h --- /Users/kato/src/uim/uim-0.4.5.orig/xim/ximserver.h Fri Oct 15 18:18:48 2004 +++ /Users/kato/src/uim-0.4.5/xim/ximserver.h Sun Nov 7 20:08:01 2004 @@ -97,6 +97,8 @@ #define OPT_TRACE 1 // trace XIM connection #define OPT_TRACE_XIM 2 +// use full-synchronous XIM event flow (safe for Tcl/Tk 8.{3,4}) +#define OPT_FULL_SYNC 4 // byte order diff -uNr /Users/kato/src/uim/uim-0.4.5.orig/xim/ximtrans.cpp /Users/kato/src/uim-0.4.5/xim/ximtrans.cpp --- /Users/kato/src/uim/uim-0.4.5.orig/xim/ximtrans.cpp Fri Oct 15 18:18:48 2004 +++ /Users/kato/src/uim-0.4.5/xim/ximtrans.cpp Sun Nov 7 20:09:58 2004 @@ -506,7 +506,12 @@ t->pushC16(imid); t->pushC16(0); t->pushC32(KeyPressMask); - t->pushC32(~KeyPressMask); // no need to send XIM_SYNC_REPLY from XIM server + if (g_option_mask & OPT_FULL_SYNC) + t->pushC32(KeyPressMask); // no need to send XIM_SYNC_REPLY from + // XIM server + else + t->pushC32(~KeyPressMask); // need to send XIM_SYNC_REPLY from + // XIM server push_packet(t); }