X11の子ウィンドウでイベント(MouseDown、MouseUp、MouseMove、KeyDown、KeyUp)を処理する必要があります。この子の親X11ウィンドウ - GtkWidget、メインループを作成できません...X11の子ウィンドウでイベントを取得する方法は?
どうすればいいですか?
ありがとうございます!
X11の子ウィンドウでイベント(MouseDown、MouseUp、MouseMove、KeyDown、KeyUp)を処理する必要があります。この子の親X11ウィンドウ - GtkWidget、メインループを作成できません...X11の子ウィンドウでイベントを取得する方法は?
どうすればいいですか?
ありがとうございます!
あなたは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でそれを行うことができます。
もう1つのアプローチは、別のプロセスを管理してXEmbedを使用することです。
x11メインループなしの例が見つかりません...これらの関数は関数へのポインタを取っていません... – Alexander
g_signal_connectを見ましたか? – perreal
いいえ、GtkWidgetは親ウィンドウですが、私のx11ウィンドウはこの親の子です... – Alexander