2015年7月28日火曜日

Chromium 44 + uim の挙動が変

Chromium 44 と uim の相性

Chromium 44 で uim を利用すると文字入力が変になります。mozc, anthy であればアドレスバーに1文字だけ入力し Enter をタイプするとそのまま検索されちゃいます。チャットなどの文字入力欄では1文字だけ入力して Enter で確定すると、そのままポストされる状態です。

これが SKK になるともっとひどい動きになります。

対策

Gentoo では問題のなかったバージョンである Chromium 43 系の ebuild ファイルが portage ツリーから消えているのでパッチ適用でしのぎます。もちろん独自 Overlay で 43 系の ebuild ファイルを用意しても良いのですが、可能なら新しいのが使いたいってなもんです。

さて、問題は次の Issue で報告され Closed になってます。
Issue 1257003002: OnPreeditChanged should update the internal composition after checking it. (Closed)
これを参考にパッチを作ります。以下のようになりました。

diff -urPN a/chromium-44.0.2403.89/ui/base/ime/input_method_auralinux.cc b/chromium-44.0.2403.89/ui/base/ime/input_method_auralinux.cc
--- a/chromium-44.0.2403.89/ui/base/ime/input_method_auralinux.cc       2015-07-16 05:30:08.000000000 +0900
+++ b/chromium-44.0.2403.89/ui/base/ime/input_method_auralinux.cc       2015-07-28 06:59:15.478133281 +0900
@@ -236,8 +236,6 @@
   if (suppress_next_result_ || IsTextInputTypeNone())
     return;
 
-  composition_ = composition_text;
-
   if (is_sync_mode_) {
     if (!composition_.text.empty() || !composition_text.text.empty())
       composition_changed_ = true;
@@ -245,6 +243,8 @@
     SendFakeProcessKeyEvent(0);
     GetTextInputClient()->SetCompositionText(composition_text);
   }
+
+  composition_ = composition_text;
 }
 
 void InputMethodAuraLinux::OnPreeditEnd() {
diff -urPN a/chromium-44.0.2403.89/ui/base/ime/input_method_auralinux_unittest.cc b/chromium-44.0.2403.89/ui/base/ime/input_method_auralinux_unittest.cc
--- a/chromium-44.0.2403.89/ui/base/ime/input_method_auralinux_unittest.cc      2015-07-16 05:30:08.000000000 +0900
+++ b/chromium-44.0.2403.89/ui/base/ime/input_method_auralinux_unittest.cc      2015-07-28 07:09:14.228367499 +0900
@@ -606,6 +606,18 @@
   test_result_->ExpectAction("compositionstart");
   test_result_->ExpectAction("compositionupdate:a");
   test_result_->Verify();
+
+  // crbug.com/513124.
+  context_->SetSyncMode(true);
+  context_->SetEatKey(true);
+  context_->AddCommitAction("c");
+  context_->AddCompositionUpdateAction("");
+  input_method_auralinux_->DispatchKeyEvent(key);
+
+  test_result_->ExpectAction("keydown:229");
+  test_result_->ExpectAction("compositionend");
+  test_result_->ExpectAction("textinput:c");
+  test_result_->Verify();
 }
 
 TEST_F(InputMethodAuraLinuxTest, MixedAsyncAndSyncTest) {

これを /etc/portage/patches/www-client/chromium-44.0.2403.89/ に拡張子を .patch にして適当な名前で保存します。chromium の ebuild には epatch_user が記載されているので、これで emerge を実施すれば自動でパッチが適用されコンパイルされます。

ここで掲載したパッチの利用は自己責任でお願いします。急がない方はバックポートされるらしいので、それまで uim から他の物に乗り換えるなどした方が安全だと思います。

0 件のコメント:

コメントを投稿