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; }
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()); }
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); }
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; }