从Xlib转换至xcb

7
我目前正在将我的一个应用程序从Xlib移植到libxcb,但是我在寻找有关我在某些时候使用的XInput2扩展的信息时遇到了一些问题。libxcb中是否有XInput2实现?如果有,我在哪里可以找到文档。
目前,我遇到了一些问题,例如这些函数:XIQueryDeviceXISelectEvents。这些是我主要使用的函数。
也许有人可以为我指出文档或者提供一个非常简单的示例来入门。
1个回答

5

您有两个基本选择:

选项1

使用常规的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协议扩展API

选项2

您可以使用xcb_input_* xcb-xinput扩展函数。 根据官方文档

当XCB将其API风格添加到混合中时,它遵循了较新的风格,并为每个扩展创建了一个“libxcb”前缀库——libxcb-composite、libxcb-render等。由于XCB可以从描述扩展协议的XML描述自动生成扩展API代码,因此只需将扩展描述添加到xcb-proto包并重新构建即可创建新的扩展API。

查看xinput.h标头


2
顺便说一下,上次我检查xcb中的XI2扩展在发布版本中几乎无法使用。也许现在已经改变了。 - Ingo Bürk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接