struct xkb_context *context;
struct xkb_keymap *keymap;
struct xkb_rule_names names = {0,};
+ const char* default_rules, *default_model, *default_layout, *default_variant, *default_options;
TRACE_INPUT_BEGIN(_e_comp_screen_keymap_set);
/* assemble xkb_rule_names so we can fetch keymap */
memset(&names, 0, sizeof(names));
- names.rules = strdup("evdev");
- names.model = strdup("pc105");
- names.layout = strdup("us");
+
+ default_rules = e_comp_wl_input_keymap_default_rules_get();
+ default_model = e_comp_wl_input_keymap_default_model_get();
+ default_layout = e_comp_wl_input_keymap_default_layout_get();
+ default_variant = e_comp_wl_input_keymap_default_variant_get();
+ default_options = e_comp_wl_input_keymap_default_options_get();
+
+ names.rules = strdup(default_rules);
+ names.model = strdup(default_model);
+ names.layout = strdup(default_layout);
+ if (default_variant) names.variant = strdup(default_variant);
+ if (default_options) names.options = strdup(default_options);
keymap = e_comp_wl_input_keymap_compile(context, names, &keymap_path);
eina_stringshare_del(keymap_path);
free((char *)names.rules);
free((char *)names.model);
free((char *)names.layout);
+ if (names.variant) free((char *)names.variant);
+ if (names.options) free((char *)names.options);
TRACE_INPUT_END();
}
/* FIXME: This is just for testing at the moment....
* happens to jive with what drm does */
e_main_ts("\tE_Comp_WL Keymap Init");
- e_comp_wl_input_keymap_set("evdev", "pc105", "us", ctx, map);
+ e_comp_wl_input_keymap_set(e_comp_wl_input_keymap_default_rules_get(),
+ e_comp_wl_input_keymap_default_model_get(),
+ e_comp_wl_input_keymap_default_layout_get(),
+ e_comp_wl_input_keymap_default_variant_get(),
+ e_comp_wl_input_keymap_default_options_get(),
+ ctx, map);
e_main_ts("\tE_Comp_WL Keymap Init Done");
E_LIST_HANDLER_APPEND(event_handlers, ECORE_DRM_EVENT_ACTIVATE, _e_comp_screen_cb_activate, comp);
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)
{
struct xkb_keymap *keymap;
struct xkb_rule_names names;
char *keymap_path = NULL;
Eina_Bool use_dflt_xkb = EINA_FALSE;
+ const char *default_rules, *default_model, *default_layout, *default_variant, *default_options;
/* DBG("COMP_WL: Keymap Set: %s %s %s", rules, model, layout); */
TRACE_INPUT_BEGIN(e_comp_wl_input_keymap_set);
/* assemble xkb_rule_names so we can fetch keymap */
memset(&names, 0, sizeof(names));
if (rules) names.rules = strdup(rules);
- else names.rules = strdup("evdev");
+ else
+ {
+ default_rules = e_comp_wl_input_keymap_default_rules_get();
+ names.rules = strdup(default_rules);
+ }
if (model) names.model = strdup(model);
- else names.model = strdup("pc105");
+ else
+ {
+ default_model = e_comp_wl_input_keymap_default_model_get();
+ names.model = strdup(default_model);
+ }
if (layout) names.layout = strdup(layout);
- else names.layout = strdup("us");
+ else
+ {
+ default_layout = e_comp_wl_input_keymap_default_layout_get();
+ names.layout = strdup(default_layout);
+ }
+ if (variant) names.variant = strdup(variant);
+ else
+ {
+ default_variant = e_comp_wl_input_keymap_default_variant_get();
+ if (default_variant) names.variant = strdup(default_variant);
+ }
+ if (options) names.options = strdup(options);
+ else
+ {
+ default_options = e_comp_wl_input_keymap_default_options_get();
+ if (default_options) names.options = strdup(default_options);
+ }
TRACE_INPUT_BEGIN(e_comp_wl_input_keymap_set_keymap_compile);
if (use_dflt_xkb)
free((char *)names.rules);
free((char *)names.model);
free((char *)names.layout);
+ if (names.variant) free((char *)names.variant);
+ if (names.options) free((char *)names.options);
TRACE_INPUT_END();
}
+E_API const char*
+e_comp_wl_input_keymap_default_rules_get(void)
+{
+ const char *rules;
+ if (e_config->xkb.default_rmlvo.rules)
+ return e_config->xkb.default_rmlvo.rules;
+ else
+ {
+ rules = getenv("E_DEFAULT_XKB_RULES");
+ if (rules) return rules;
+ else return "evdev";
+ }
+}
+
+E_API const char*
+e_comp_wl_input_keymap_default_model_get(void)
+{
+ const char *model;
+ if (e_config->xkb.default_rmlvo.model)
+ return e_config->xkb.default_rmlvo.model;
+ else
+ {
+ model = getenv("E_DEFAULT_XKB_MODEL");
+ if (model) return model;
+ else return "pc105";
+ }
+}
+
+E_API const char*
+e_comp_wl_input_keymap_default_layout_get(void)
+{
+ const char *layout;
+ if (e_config->xkb.default_rmlvo.layout)
+ return e_config->xkb.default_rmlvo.layout;
+ else
+ {
+ layout = getenv("E_DEFAULT_XKB_LAYOUT");
+ if (layout) return layout;
+ else return "us";
+ }
+}
+
+E_API const char*
+e_comp_wl_input_keymap_default_variant_get(void)
+{
+ const char *variant;
+ if (e_config->xkb.default_rmlvo.variant)
+ return e_config->xkb.default_rmlvo.variant;
+ else
+ {
+ variant = getenv("E_DEFAULT_XKB_VARIANT");
+ if (variant) return variant;
+ else return NULL;
+ }
+}
+
+E_API const char*
+e_comp_wl_input_keymap_default_options_get(void)
+{
+ const char *options;
+ if (e_config->xkb.default_rmlvo.options)
+ return e_config->xkb.default_rmlvo.options;
+ else
+ {
+ options = getenv("E_DEFAULT_XKB_OPTIONS");
+ if (options) return options;
+ else return NULL;
+ }
+}
+
E_API void
e_comp_wl_input_touch_enabled_set(Eina_Bool enabled)
{
E_API Eina_Bool e_comp_wl_input_keymap_cache_file_use_get(void);
E_API Eina_Stringshare *e_comp_wl_input_keymap_path_get(struct xkb_rule_names names);
E_API struct xkb_keymap *e_comp_wl_input_keymap_compile(struct xkb_context *ctx, struct xkb_rule_names names, char **keymap_path);
-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_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 const char *e_comp_wl_input_keymap_default_rules_get(void);
+E_API const char *e_comp_wl_input_keymap_default_model_get(void);
+E_API const char *e_comp_wl_input_keymap_default_layout_get(void);
+E_API const char *e_comp_wl_input_keymap_default_variant_get(void);
+E_API const char *e_comp_wl_input_keymap_default_options_get(void);
# endif
#endif
E_CONFIG_VAL(D, T, xkb.dont_touch_my_damn_keyboard, UCHAR);
E_CONFIG_VAL(D, T, xkb.use_cache, UCHAR);
E_CONFIG_VAL(D, T, xkb.delay_held_key_input_to_focus, UINT);
+ E_CONFIG_VAL(D, T, xkb.default_rmlvo.rules, STR);
+ E_CONFIG_VAL(D, T, xkb.default_rmlvo.model, STR);
+ E_CONFIG_VAL(D, T, xkb.default_rmlvo.layout, STR);
+ E_CONFIG_VAL(D, T, xkb.default_rmlvo.variant, STR);
+ E_CONFIG_VAL(D, T, xkb.default_rmlvo.options, STR);
E_CONFIG_VAL(D, T, keyboard.repeat_delay, INT);
E_CONFIG_VAL(D, T, keyboard.repeat_rate, INT);
E_CONFIG_VAL(D, T, use_desktop_window_profile, INT);
}
eina_stringshare_del(ecf->xkb.default_model);
+ eina_stringshare_del(ecf->xkb.default_rmlvo.rules);
+ eina_stringshare_del(ecf->xkb.default_rmlvo.model);
+ eina_stringshare_del(ecf->xkb.default_rmlvo.layout);
+ eina_stringshare_del(ecf->xkb.default_rmlvo.variant);
+ eina_stringshare_del(ecf->xkb.default_rmlvo.options);
eina_stringshare_del(ecf->wl_sock_access.owner);
eina_stringshare_del(ecf->wl_sock_access.group);
Eina_Bool dont_touch_my_damn_keyboard;
Eina_Bool use_cache;
unsigned int delay_held_key_input_to_focus;
+ struct
+ {
+ const char *rules;
+ const char *model;
+ const char *layout;
+ const char *variant;
+ const char *options;
+ } default_rmlvo;
} xkb;
struct
{