From ashie @ homa.ne.jp Mon Feb 16 20:01:44 2004 From: ashie @ homa.ne.jp (Takuro Ashie) Date: Mon, 16 Feb 2004 20:01:44 +0900 Subject: [Imime-devel] =?iso-2022-jp?b?Rnc6IGltaW1lLTAuMC42IBskQiRIGyhC?= =?iso-2022-jp?b?IEdUSystMi4yLjQ=?= Message-ID: <20040216200144.664155e8.ashie@homa.ne.jp> 足永です。 英数字が2重に変換される問題 http://www.homa.ne.jp/~ashie/diary/board.cgi?act=read&msgid=542 で、かなり以前にEBView作者の須藤さんからパッチを頂いています。 中身はまだまったく検討していないのですが(かなり忘れてしまっています)、 CVS版はデフォルトがon the spot形式になってコードか少々変更されているので、 このままでは適用できない可能性がありますし、正しい対応かどうかもまったく 検討しておりません。 これから時間を作って読み直してみます。 Begin forwarded message: Date: Sun, 18 Jan 2004 16:09:58 +0900 From: Kenichi Suto To: "ashie @ homa.ne.jp" Subject: imime-0.0.6 と GTK+-2.2.4 須藤@EBView作者です。 こんにちは。 imime を使わせていただいていますが,最近 GTK+-2.2.4 (tml版) にしたとこ ろ,正常に入力できなくなってしまいました。現象としては,無変換の状態で英 文字を入力すると,同じ文字が2つずつ入力されます。IME のウィンドウもテキ ストボックスに重ならず,少し右にずれてしまっており,同じ文字が GTK と IME で 2重に表示されたようになります。また,確定しても何も入力されませ ん。さらに,アプリケーション起動時に次のメッセージが表示されます。 ----------- ** (ebview.exe:13192): CRITICAL **: file gtkimcontextime.c: line 404 (get_utf8_p reedit_string): assertion `himc' failed ** (ebview.exe:13192): CRITICAL **: file gtkimcontextime.c: line 500 (get_pango_ attr_list): assertion `himc' failed ** (ebview.exe:13192): CRITICAL **: file gtkimcontextime.c: line 404 (get_utf8_p reedit_string): assertion `himc' failed ** (ebview.exe:13192): CRITICAL **: file gtkimcontextime.c: line 500 (get_pango_ attr_list): assertion `himc' failed ------------ そこでいろいろといじってみたところ,添付のパッチで外見上は正常っぽく動く ようになりました。変更点は次のとおりです。 1. キーリリースイベントは無視する。 英字が 2 重に入力される件の対応です。 2. 上記のエラーへの対処。 3. 入力中の文字を保持しておくようにして,確定したところでこれを comit す る。gtk_im_context_ime_get_preedit_string()の都度 ImmGetCompositionString() を呼ぶと空文字列が返ることがあったため,IME か らメッセージがきたタイミングでだけ文字列を取りに行くようにしました。また この結果,cursor_pos は完全に無視しています。cursor_pos を 0 にしない と,入力するたびに IME のウィンドウがどんどん右にずれていく現象も出まし た(本来はウィンドウ位置の計算方法を変えるべきか)。 このあたりほとんど理解していないのでこれで正しいとは思えませんが,個人的 には使えているので,とりあえずお送りしておきます。 先日 EBView 0.3.3 をリリースしましたが,暫定的に imime をはずした状態に しています。Pango が新しくなって Windows でも表示がかなり高速になったの で,日本語入力がきちんとできればいい感じになりそうです。 動作環境: ・Windows 2000 ・ATOK 16 ・tml 版 GTK+-2.2.4 ・cygwin (ただし -mno-cygwin なので Windows ネイティブ) ・imime-0.0.6 ----- パッチここから ----- *** gtkimcontextime.h.orig Thu Jul 24 21:04:57 2003 --- gtkimcontextime.h Sun Jan 18 13:25:59 2004 *************** *** 57,62 **** --- 57,63 ---- GdkRectangle cursor_location; gint preedit_change; + gchar *str; GtkIMContextIMEPrivate *priv; }; *** gtkimcontextime.c.orig Sun Jul 27 22:49:52 2003 --- gtkimcontextime.c Sun Jan 18 15:40:44 2004 *************** *** 208,213 **** --- 208,215 ---- context_ime->cursor_location.height = 0; context_ime->preedit_change = GTK_IM_CONTEXT_IME_PREEDIT_ALWAYS; context_ime->priv = g_malloc0 (sizeof (GtkIMContextIMEPrivate)); + context_ime->str = NULL; + } *************** *** 339,344 **** --- 341,353 ---- g_return_val_if_fail (GTK_IS_IM_CONTEXT_IME (context), FALSE); g_return_val_if_fail (event, FALSE); + if(event->type == GDK_KEY_RELEASE) + return retval; + + if(event->keyval == GDK_Return ) { + return retval; + } + context_ime = GTK_IM_CONTEXT_IME (context); if (!context_ime->focus) return FALSE; if (!GDK_IS_WINDOW (context_ime->client_window)) return FALSE; *************** *** 485,490 **** --- 495,604 ---- } + static gchar * + get_utf8_result_string (GtkIMContextIME *context_ime, gint *pos_ret) + { + gchar *utf8str = NULL; + HWND hwnd; + HIMC himc; + gint pos = 0; + + if (pos_ret) + *pos_ret = 0; + + /* + g_return_val_if_fail (GTK_IS_IM_CONTEXT_IME (context_ime), + g_strdup ("")); + */ + + hwnd = GDK_WINDOW_HWND (context_ime->client_window); + himc = ImmGetContext (hwnd); + + /* shouldn't return NULL */ + g_return_val_if_fail (himc, g_strdup ("")); + + if (context_ime->preediting) { + gpointer buf; + glong len; + GError *error = NULL; + + #ifdef UNICODE + len = ImmGetCompositionString (himc, GCS_RESULTSTR, NULL, 0); + buf = g_malloc (len); + if (len > 0 && buf) { + ImmGetCompositionString (himc, GCS_RESULTSTR, buf, len); + len /= sizeof (gunichar2); + utf8str = g_utf16_to_utf8 (buf, len, NULL, NULL, &error); + if (error) { + g_warning ("%s", error->message); + g_error_free (error); + } + + if (pos_ret) { + pos = ImmGetCompositionString(himc, GCS_CURSORPOS, NULL, 0); + if (pos < 0 || len < pos) { + g_warning ("ImmGetCompositionString: " + "Invalid cursor position!"); + pos = 0; + } + } + g_free (buf); + } + #else /* not UNICODE */ + len = ImmGetCompositionString (himc, GCS_RESULTSTR, NULL, 0); + buf = g_malloc (len); + if (len > 0 && buf) { + ImmGetCompositionString (himc, GCS_RESULTSTR, buf, len); + utf8str = g_locale_to_utf8 (buf, len, NULL, NULL, &error); + if (error) { + g_warning ("%s", error->message); + g_error_free (error); + } + + if (pos_ret) { + pos = ImmGetCompositionString(himc, GCS_CURSORPOS, NULL, 0); + /* get cursor position by offset */ + if (pos < len && utf8str) { + gchar *tmpstr; + + tmpstr = g_locale_to_utf8 (buf, pos, NULL, NULL, &error); + if (error) { + g_warning ("%s", error->message); + g_error_free (error); + } + if (tmpstr) { + pos = g_utf8_strlen (tmpstr, -1); + } else { + pos = 0; + } + g_free (tmpstr); + } else if (pos == len && utf8str) { + pos = g_utf8_strlen(utf8str, -1); + } else { + g_warning ("ImmGetCompositionString: " + "Invalid cursor position!"); + pos = 0; + } + } + g_free (buf); + } + #endif /* not UNICODE */ + } + + if (!utf8str) { + utf8str = g_strdup(""); + pos = 0; + } + + if (pos_ret) + *pos_ret = pos; + + ImmReleaseContext (hwnd, himc); + + return utf8str; + } + + static PangoAttrList * get_pango_attr_list (GtkIMContextIME *context_ime, const gchar *utf8str) { *************** *** 495,500 **** --- 609,617 ---- /* g_return_val_if_fail (GTK_IS_IM_CONTEXT_IME (context_ime), attr); */ hwnd = GDK_WINDOW_HWND (context_ime->client_window); + if(hwnd == NULL) + return attrs; + himc = ImmGetContext (hwnd); g_return_val_if_fail (himc, attrs); *************** *** 613,619 **** context_ime = GTK_IM_CONTEXT_IME (context); ! utf8str = get_utf8_preedit_string (context_ime, &pos); if (attrs) *attrs = get_pango_attr_list (context_ime, utf8str); --- 730,744 ---- context_ime = GTK_IM_CONTEXT_IME (context); ! if(context_ime->preediting == FALSE) { ! utf8str = g_strdup(""); ! } else { ! if(context_ime->str) { ! utf8str = g_strdup(context_ime->str); ! } else { ! utf8str = g_strdup(""); ! } ! } if (attrs) *attrs = get_pango_attr_list (context_ime, utf8str); *************** *** 954,965 **** switch (msg->message) { case WM_IME_COMPOSITION: ! if ((msg->lParam & GCS_COMPSTR) && PREEDIT_IS_ACTIVE (context_ime)) g_signal_emit_by_name (context, "preedit_changed"); break; case WM_IME_STARTCOMPOSITION: context_ime->preediting = TRUE; gtk_im_context_ime_set_cursor_location (context, NULL); if (PREEDIT_IS_ACTIVE (context_ime)) g_signal_emit_by_name (context, "preedit_start"); --- 1079,1102 ---- switch (msg->message) { case WM_IME_COMPOSITION: ! if (msg->lParam & GCS_RESULTSTR) { ! context_ime->str = get_utf8_result_string(context_ime, NULL); ! break; ! } ! ! if ((msg->lParam & GCS_COMPSTR) && PREEDIT_IS_ACTIVE (context_ime)) { ! context_ime->str = get_utf8_preedit_string (context_ime, NULL); g_signal_emit_by_name (context, "preedit_changed"); + } break; case WM_IME_STARTCOMPOSITION: context_ime->preediting = TRUE; + + if(context_ime->str) { + g_free(context_ime->str); + context_ime->str = NULL; + } gtk_im_context_ime_set_cursor_location (context, NULL); if (PREEDIT_IS_ACTIVE (context_ime)) g_signal_emit_by_name (context, "preedit_start"); *************** *** 970,975 **** --- 1107,1116 ---- if (PREEDIT_IS_ACTIVE (context_ime)) { g_signal_emit_by_name (context, "preedit_changed"); g_signal_emit_by_name (context, "preedit_end"); + if(context_ime->str){ + g_signal_emit_by_name (G_OBJECT (context_ime), + "commit", context_ime->str); + } } break; ----- パッチここまで ----- ======================================= 須藤 賢一 (Kenichi Suto) ======================================= From ashie @ homa.ne.jp Tue Feb 17 11:27:03 2004 From: ashie @ homa.ne.jp (Takuro Ashie) Date: Tue, 17 Feb 2004 11:27:03 +0900 Subject: [Imime-devel] =?iso-2022-jp?b?Rnc6IFJlOiBpbWltZS0wLjAuNiA=?= =?iso-2022-jp?b?GyRCJEgbKEIgR1RLKy0yLjIuNA==?= Message-ID: <20040217112703.35c9a054.ashie@homa.ne.jp> 足永です。 再び、今度はCVS版に対するパッチを須藤さんから頂きました。 これならば問題無さそうである事が一目でわかるので、適用させて頂きたいと思 います。 ありがとうございます。 Begin forwarded message: Date: Tue, 17 Feb 2004 10:57:00 +0900 From: Kenichi Suto To: Takuro Ashie Subject: Re: imime-0.0.6 と GTK+-2.2.4 須藤です。こんにちは。 回答いただき、ありがとうございます。 さっそくCVSからソースを取得して試してみました。 まだアルファベットの入力で同じキーが2度入力される問題があったので、以下 の変更を行ったところ、うまく動くようになりました(前回お送りしたその他の 変更は不要でした)。 そろそろEBViewの最新版をリリースしようと思っているのですが、CVS版にこの 変更を加えたバージョンを同梱しようと思います。問題があるようであればご連 絡ください。 では。 $ diff -c gtkimcontextime.c.orig gtkimcontextime.c *** gtkimcontextime.c.orig Tue Feb 17 10:38:19 2004 --- gtkimcontextime.c Tue Feb 17 10:46:01 2004 *************** *** 302,307 **** --- 302,314 ---- g_return_val_if_fail (GTK_IS_IM_CONTEXT_IME (context), FALSE); g_return_val_if_fail (event, FALSE); + if(event->type == GDK_KEY_RELEASE) + return retval; + + if(event->keyval == GDK_Return ) { + return retval; + } + context_ime = GTK_IM_CONTEXT_IME (context); if (!context_ime->focus) return FALSE; > 足永です。 > 長々と放置してしまい、誠に申し訳ありません。 > >> このあたりほとんど理解していないのでこれで正しいとは思えませんが,個人的 >> には使えているので,とりあえずお送りしておきます。 >> >> 先日 EBView 0.3.3 をリリースしましたが,暫定的に imime をはずした状態に >> しています。Pango が新しくなって Windows でも表示がかなり高速になったの >> で,日本語入力がきちんとできればいい感じになりそうです。 > > > きちんとパッチを読んでから対応しようと思っていたのですが、まだ読めていま > せん。これ以上放置するのも申し訳無いので、とりあえずimime-devel MLに須藤 > さんのメールを転送させて頂きます。 > > http://lists.sourceforge.jp/mailman/listinfo/imime-devel > > なんとか時間を割いて対処しますので、お見捨て無きようこれからも宜しくお願 > い致しますm( )m > > なお、CVS版はimime-0.0.6から激しく変更されており、on the spot形式の入力 > がデフォルトなっている関係上、既に直っている可能性もあります。 > > (中身をかなり忘れてしまっているので、全然外しているかもしれませんが...) -- ======================================= 須藤 賢一 (Kenichi Suto) E-Mail : ksuto @ ybb.ne.jp 〒197-0803 東京都あきる野市 瀬戸岡247-1 クレール浦野201 TEL/FAX : 042-550-2412 ======================================= From ashie @ homa.ne.jp Tue Feb 17 17:05:12 2004 From: ashie @ homa.ne.jp (Takuro Ashie) Date: Tue, 17 Feb 2004 17:05:12 +0900 Subject: [Imime-devel] imime-0.1.0 Message-ID: <20040217170512.45204a63.ashie@homa.ne.jp> 足永です。 無変換状態で2重に入力されてしまう問題は結構深刻ですので、須藤さんから頂 いたパッチをマージし、imime-0.1.0としてリリースしました。 http://sourceforge.jp/projects/imime/files/?release_id=8220#8220 幾つか問題は残っていますし、ActiveIMM対応等もしたいと思っていますが、当 初の目標であったon the spot入力は実現できているので、そろそろ gtk-i18n-develかBTSに投げてみようかと思っています。 From iwm @ maid.org Wed Feb 18 02:09:18 2004 From: iwm @ maid.org (Kazuki IWAMOTO) Date: Wed, 18 Feb 2004 02:09:18 +0900 Subject: [Imime-devel] Re: imime-0.1.0 In-Reply-To: <20040217170512.45204a63.ashie@homa.ne.jp> References: <20040217170512.45204a63.ashie@homa.ne.jp> Message-ID: <40324ABE.6030304@maid.org> 岩本一樹です。 ぐはッ! リリースは2月29日だと思って油断していました。 すみません。私の方は、imimeの成果を元にGTK+を改造する作業にハマってしまい、 imimeの方に時間が取れません。でも、imimeのバイナリは作ります。 http://lists.sourceforge.jp/mailman/archives/imime-devel/2003-November/000010.html Visual C++でコンパイルしたパッケージ構成は上記で良いですよね。 ファイル名はimime-0.1.0-win32-bin.zipが良いのか、それともtmlに習って imime-0.1.0.zipの方が良いのか...? 異論がなければimime-0.1.0.zipにします。 2月29日までにはMakefile.mscを改変します。Visual C++におけるGTK+の 開発環境の作り方みたいなものをGTK+の改造とともに思考錯誤しているのですが、 その結果を反映したいです。(既に、tmaidやvmaidには反映していますが) 何と言うかGTK+のソースコードを見るというのは、開けてはいけない玉手箱を 開けてしまったような気がします。GTK+はハッカーの産物だと実感しました。 GTK+の改造に失敗したらimimeによる多言語入力という路線に復帰したいと思います。 岩本一樹 iwm @ maid.org From ashie @ homa.ne.jp Wed Feb 18 10:29:07 2004 From: ashie @ homa.ne.jp (Takuro Ashie) Date: Wed, 18 Feb 2004 10:29:07 +0900 Subject: [Imime-devel] Re: imime-0.1.0 In-Reply-To: <40324ABE.6030304@maid.org> References: <20040217170512.45204a63.ashie@homa.ne.jp> <40324ABE.6030304@maid.org> Message-ID: <20040218102907.5982bbcb.ashie@homa.ne.jp> 足永です。 On Wed, 18 Feb 2004 02:09:18 +0900 Kazuki IWAMOTO wrote: > ぐはッ! リリースは2月29日だと思って油断していました。 すいません、勝手にリリースしてしまいました... # 直すとすぐリリースしたくなる病は直さなければ... > imimeの方に時間が取れません。でも、imimeのバイナリは作ります。 お願いします。 > > http://lists.sourceforge.jp/mailman/archives/imime-devel/2003-November/000010.html > > Visual C++でコンパイルしたパッケージ構成は上記で良いですよね。 > ファイル名はimime-0.1.0-win32-bin.zipが良いのか、それともtmlに習って > imime-0.1.0.zipの方が良いのか...? 異論がなければimime-0.1.0.zipにします。 はい、それでお願いします。 > > 2月29日までにはMakefile.mscを改変します。Visual C++におけるGTK+の > 開発環境の作り方みたいなものをGTK+の改造とともに思考錯誤しているのですが、 > その結果を反映したいです。(既に、tmaidやvmaidには反映していますが) > お願いします。私の方は肉の日用のネタを残していなかったので、肉の日までに 何をしたらいいのか困っています(ぉ) From iwm @ maid.org Sat Feb 21 04:01:08 2004 From: iwm @ maid.org (Kazuki IWAMOTO) Date: Sat, 21 Feb 2004 04:01:08 +0900 Subject: [Imime-devel] Re: imime-0.1.0 In-Reply-To: <20040218102907.5982bbcb.ashie@homa.ne.jp> References: <20040217170512.45204a63.ashie@homa.ne.jp> <40324ABE.6030304@maid.org> <20040218102907.5982bbcb.ashie@homa.ne.jp> Message-ID: <40365974.7070500@maid.org> 岩本一樹です。 imime-0.1.0.zipをリリースしました。 岩本一樹 iwm @ maid.org From iwm @ maid.org Fri Feb 27 04:23:14 2004 From: iwm @ maid.org (Kazuki IWAMOTO) Date: Fri, 27 Feb 2004 04:23:14 +0900 Subject: [Imime-devel] =?iso-2022-jp?b?TWFrZWZpbGUubXNjGyRCJHI5OT83GyhC?= Message-ID: <403E47A2.7090501@maid.org> 岩本一樹です。 Makefile.mscを更新しました。 あと、今のプロジェクトのホームページの内容は古過ぎるので cvsの内容でよければwebの方も更新して下さい。 (私には権限がないので) 岩本一樹 iwm @ maid.org