如何在X11子窗口中获取事件?

我需要在X11子窗口中处理事件(MouseDown,MouseUp,MouseMove,KeyDown,KeyUp)。 这个孩子的X11窗口的父 – GtkWidget,所以我不能创build主循环…

我怎样才能做到这一点?

谢谢!

XGrabPointer , XGrabKeyboard

如果要从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显示器连接手段上的子窗口,这是连接到主事件循环。 从技术上讲,你可以用自己的显示连接和事件循环启动第二个线程。 不幸的是Xlib并不是非常安全的,特别是在这方面。 你可以用Xcb做。

另一种方法是把孩子置于一个单独的过程中,并使用XEmbed。

XSelectInput ?