2012-03-22 14 views

答えて

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); 
+0

x11メインループなしの例が見つかりません...これらの関数は関数へのポインタを取っていません... – Alexander

+0

g_signal_connectを見ましたか? – perreal

+0

いいえ、GtkWidgetは親ウィンドウですが、私のx11ウィンドウはこの親の子です... – Alexander

1

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

もう1つのアプローチは、別のプロセスを管理してXEmbedを使用することです。

+0

ありがとう!たぶん、第2の方法(Xcb)が役に立つかもしれません。 – Alexander

+0

メインループなしでXcbイベントを使用するには? – Alexander

+0

@アレクサンダー:イベントループが必要です。だから、私は追加のスレッドと別個のディスプレイ接続を使うことを提案したのです。それはループなしではできません。あるいは、おそらく最も信頼できる方法であるXEmbedを使用します。 – datenwolf

関連する問題