ShowCaretとSetCaretPos関数の呼び出し順序変更依頼。

  1. こんにちは。日本語に慣れていないため翻訳ツールに頼りました。

    LinuxでWine経由でMeryを使用しています。

    Wineのデバッグメッセージを通じて、Meryでカーソルが移動するときの関数呼び出し順序を見ると、以下の順序で呼び出されていることがわかります。

    DestroyCaret
    CreateCaret
    ShowCaret
    SetCaretPos

    ここで、ShowCaretとSetCaretPosの順序を入れ替えることはできないでしょうか?

    WineではShowCaretとSetCaretPosを通じてIME候補ウィンドウの位置を指定する非標準機能があります。しかし、CreateCaret後のShowCaretは内部的に位置値が(0,0)であるため、続くSetCaretPosと衝突し、IME候補ウィンドウのちらつきや位置ジャンプなどの現象を引き起こします。

    Wineでは簡単にパッチを当てられますが、Wineアップストリームで受け入れられるようにするのは困難です。IME候補ウィンドウに関する他のパッチをアップストリームしようとしているのですが、このパッチが曖昧なため遅延しています。

    私の考えでは、ShowCaretとSetCaretPosの順序を交換しても動作に問題はないと思いますが、いかがでしょうか?

    優れたプログラムを公開していただき感謝しております。良い結果が得られることを願っております。

     |  bsjeon  |  返信
  2. ご愛用いただきありがとうございます。

    そして、Wine での詳しい検証とご提案もありがとうございます。

    まず最初にお伝えしておきたいのですが、Wine での動作はサポート対象外とさせていただいています。

    とはいえ、Wine 上の不具合でも、Windows 環境でも起こりうる問題については、こちらでもできる限り対応を検討しています。

    一方で、Wine 特有の挙動に合わせたカスタマイズは行わない方針です。どうかご理解ください。

    > ここで、ShowCaretとSetCaretPosの順序を入れ替えることはできないでしょうか?

    ご指摘のとおり、現在の Mery ではその順序で呼び出していました。

    Microsoft のドキュメントを確認したところ、CreateCaretSetCaretPosShowCaret の順で呼び出す例が示されていました。

    Windows でもその方が正しいようですので、この部分の修正は対応できそうです。

    そのうえで、私のほうでも Linux Mint + Wine の環境を用意して試してみました。

    ただ、「SetCaretPos を通じて IME 候補ウィンドウの位置を指定する非標準機能」という部分が、どういう仕組みを指しているのかが分かりませんでした。

    こちらの環境では、IME の候補ウィンドウはちらつきや位置のジャンプはなく、画面の左上あたりに固定表示されている状態です。

    また、HKEY_CURRENT_USER\Software\Wine\X11 DriverInputStyle を作成して overthespot に設定する方法も試してみたのですが、効果は確認できませんでした。

    もしよければ、その「非標準機能」を有効にする具体的な方法や、参考になるサイトなどがありましたら教えていただけないでしょうか。

    こちらでももう少し詳しく調べてみたいと思います。

     |  Kuro  |  返信
スポンサーリンク