XkbFreeDeviceInfo(3)

πŸ’– NAME πŸ’–

okay so this is XkbFreeDeviceInfo(3) from the XKB FUNCTIONS manual, bestie ✨

XkbFreeDeviceInfo β€” Free an XkbDeviceInfoRec structure 🫢


🌈 SYNOPSIS 🌈

void XkbFreeDeviceInfo (XkbDeviceInfoPtr device_info, unsigned int
       which, Bool free_all);

πŸ’… ARGUMENTS πŸ’…

  • device_info β€” pointer to XkbDeviceInfoRec in which to free items
  • which β€” mask of components of device_info to free
  • free_all β€” True => free everything, including device_info

πŸŽ€ DESCRIPTION πŸŽ€

okay so here's the tea β˜•: if free_all is True, XkbFreeDeviceInfo frees all components of device_info and the XkbDeviceInfoRec structure pointed to by device_info itself. like, everything goes πŸ’…

If free_all is False, the value of which determines which subcomponents are freed. which is an inclusive OR of one or more of the values from Table 1. 🫢

  • If which contains XkbXI_ButtonActionsMask, all button actions associated with device_info are freed, device_info->btn_acts is set to NULL, and device_info->num_btns is set to zero.
  • If which contains all bits in XkbXI_IndicatorsMask, all XkbDeviceLedInfoRec structures associated with device_info are freed, device_info->leds is set to NULL, and device_info->sz_leds and device_info->num_leds are set to zero.
  • If which contains XkbXI_IndicatorMapsMask, all indicator maps associated with device_info are cleared, but the number of LEDs and the leds structures themselves is preserved.
  • If which contains XkbXI_IndicatorNamesMask, all indicator names associated with device_info are cleared, but the number of LEDs and the leds structures themselves is preserved.
  • If which contains XkbXI_IndicatorStateMask, the indicator state associated with the device_info leds are set to zeros but the number of LEDs and the leds structures themselves is preserved.

πŸ“‹ Table 1 XkbDeviceInfoRec Mask Bits

the columns in the original table are Name, XkbDeviceInfoRec Fields Effected, Value, and Capability If Set β€” and every single row is right here, no cap πŸ‘‘

  • XkbXI_KeyboardsMask β€” fields effected: (blank in Table 1); value: (1L <<0); capability if set: Clients can use all Xkb requests and events with KeyClass devices supported by the input device extension.
  • XkbXI_ButtonActionsMask β€” fields effected: num_btns, btn_acts; value: (1L <<1); capability if set: Clients can assign key actions to buttons non-KeyClass input extension devices.
  • XkbXI_IndicatorNamesMask β€” fields effected: leds->names; value: (1L <<2); capability if set: Clients can assign names to indicators on non-KeyClass input extension devices.
  • XkbXI_IndicatorMapsMask β€” fields effected: leds->maps; value: (1L <<3); capability if set: Clients can assign indicator maps to indicators on non-KeyClass input extension devices.
  • XkbXI_IndicatorStateMask β€” fields effected: leds->state; value: (1L <<4); capability if set: Clients can request the status of indicators on non-KeyClass input extension devices.
  • XkbXI_IndicatorsMask β€” fields effected: sz_leds, num_leds, leds->*; value: (0x1c); capability if set: XkbXI_IndicatorNamesMask | XkbXI_IndicatorMapsMask | XkbXI_IndicatorStateMask
  • XkbXI_UnsupportedFeaturesMask β€” fields effected: unsupported; value: (1L <<15); capability if set: (none shown in Table 1)
  • XkbXI_AllDeviceFeaturesMask β€” fields effected: Those selected by Value Column masks; value: (0x1e); capability if set: XkbXI_IndicatorsMask | XkbSI_ButtonActionsMask
  • XkbXI_AllFeaturesMask β€” fields effected: Those selected by Value Column masks; value: (0x1f); capability if set: XkbSI_AllDeviceFeaturesMask | XkbSI_KeyboardsMask
  • XkbXI_AllDetailsMask β€” fields effected: Those selected by Value column masks; value: (0x801f); capability if set: XkbXI_AllFeaturesMask | XkbXI_UnsupportedFeaturesMask
lowkey important: the XkbSI_... bits in those last rows are exactly what the table says πŸ‘€ no autocorrect from me, bestie.

πŸ¦‹ STRUCTURES πŸ¦‹

Information about X Input Extension devices is transferred between a client program and the Xkb extension in an XkbDeviceInfoRec structure:

typedef struct {
    char *               name;          /* name for device */
    Atom                 type;          /* name for class of devices */
    unsigned short       device_spec;   /* device of interest */
    Bool                 has_own_state; /* True=>this device has its own state */
    unsigned short       supported;     /* bits indicating supported capabilities */
    unsigned short       unsupported;   /* bits indicating unsupported capabilities */
    unsigned short       num_btns;      /* number of entries in btn_acts */
    XkbAction *          btn_acts;      /* button actions */
    unsigned short       sz_leds;       /* total number of entries in LEDs vector */
    unsigned short       num_leds;      /* number of valid entries in LEDs vector */
    unsigned short       dflt_kbd_fb;   /* input extension ID of default (core kbd) indicator */
    unsigned short       dflt_led_fb;   /* input extension ID of default indicator feedback */
    XkbDeviceLedInfoPtr  leds;          /* LED descriptions */
} XkbDeviceInfoRec, *XkbDeviceInfoPtr;

typedef struct {
    unsigned short      led_class;        /* class for this LED device*/
    unsigned short      led_id;           /* ID for this LED device */
    unsigned int        phys_indicators;  /* bits for which LEDs physically present */
    unsigned int        maps_present;     /* bits for which LEDs have maps in maps */
    unsigned int        names_present;    /* bits for which LEDs are in names */
    unsigned int        state;            /* 1 bit => corresponding LED is on */
    Atom                names[XkbNumIndicators];   /* names for LEDs */
    XkbIndicatorMapRec  maps;             /* indicator maps for each LED */
} XkbDeviceLedInfoRec, *XkbDeviceLedInfoPtr;

mwah πŸ’‹ β€” signed off with X Version 11, libX11 1.8.14, and this very XkbFreeDeviceInfo(3) page. that's the footer, bestie, and we're done 🫢✨

πŸ“¦ where this page comes from