我在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
但是我只获得在此创建窗口中发生的事件。
答案 0 :(得分:1)
您不必通过打开连接神奇地获取所有事件。只有非常少的任何客户端将收到的消息,例如客户端消息,大多数其他消息只有在明确注册接收它们时才会发送给客户端。
是的,这意味着你必须在每个窗口上注册它们,这包括爬行树和监听正在创建,映射,取消映射和销毁的窗口,以及在它们上注册。
但是,我会重新考虑是否
我的目标是让所有活动都在系统上。
不是A-B问题。 为什么你"需要"所有活动?你真的想做什么?