我需要在 X11 子窗口中处理事件(MouseDown、MouseUp、MouseMove、KeyDown、KeyUp)。这个子 X11 窗口的父级 - GtkWidget,所以我无法创建主循环......
我怎样才能做到这一点?
谢谢!
好吧,您需要某种事件泵,并且作为共享 X 显示连接上的子窗口意味着它与主事件循环相关联。从技术上讲,您可以使用自己的显示连接和事件循环启动第二个线程。不幸的是,Xlib 不是非常安全的线程,尤其是在这方面。你可以用 Xcb 做到这一点。
另一种方法是将孩子置于单独进程的监护之下并使用 XEmbed。
如果要从 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);