Exemplo n.º 1
0
bool EglFSWaylandInput::createDefaultKeymap()
{
    if (m_xkbContext && m_xkbKeymap && m_xkbState)
        return true;

    xkb_rule_names names;
    names.rules = ::strdup("evdev");
    names.model = ::strdup("pc105");
    names.layout = ::strdup("us");
    names.variant = ::strdup("");
    names.options = ::strdup("");

    m_xkbContext = xkb_context_new(xkb_context_flags(0));
    if (m_xkbContext) {
        m_xkbKeymap = xkb_map_new_from_names(m_xkbContext, &names, XKB_KEYMAP_COMPILE_NO_FLAGS);
        if (m_xkbKeymap)
            m_xkbState = xkb_state_new(m_xkbKeymap);
    }

    if (!m_xkbContext || !m_xkbKeymap || !m_xkbState) {
        qCWarning(gLcEglFSWayland) << "Failed to load default keymap, keyboard input disabled";
        return false;
    }

    return true;
}
Exemplo n.º 2
0
void mircv::XKBMapper::set_rules(xkb_rule_names const& names)
{
    std::lock_guard<std::mutex> lg(guard);

    context = std::shared_ptr<xkb_context>(xkb_context_new(xkb_context_flags(0)), XKBContextDeleter());
    map = std::shared_ptr<xkb_keymap>(xkb_map_new_from_names(context.get(), &names, xkb_map_compile_flags(0)), XKBKeymapDeleter());
    state = std::shared_ptr<xkb_state>(xkb_state_new(map.get()), XKBStateDeleter());
}
Exemplo n.º 3
0
void EglFSWaylandInput::keymapChanged(int fd, quint32 size)
{
    // Load keymap
    char *map = static_cast<char *>(::mmap(Q_NULLPTR, size, PROT_READ, MAP_SHARED, fd, 0));
    if (map == MAP_FAILED) {
        ::close(fd);
        return;
    }

    // Release the old keymap
    releaseKeymap();

    m_xkbContext = xkb_context_new(xkb_context_flags(0));
    m_xkbKeymap = xkb_map_new_from_string(m_xkbContext, map, XKB_KEYMAP_FORMAT_TEXT_V1,
                                          XKB_KEYMAP_COMPILE_NO_FLAGS);

    ::munmap(map, size);
    ::close(fd);

    m_xkbState = xkb_state_new(m_xkbKeymap);
}
Exemplo n.º 4
0
int main()
{
    xkb_rule_names names;
    names.rules = strdup("evdev");
    names.model = strdup("pc105");
    names.layout = strdup("us");
    names.variant = strdup("");
    names.options = strdup("");

    xkb_context *context = xkb_context_new(xkb_context_flags(0));
    if (context) {
        xkb_keymap * keymap = xkb_map_new_from_names(context, &names, xkb_map_compile_flags(0));
        if (keymap) {
            xkb_state *state = xkb_state_new(keymap);
            if (state)
                xkb_state_unref(state);
            xkb_map_unref(keymap);
        }
        xkb_context_unref(context);
    }

    return 0;
}