2

我需要在 X11 子窗口中处理事件(MouseDown、MouseUp、MouseMove、KeyDown、KeyUp)。这个子 X11 窗口的父级 - GtkWidget,所以我无法创建主循环......

我怎样才能做到这一点?

谢谢!

4

3 回答 3

1

好吧,您需要某种事件泵,并且作为共享 X 显示连接上的子窗口意味着它与主事件循环相关联。从技术上讲,您可以使用自己的显示连接和事件循环启动第二个线程。不幸的是,Xlib 不是非常安全的线程,尤其是在这方面。你可以用 Xcb 做到这一点。

另一种方法是将孩子置于单独进程的监护之下并使用 XEmbed。

于 2012-03-27T21:06:47.827 回答
1

XGrabPointer , XGrab键盘

如果要从 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 回答
0

X选择输入

于 2012-03-22T23:21:48.320 回答