状況は次のとおりです。
1)AとBの2つのトップレベルウィンドウがあります
2)AはBの前にあります
ウィンドウAをBの前に置いたまま、キーボードフォーカスをウィンドウBに送信するにはどうすればよいですか?
両方のウィンドウを制御すると仮定していますが、これは Linux のような X11 システム上にあります。そうでない場合は、はるかに困難です。私はこのようなことを 1 つのアプリ内で行いましたが、ここにいくつかの思い出があります。
おそらく、 gtk_widget_grab_focus()だけを使用してそれを行うことはできないことを理解したでしょう。これは、ウィンドウ自体にフォーカスがある場合に、ウィンドウ内のどのウィジェットにフォーカスがあるかを判断する場合にのみ機能します。
ウィンドウ階層、ウィンドウマネージャーからの情報などに基づいて、どのウィンドウがキーボードイベントを取得するかを決定するのはX11です。ただし、GDKを介してそれを操作して、必要な結果を得ることができます。
GDK イベントの伝播について学び、おそらく GDK ソースのいくつかを読む必要があります。しかし、一般的には、次のことを行う必要があると思います。
ウィンドウが別のアプリに属している場合は、gdk_event_send_client_message() を見ることができますが、私は使用したことがありません。
直接的でなくても構わない場合は、トップ レベル ウィンドウからその背後にあるウィンドウにキーボード イベントを送信できます。もちろん、バックグラウンドでホバリングして別のプログラムで使用されているキーボード入力を読み取るプログラムを作成するのではなく、両方のウィンドウが作成されていることを前提としています。