我是X.org编程的新手。我想建立一个小应用程序,它对X键盘布局开关作出反应。我已经搜索过,但是在切换kb布局时没有找到触发的事件。请指出正确的事件。感谢
答案 0 :(得分:9)
XkbStateNotify
事件类型是X Keyboard Extension的一部分。你可以从中获取布局语言:
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
不仅会在布局更改时触发。这来自上面引用的规范:
报告的更改包括对键盘任何方面的更改 state:当设置或取消设置修饰符时,当前组 更改,或按下或释放指针按钮时。
因此,您必须在某处保存lang
的值,然后在新活动到达时,将lang
的新值与之前保存的值进行比较。
NB。还有XkbMapNotifyEvent
事件,它不会通知切换布局本身,而是关于更改键盘映射。你可能也想研究那个。