在X.org中切换kb布局时触发哪个事件

Which event is fired when switching kb layout in X.org

本文关键字:事件 布局 kb org      更新时间:2023-10-16

我是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事件,它通知的不是切换布局本身,而是改变键盘映射。你可能也想看看那个