【发布时间】:2017-01-14 18:46:29
【问题描述】:
我目前正在将我的一个应用程序从 Xlib 移植到 libxcb,但在查找有关我在某些时候使用的 XInput2 扩展的信息时遇到了一些麻烦。 libxcb 中是否有 XInput2 实现?如果是,我在哪里可以找到文档。
目前我在使用以下功能时遇到问题:XIQueryDevice、XISelectEvents。这些主要是我使用的功能。
也许有人可以为我指出文档或提供一个非常小的示例来开始。
【问题讨论】:
我目前正在将我的一个应用程序从 Xlib 移植到 libxcb,但在查找有关我在某些时候使用的 XInput2 扩展的信息时遇到了一些麻烦。 libxcb 中是否有 XInput2 实现?如果是,我在哪里可以找到文档。
目前我在使用以下功能时遇到问题:XIQueryDevice、XISelectEvents。这些主要是我使用的功能。
也许有人可以为我指出文档或提供一个非常小的示例来开始。
【问题讨论】:
你基本上有两个选择:
调用常规的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;
}
}
还可以看看XCB Protocol Extension API。
您可以使用xcb_input_* xcb-xinput 扩展功能。根据official documentation:
当 XCB 将其 API 样式添加到组合中时,它遵循更新的样式并为每个扩展创建了一个以“libxcb”为前缀的库——libxcb-composite、libxcb-render 等。由于 XCB 可以生成 API 代码对于从扩展协议的 XML 描述自动生成的扩展,只需将扩展描述添加到 xcb-proto 包并重建即可创建新的扩展 API。
【讨论】: