Какое событие вызывается при переключении разметки kb в X.org

Я новичок в программировании X.org. Я хочу создать небольшое приложение, которое реагирует на переключение раскладки клавиатуры X. Я искал, но не нашел, какое событие вызывается при переключении раскладки kb. Пожалуйста, укажите мне правильное событие. Спасибо

9

Решение

Там есть XkbStateNotify тип события, которое является частью X расширение клавиатуры. Вы можете взять язык макета из него следующим образом:

void x11Events(XEvent* evt)
{
if(evt->type == xkbEventType) {
XkbEvent* xkbevt = (XkbEvent*)evt;
if (xkbevt->any.xkb_type == XkbStateNotify) {
int lang = xkbevt->state.group;
// Some code using lang here.
}
}
}

Получить xkbEventTypeпозвоните XkbQueryExtension() функция (объявлена ​​в XKBlib.h).

Тем не мение, XkbStateNotify увольняется не только при смене макета. Это из спецификации, указанной выше:

Изменения, о которых сообщают, включают изменения к любому аспекту клавиатуры
состояние: когда модификатор установлен или не установлен, когда текущая группа
изменяется, или когда кнопка указателя нажата или отпущена.

Из-за этого вам придется сохранить значение lang где-то, а затем, когда приходит новое событие, сравните новое значение lang к ранее сохраненному.

NB. Там также XkbMapNotifyEvent событие, которое уведомляет не о смене раскладки как таковой, а об изменении раскладки клавиатуры. Возможно, вы тоже захотите посмотреть на это.

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]