LINUX.ORG.RU

История изменений

Исправление anonymous2, (текущая версия) :

подскажу через xcb api нужно воспользоваться xcb_xkb_get_names

у меня проект есть qxkb5 вот пример оттуда

QStringList XcbConnection::getXkbNames(void) const
{
    auto xcbReply = getReplyFunc2(xcb_xkb_get_names, conn.get(), XCB_XKB_ID_USE_CORE_KBD, XCB_XKB_NAME_DETAIL_GROUP_NAMES | XCB_XKB_NAME_DETAIL_SYMBOLS);

    if(xcbReply.error())
        throw std::runtime_error("xcb_xkb_get_names");

    QStringList res;
    if(auto reply = xcbReply.reply())
    {
        const void *buffer = xcb_xkb_get_names_value_list(reply.get());
        xcb_xkb_get_names_value_list_t list;

        xcb_xkb_get_names_value_list_unpack(buffer, reply->nTypes, reply->indicators, reply->virtualMods,
                                            reply->groupNames, reply->nKeys, reply->nKeyAliases, reply->nRadioGroups, reply->which, & list);
        int groups = xcb_xkb_get_names_value_list_groups_length(reply.get(), & list);

        for(int ii = 0; ii < groups; ++ii)
            res << getAtomName(list.groups[ii]);
    }
    
    return res;
}

Исходная версия anonymous2, :

подскажу через xcb api нужно воспользоваться xcb_xkb_get_names

у меня проект есть qxkb5 на github вот пример

QStringList XcbConnection::getXkbNames(void) const
{
    auto xcbReply = getReplyFunc2(xcb_xkb_get_names, conn.get(), XCB_XKB_ID_USE_CORE_KBD, XCB_XKB_NAME_DETAIL_GROUP_NAMES | XCB_XKB_NAME_DETAIL_SYMBOLS);

    if(xcbReply.error())
        throw std::runtime_error("xcb_xkb_get_names");

    QStringList res;
    if(auto reply = xcbReply.reply())
    {
        const void *buffer = xcb_xkb_get_names_value_list(reply.get());
        xcb_xkb_get_names_value_list_t list;

        xcb_xkb_get_names_value_list_unpack(buffer, reply->nTypes, reply->indicators, reply->virtualMods,
                                            reply->groupNames, reply->nKeys, reply->nKeyAliases, reply->nRadioGroups, reply->which, & list);
        int groups = xcb_xkb_get_names_value_list_groups_length(reply.get(), & list);

        for(int ii = 0; ii < groups; ++ii)
            res << getAtomName(list.groups[ii]);
    }
    
    return res;
}