[Anthy-dev 1343] uim-xim 0.4.5 and Tcl/Tk

Zurück zum Archiv-Index

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


Anthy-dev メーリングリストの案内
Zurück zum Archiv-Index