LINUX.ORG.RU

примерно так:

#include <X11/Xlib.h>
#include <X11/XKBlib.h>
static int get_group(Display *dpy) {
	XkbStateRec state[1];
	memset(state, 0, sizeof(state));
	XkbGetState(dpy, XkbUseCoreKbd, state);
	return state->group;
}

static int get_layout(Display *dpy, char **names) {
	XkbDescRec desc[1];
	int gc;
	memset(desc, 0, sizeof(desc));
	desc->device_spec = XkbUseCoreKbd;
	XkbGetControls(dpy, XkbGroupsWrapMask, desc);
	XkbGetNames(dpy, XkbGroupNamesMask, desc);
	XGetAtomNames(dpy, desc->names->groups, gc = desc->ctrls->num_groups, names);
	XkbFreeControls(desc, XkbGroupsWrapMask, True);
	XkbFreeNames(desc, XkbGroupNamesMask, True);
	return gc;
}

static void free_layout(char **names, int gc) {
	for (; gc--; ++names)
		if (*names) {
			XFree(*names);
			*names = NULL;
		}
}
	// ...
	char *names[XkbNumKbdGroups];
	int gc = get_layout(display, names);
	int g = get_group(display);
	for (int i = 0; i < gc)
		printf("%d) %c %s\n", i, i == g ? '*' : ' ', names[i]);
	free_layout(names, gc);
	// ...
arsi ★★★★★ ()
Ответ на: комментарий от anonymous

из XOpenDisplay(), QX11Info::display()… а зачем вам?

arsi ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.