useImeInput
IME(Input Method Editor)を経由したテキスト入力を壁紙で受け取るためのフックです。日本語・中国語・韓国語など、変換が必要な言語の入力を壁紙のメモ帳・検索ボックス・チャット入力等に流し込めます。
useKeyboard がデスクトップ全体の生キーを購読するのに対し、useImeInput は 壁紙自身に向けて入力された 文字のみを受信します。内部的には壁紙ごとに極小(1×1 px・透明・非アクティベート)のプロキシウィンドウが用意され、activate() を呼ぶとそのプロキシだけが key window 化され、IME がそこに合成テキストを配送します。壁紙ウィンドウ自体は決して key window にならないため、壁紙らしさ(最背面・フォーカスを取らない)が損なわれません。
permissions 宣言が必須
このフックを使うには fluxlay.yaml で ime-input permission を宣言する必要があります。未宣言の場合、backend が IME 関連のリクエストを HTTP 403 で拒否します。フック自体は同じ API でマウントされますが、ストリームは流れず、activate() / deactivate() も SDK が受理するだけで効果がありません。
permissions 全体の意味は manifest を参照してください。keyboard と ime-input は権限スコープが異なる別枠です(keyboard はグローバル全打鍵、ime-input は壁紙自身に向けられた入力のみ)。
インポート
シグネチャ
使い方
API
activate には React の MouseEvent などを直接渡さないでください。受け付けるのは HTMLElement か { x, y, height } のみです。onClick から呼ぶ場合は onClick={ime.activate} ではなく onClick={() => ime.activate(ref.current ?? undefined)} のようにラップしてください。
useKeyboard との関係
activate() 状態の間は当該壁紙への useKeyboard 配信が一時停止されます。これは IME 候補ウィンドウの操作(矢印キー、Enter、Esc)が壁紙ロジックに重複配信されるのを防ぐためです。deactivate() で通常通り再開します。
プラットフォーム要件
- macOS: アプリ全体の activation を引き起こさない
NSPanel(.nonactivatingPanel)でプロキシを生成するため、Dock のハイライトやメニューバーは切り替わりません。 - Windows:
WS_EX_NOACTIVATEの不可視 HWND でプロキシを生成し、taskbar の点滅を起こさずにフォーカスを取り直します。
制限事項
- 確定後の文字列のみ最終的に壁紙に渡るため、変換中の文字列を別途装飾する場合は
compositionを直接描画してください。 activateに渡す座標は viewport 相対 CSS ピクセルです。壁紙ウィンドウのスクリーン位置は backend 側で解決するため、window.screenX/window.screenYを加算しないでください。custom-scheme で動作する壁紙では WebKit のscreenX/screenYの値が信頼できません。