diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index c2b6cdc7f..5c2a78652 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -2429,7 +2429,7 @@ _e_comp_wl_compositor_create(void) if (!layout) layout = strdup("us"); /* update compositor keymap */ - e_comp_wl_input_keymap_set(rules, model, layout, NULL, NULL); + e_comp_wl_input_keymap_set(rules, model, layout, NULL, NULL, NULL, NULL); } #endif e_comp_wl->wl.client_disp = ecore_wl2_display_connect(NULL); diff --git a/src/bin/e_comp_wl_input.c b/src/bin/e_comp_wl_input.c index 3c13a4ec4..3d12e8da3 100644 --- a/src/bin/e_comp_wl_input.c +++ b/src/bin/e_comp_wl_input.c @@ -605,7 +605,7 @@ e_comp_wl_input_keyboard_enabled_set(Eina_Bool enabled) } E_API void -e_comp_wl_input_keymap_set(const char *rules, const char *model, const char *layout, struct xkb_context *dflt_ctx, struct xkb_keymap *dflt_map) +e_comp_wl_input_keymap_set(const char *rules, const char *model, const char *layout, const char *variant, const char *options, struct xkb_context *dflt_ctx, struct xkb_keymap *dflt_map) { struct xkb_keymap *keymap; struct xkb_rule_names names; @@ -619,18 +619,28 @@ e_comp_wl_input_keymap_set(const char *rules, const char *model, const char *lay if (!use_dflt_xkb) { memset(&names, 0, sizeof(names)); - if (rules) names.rules = strdup(rules); - else names.rules = strdup("evdev"); - if (model) names.model = strdup(model); - else names.model = strdup("pc105"); - if (layout) names.layout = strdup(layout); - else names.layout = strdup("us"); + + if (rules) names.rules = rules; + else names.rules = "evdev"; + + if (model) names.model = model; + else names.model = "pc105"; + + if (layout) names.layout = layout; + else names.layout = "us"; + + if (variant) names.variant = variant; + else names.variant = NULL; + + if (options) names.options = options; + else names.options = NULL; } /* unreference any existing context */ if (e_comp_wl->xkb.context) xkb_context_unref(e_comp_wl->xkb.context); + /* create a new xkb context */ if (use_dflt_xkb) e_comp_wl->xkb.context = dflt_ctx; else e_comp_wl->xkb.context = xkb_context_new(0); @@ -643,24 +653,20 @@ e_comp_wl_input_keymap_set(const char *rules, const char *model, const char *lay /* fetch new keymap based on names */ if (use_dflt_xkb) keymap = dflt_map; else keymap = xkb_map_new_from_names(e_comp_wl->xkb.context, &names, 0); - if (keymap) + + if (!keymap) { - /* update compositor keymap */ - _e_comp_wl_input_keymap_update(keymap); + ERR("Failed to compile keymap"); + NULL; } + /* update compositor keymap */ + _e_comp_wl_input_keymap_update(keymap); + #ifdef HAVE_WL_DRM if (e_config->xkb.use_cache) ecore_drm_device_keyboard_cached_keymap_set(keymap); #endif - - /* cleanup */ - if (!use_dflt_xkb) - { - free((char *)names.rules); - free((char *)names.model); - free((char *)names.layout); - } } E_API void diff --git a/src/bin/e_comp_wl_input.h b/src/bin/e_comp_wl_input.h index 9691b97be..e6df151dc 100644 --- a/src/bin/e_comp_wl_input.h +++ b/src/bin/e_comp_wl_input.h @@ -29,7 +29,7 @@ E_API void e_comp_wl_input_pointer_enabled_set(Eina_Bool enabled); E_API void e_comp_wl_input_keyboard_enabled_set(Eina_Bool enabled); E_API void e_comp_wl_input_touch_enabled_set(Eina_Bool enabled); -E_API void e_comp_wl_input_keymap_set(const char *rules, const char *model, const char *layout, +E_API void e_comp_wl_input_keymap_set(const char *rules, const char *model, const char *layout, const char *variant, const char *options, struct xkb_context *dflt_ctx, struct xkb_keymap *dflt_map); E_API void e_comp_wl_input_keyboard_event_generate(const char *key, int mods, Eina_Bool up); diff --git a/src/modules/wl_drm/e_mod_main.c b/src/modules/wl_drm/e_mod_main.c index 9a54132e7..00e1a8628 100644 --- a/src/modules/wl_drm/e_mod_main.c +++ b/src/modules/wl_drm/e_mod_main.c @@ -790,7 +790,7 @@ e_modapi_init(E_Module *m) /* FIXME: This is just for testing at the moment.... * happens to jive with what drm does */ - e_comp_wl_input_keymap_set(NULL, NULL, NULL, ctx, map); + e_comp_wl_input_keymap_set(NULL, NULL, NULL, NULL, NULL, ctx, map); activate_handler = ecore_event_handler_add(ECORE_DRM_EVENT_ACTIVATE, diff --git a/src/modules/wl_wl/e_mod_main.c b/src/modules/wl_wl/e_mod_main.c index 8313f270b..6040aa996 100644 --- a/src/modules/wl_wl/e_mod_main.c +++ b/src/modules/wl_wl/e_mod_main.c @@ -72,7 +72,7 @@ e_modapi_init(E_Module *m) e_comp->pointer = e_pointer_canvas_new(e_comp->ee, EINA_TRUE); e_comp->pointer->color = EINA_TRUE; - e_comp_wl_input_keymap_set(NULL, NULL, NULL, NULL, NULL); + e_comp_wl_input_keymap_set(NULL, NULL, NULL, NULL, NULL, NULL, NULL); ecore_evas_pointer_xy_get(e_comp->ee, &e_comp_wl->ptr.x, &e_comp_wl->ptr.y);