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

XCB event loop not getting any events

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

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

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

conn = xcb_connect(null, null);

然后我 运行 以 200 毫秒为间隔:

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 但是我只得到在这个创建的 window.

中发生的事件

您不只是通过打开连接神奇地获得所有事件。只有很少的消息任何客户端会收到,例如客户端消息,大多数其他消息只会发送给客户端,如果它明确注册自己接收它们。

是的,这意味着你必须在每个 window 上注册它们,这涉及爬树和监听 windows 正在创建、映射、取消映射和销毁以及注册他们也是。

不过,我会重新考虑是否

My goal is to get all events on the system.

不是 A-B 问题。 为什么你"need"所有活动?你到底想做什么?