2

X11 子ウィンドウでイベント (MouseDown、MouseUp、MouseMove、KeyDown、KeyUp) を処理する必要があります。この子 X11 ウィンドウの親 - GtkWidget であるため、メイン ループを作成できません...

これどうやってするの?

ありがとう!

4

3 に答える 3

1

XGrabPointerXGrabKeyboard

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);
于 2012-03-22T23:26:25.633 に答える
1

なんらかのイベント ポンプが必要であり、共有 X ディスプレイ接続の子ウィンドウであることは、メイン イベント ループにつながれていることを意味します。技術的には、独自のディスプレイ接続とイベント ループを使用して 2 番目のスレッドを開始できます。残念ながら、Xlib はあまりスレッド セーフではありません。特にその点に関してはそうです。Xcbでそれを行うことができます。

別のアプローチは、子供を別のプロセスの管理下に置き、XEmbed を使用することです。

于 2012-03-27T21:06:47.827 に答える
0

XSelectInput ?

于 2012-03-22T23:21:48.320 に答える