我需要在X11子窗口中处理事件(MouseDown,MouseUp,MouseMove,KeyDown,KeyUp)。这个孩子X11窗口的父级 - GtkWidget,所以我无法创建主循环...
我该怎么做?
谢谢!
答案 0 :(得分:1)
如果您想从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);
答案 1 :(得分:1)
嗯,你需要某种事件泵,并且作为共享X显示连接上的子窗口意味着,它被束缚到主事件循环。从技术上讲,您可以使用自己的显示连接和事件循环启动第二个线程。不幸的是,Xlib不是非常安全,特别是在这方面。你可以用Xcb做到这一点。
另一种方法是将孩子置于一个单独的过程中并使用XEmbed。
答案 2 :(得分:0)