首页 文章

从Xlib转换为xcb

提问于
浏览
3

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

目前我遇到了这个函数的问题: XIQueryDeviceXISelectEvents . 这些主要是我使用的功能 .

也许有人可以为我指出文档,或者为我提供一个很小的例子来开始 .

1 回答

  • 3

    你基本上有两个选择:

    选项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 .

相关问题