Я новичок в программировании X.org. Я хочу создать небольшое приложение, которое реагирует на переключение раскладки клавиатуры X. Я искал, но не нашел, какое событие вызывается при переключении раскладки kb. Пожалуйста, укажите мне правильное событие. Спасибо
Там есть 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
событие, которое уведомляет не о смене раскладки как таковой, а об изменении раскладки клавиатуры. Возможно, вы тоже захотите посмотреть на это.
Других решений пока нет …