【问题标题】:Convert from Xlib to xcb从 Xlib 转换为 xcb
【发布时间】:2017-01-14 18:46:29
【问题描述】:

我目前正在将我的一个应用程序从 Xlib 移植到 libxcb,但在查找有关我在某些时候使用的 XInput2 扩展的信息时遇到了一些麻烦。 libxcb 中是否有 XInput2 实现?如果是,我在哪里可以找到文档。

目前我在使用以下功能时遇到问题:XIQueryDeviceXISelectEvents。这些主要是我使用的功能。

也许有人可以为我指出文档或提供一个非常小的示例来开始。

【问题讨论】:

    标签: c linux x11 xlib xcb


    【解决方案1】:

    你基本上有两个选择:

    选项 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 Protocol Extension API

    选项 2

    您可以使用xcb_input_* xcb-xinput 扩展功能。根据official documentation

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

    看看xinput.h header

    【讨论】:

    • 附带说明,上次我检查 xcb 中的 XI2 扩展在已发布版本中几乎无法使用。不过,也许现在情况已经改变了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 2015-09-21
    • 1970-01-01
    相关资源
    最近更新 更多