XCB事件循环没有得到任何事件

时间:2016-03-17 21:07:06

标签: x11 xcb

我在Firefox中制作插件,因此我有一个ChromeWorker - 这是一个特权WebWorker。这只是主线程之外的一个线程。

在这里我没有代码但是这个(修改后看起来不像js-ctypes [这是插件的语言])

在启动时我运行此代码,conn是一个全局变量:

conn = xcb_connect(null, null);

然后我以200ms的间隔运行它:

evt = xcb_poll_for_event(conn);
console.log('evt:', evt);

if (!evt.isNull()) {
    console.log('good got an event!!');
    ostypes.API('free')(evt);
}

但是evt总是null,我永远不会收到任何事件。我的目标是在系统上获取所有事件。

任何人都知道什么会导致一些如此简单的工作?

我试过了

xcb_change_window_attributes (conn, screens.data->root, XCB_CW_EVENT_MASK, values);

但这并没有解决它:(

我可以让它工作的唯一方法是执行xcb_create_window xcb_map_window但是我只获得在此创建窗口中发生的事件。

1 个答案:

答案 0 :(得分:1)

您不必通过打开连接神奇地获取所有事件。只有非常少的任何客户端将收到的消息,例如客户端消息,大多数其他消息只有在明确注册接收它们时才会发送给客户端。

是的,这意味着你必须在每个窗口上注册它们,这包括爬行树和监听正在创建,映射,取消映射和销毁的窗口,以及在它们上注册。

但是,我会重新考虑是否

  

我的目标是让所有活动都在系统上。

不是A-B问题。 为什么你"需要"所有活动?你真的想做什么?