1

我正在 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 但是我只得到在这个创建的窗口中发生的事件。

4

1 回答 1

1

您不仅可以通过打开连接神奇地获得所有事件。任何客户端都会收到很少的消息,例如客户端消息,大多数其他消息只有在客户端显式注册以接收它们时才会发送给客户端。

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

但是,我会重新考虑是否

我的目标是获取系统上的所有事件。

不是AB问题。为什么你“需要”所有事件?你究竟想做什么?

于 2016-04-08T17:58:38.843 回答