你基本上有两个选择:
调用常规XI*Xinput2 函数并使用通用事件在事件循环中轮询它们。事件循环可能类似于以下内容:
xcb_generic_event_t *event;
while ((event = xcb_wait_for_event(connection))) {
xcb_ge_generic_event_t *generic_event = (xcb_ge_generic_event_t*)event;
if (generic_event->response_type == XCB_GE_GENERIC && generic_event->extension == xinput_ext_opcode && generic_event->event_type == XI_RawMotion) {
// Handle motion
continue;
}
}
Run Code Online (Sandbox Code Playgroud)
另请查看XCB 协议扩展 API。
您可以使用xcb_input_*xcb-xinput 扩展函数。根据官方文档:
当 XCB 将其 API 风格添加到混合中时,它遵循较新的风格并为每个扩展创建了一个以“libxcb”为前缀的库——libxcb-composite、libxcb-render 等。由于 XCB 可以为扩展生成 API 代码自动从扩展协议的 XML 描述中创建新的扩展 API,只需将扩展描述添加到 xcb-proto 包并重建即可。
看一下xinput.h标题。