void readKbState()

in src/keyboard_x.cc [293:310]


void readKbState(Display *display, KbState *dst) {
  // See https://www.x.org/releases/X11R7.6/doc/libX11/specs/XKB/xkblib.html#determining_keyboard_state
  // Get effective group index
  XkbStateRec xkbState;
  XkbGetState(display, XkbUseCoreKbd, &xkbState);
  dst->effective_group_index = xkbState.group;

  XkbRF_VarDefsRec vdr;
  char *tmp = NULL;
  int res = XkbRF_GetNamesProp(display, &tmp, &vdr);
  if (res) {
    dst->layout = (vdr.layout ? vdr.layout : "");
    dst->variant = (vdr.variant ? vdr.variant : "");
  } else {
    dst->layout = "";
    dst->variant = "";
  }
}