Convert from Xlib to xcb
Asked Answered
E

1

6

I am currently porting one of my applications from Xlib to libxcb and I am having a bit trouble finding informations on the XInput2 extension I use at some point. Is there an XInput2 implementation in libxcb? If yes, where can I find the documentation.

Currently I am having trouble for example with this functions: XIQueryDevice, XISelectEvents. These are mainly the functions I use.

Maybe someone can point out the documentation for me or provide me a very small example to get started.

Edme answered 7/9, 2016 at 7:29 Comment(0)
S
5

You basically have 2 options:

Option 1

Call the regular XI* Xinput2 functions and poll them in your event loop with a generic event. A event loop would probably look like similar to this:

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;
    }
}

Also take a look at the XCB Protocol Extension API.

Option 2

You can use the xcb_input_* xcb-xinput extension functions. According to the official documentation:

When XCB added its API style to the mix, it followed the newer style and created a "libxcb"-prefixed library for each extension---libxcb-composite, libxcb-render, etc. Since XCB can generates the API code for an extension automatically from an XML description of the extension protocol, new extension API's are created by simply adding the extension description to the xcb-proto package and rebuilding.

Take a look at the xinput.h header.

Shipshape answered 7/9, 2016 at 8:14 Comment(1)
On a side note, last time I checked the XI2 extensions in xcb were pretty much unusable in the released versions. Perhaps this changed by now, though.Houlberg

© 2022 - 2024 — McMap. All rights reserved.