X11 子ウィンドウでイベント (MouseDown、MouseUp、MouseMove、KeyDown、KeyUp) を処理する必要があります。この子 X11 ウィンドウの親 - GtkWidget であるため、メイン ループを作成できません...
これどうやってするの?
ありがとう!
gtk ウィジェットからイベントを取得したい場合は、g_signal_connect () を使用できます。
g_signal_connect(G_OBJECT(mChild), "button_press_event",
G_CALLBACK(BPHandler), NULL);
g_signal_connect(G_OBJECT(mChild), "key_press_event",
G_CALLBACK(KPHandler), NULL);
なんらかのイベント ポンプが必要であり、共有 X ディスプレイ接続の子ウィンドウであることは、メイン イベント ループにつながれていることを意味します。技術的には、独自のディスプレイ接続とイベント ループを使用して 2 番目のスレッドを開始できます。残念ながら、Xlib はあまりスレッド セーフではありません。特にその点に関してはそうです。Xcbでそれを行うことができます。
別のアプローチは、子供を別のプロセスの管理下に置き、XEmbed を使用することです。