xcb_xkb_get_device_info(3)

πŸ“¦
version 1.17.0 Β· 4 versions
, in alpine 3.22, alpine 3.23, alpine 3.24, arch rolling, centos-stream 10, debian trixie, fedora 43, fedora 44, nixpkgs unstable, opensuse-leap 16.0, ubuntu questing, ubuntu resolute, ubuntu stonking

πŸ’– xcb_xkb_get_device_info(3) β€” the XCB Requests glow-up πŸ’–

okay bestie, gather round, because today we're meeting xcb_xkb_get_device_info, one of the XCB request girlies from the XKB chapter of libxcb. it lives in section 3 of the manual (the library-function section, iykyk), and it's giving "ask the X server about a keyboard device" main character energy. let's get into it πŸŽ€


✨ SYNOPSIS ✨

first thing you do, always: pull in the header. she's not optional.

#include <xcb/xkb.h>

πŸ¦‹ Request function

here's the actual call, hand it your connection and a whole lil lineup of args:

xcb_xkb_get_device_info_cookie_t
xcb_xkb_get_device_info(xcb_connection_t *conn,
                        xcb_xkb_device_spec_t deviceSpec, uint16_t wanted,
                        uint8_t allButtons, uint8_t firstButton, uint8_t nButtons,
                        xcb_xkb_led_class_spec_t ledClass, xcb_xkb_id_spec_t ledID);

🌸 Reply datastructure

this is the struct you get back, field for field, no edits, no notes:

typedef struct xcb_xkb_get_device_info_reply_t {
    uint8_t    response_type;
    uint8_t    deviceID;
    uint16_t   sequence;
    uint32_t   length;
    uint16_t   present;
    uint16_t   supported;
    uint16_t   unsupported;
    uint16_t   nDeviceLedFBs;
    uint8_t    firstBtnWanted;
    uint8_t    nBtnsWanted;
    uint8_t    firstBtnRtrn;
    uint8_t    nBtnsRtrn;
    uint8_t    totalBtns;
    uint8_t    hasOwnState;
    uint16_t   dfltKbdFB;
    uint16_t   dfltLedFB;
    uint8_t    pad0[2];
    xcb_atom_t devType;
    uint16_t   nameLen;
} xcb_xkb_get_device_info_reply_t;

πŸ’… Reply function

this is how you actually collect the reply for that cookie. errors? you handle them here, through e:

xcb_xkb_get_device_info_reply_t
*xcb_xkb_get_device_info_reply(xcb_connection_t *conn,
                               xcb_xkb_get_device_info_cookie_t cookie,
                               xcb_generic_error_t **e);

🧚 Reply accessors

the little helper squad that digs into the reply for you. copying these exactly, character for character, because that's the law:

xcb_xkb_string8_t *xcb_xkb_get_device_info_name(const
       xcb_xkb_get_device_info_request_t *reply);

int xcb_xkb_get_device_info_name_length(const
       xcb_xkb_get_device_info_reply_t *reply);

xcb_generic_iterator_t xcb_xkb_get_device_info_name_end(const
       xcb_xkb_get_device_info_reply_t *reply); uint8_t
       *xcb_xkb_get_device_info_pad_1 (const
       xcb_xkb_get_device_info_request_t *reply)

xcb_xkb_action_t *xcb_xkb_get_device_info_btn_actions(const
       xcb_xkb_get_device_info_request_t *reply);

int xcb_xkb_get_device_info_btn_actions_length(const
       xcb_xkb_get_device_info_reply_t *reply);

xcb_xkb_action_iterator_t
       xcb_xkb_get_device_info_btn_actions_iterator(const
       xcb_xkb_get_device_info_reply_t *reply);

int xcb_xkb_get_device_info_leds_length(const
       xcb_xkb_get_device_info_reply_t *reply);

xcb_xkb_device_led_info_iterator_t
       xcb_xkb_get_device_info_leds_iterator(const
       xcb_xkb_get_device_info_reply_t *reply);
not me noticing name_end and pad_1 are just chilling on the same line in the source. iconic formatting, no notes. πŸ’€

🫢 REQUEST ARGUMENTS

everything you gotta feed the request function:

  • conn β€” the XCB connection to X11. your link to the server, bestie, without her you're just yelling into the void.
  • deviceSpec β€” TODO: NOT YET DOCUMENTED. yeah, the docs girlies left this one blank πŸ™ˆ
  • wanted β€” TODO: NOT YET DOCUMENTED.
  • allButtons β€” TODO: NOT YET DOCUMENTED.
  • firstButton β€” TODO: NOT YET DOCUMENTED.
  • nButtons β€” TODO: NOT YET DOCUMENTED.
  • ledClass β€” TODO: NOT YET DOCUMENTED.
  • ledID β€” TODO: NOT YET DOCUMENTED.

πŸ’œ REPLY FIELDS

what every field in that reply struct actually means (or doesn't, in some cases, and I'm being so fr about that):

  • response_type β€” the type of this reply, in this case XCB_XKB_GET_DEVICE_INFO. this field is also present in the xcb_generic_reply_t and can be used to tell replies apart from each other. she's the name tag at the party ✨
  • sequence β€” the sequence number of the last request processed by the X11 server.
  • length β€” the length of the reply, in words (a word is 4 bytes). yes, 4 bytes, don't come for me.
  • deviceID β€” TODO: NOT YET DOCUMENTED.
  • present β€” TODO: NOT YET DOCUMENTED.
  • supported β€” TODO: NOT YET DOCUMENTED.
  • unsupported β€” TODO: NOT YET DOCUMENTED.
  • nDeviceLedFBs β€” TODO: NOT YET DOCUMENTED.
  • firstBtnWanted β€” TODO: NOT YET DOCUMENTED.
  • nBtnsWanted β€” TODO: NOT YET DOCUMENTED.
  • firstBtnRtrn β€” TODO: NOT YET DOCUMENTED.
  • nBtnsRtrn β€” TODO: NOT YET DOCUMENTED.
  • totalBtns β€” TODO: NOT YET DOCUMENTED.
  • hasOwnState β€” TODO: NOT YET DOCUMENTED.
  • dfltKbdFB β€” TODO: NOT YET DOCUMENTED.
  • dfltLedFB β€” TODO: NOT YET DOCUMENTED.
  • devType β€” TODO: NOT YET DOCUMENTED.
  • nameLen β€” TODO: NOT YET DOCUMENTED.

🌈 DESCRIPTION

okay so... this section is genuinely empty in the source. nothing. blank. the void stared back. not me being handed an empty <section> and told to make it cute 😭 moving on, periodt.


⭐ RETURN VALUE

  • she hands you back an xcb_xkb_get_device_info_cookie_t. that's the vibe.
  • errors have to be handled when calling the reply function xcb_xkb_get_device_info_reply.
  • if you'd rather handle errors in the event loop instead, use xcb_xkb_get_device_info_unchecked. see xcb-requests(3) for details. iykyk.

πŸ‘‘ ERRORS

this request does never generate any errors. like, none. zero. a clean girl. slay πŸ’…


πŸ”₯ SEE ALSO

this section is empty in the source too. no cross-references, no friends, just vibes πŸ¦‹


πŸ’– AUTHOR

generated from xkb.xml. contact xcb@lists.freedesktop.org for corrections and improvements.


okay bestie, that's the whole page, every last field and TODO preserved with love 🫢 this page shipped as part of X Version 11 / libxcb 1.17.0, and yes, that's the source and version tag you'd find in the footer of the original β€” consider this your cute sign-off. go forth and get that device info, you absolute icon πŸŽ€βœ¨πŸ’œ