diff --git a/src/bin/e_xkb.c b/src/bin/e_xkb.c index bc8111fc1..c0dbda07c 100644 --- a/src/bin/e_xkb.c +++ b/src/bin/e_xkb.c @@ -21,6 +21,8 @@ e_xkb_init(void) cl = eina_list_data_get(e_config->xkb.used_layouts); e_xkb_layout_set(cl->name); } + else + e_xkb_update(-1); return 1; } @@ -38,7 +40,7 @@ e_xkb_update(int cur_group) Eina_List *l; Eina_Strbuf *buf; - if (!e_config->xkb.used_layouts) return; + if ((!e_config->xkb.used_layouts) && (!e_config->xkb.used_options) && (!e_config->xkb.default_model)) return; if (cur_group != -1) { _e_xkb_cur_group = cur_group; @@ -51,39 +53,55 @@ e_xkb_update(int cur_group) */ buf = eina_strbuf_new(); - eina_strbuf_append(buf, "setxkbmap -layout '"); + eina_strbuf_append(buf, "setxkbmap "); - EINA_LIST_FOREACH(e_config->xkb.used_layouts, l, cl) + if (e_config->xkb.used_layouts) { - if (cl->name) + eina_strbuf_append(buf, "-layout '"); + EINA_LIST_FOREACH(e_config->xkb.used_layouts, l, cl) { - eina_strbuf_append(buf, cl->name); - eina_strbuf_append(buf, ","); + if (cl->name) + { + eina_strbuf_append(buf, cl->name); + eina_strbuf_append(buf, ","); + } + } + + eina_strbuf_append(buf, "' -variant '"); + EINA_LIST_FOREACH(e_config->xkb.used_layouts, l, cl) + { + if (cl->variant) + { + if (!strcmp(cl->variant, "basic")) continue; + eina_strbuf_append(buf, cl->variant); + eina_strbuf_append(buf, ","); + } + else + eina_strbuf_append(buf, ","); + } + eina_strbuf_append(buf, "'"); + + /* use first entry in used layouts */ + cl = e_config->xkb.used_layouts->data; + + if (cl->model) + { + eina_strbuf_append(buf, " -model '"); + if (strcmp(cl->model, "default")) + eina_strbuf_append(buf, cl->model); + else if ((e_config->xkb.default_model) && + (strcmp(e_config->xkb.default_model, "default"))) + eina_strbuf_append(buf, e_config->xkb.default_model); + else + eina_strbuf_append(buf, "default"); + eina_strbuf_append(buf, "'"); } } - eina_strbuf_append(buf, "' -variant '"); - - EINA_LIST_FOREACH(e_config->xkb.used_layouts, l, cl) - { - if (cl->variant) - { - if (!strcmp(cl->variant, "basic")) continue; - eina_strbuf_append(buf, cl->variant); - eina_strbuf_append(buf, ","); - } - else - eina_strbuf_append(buf, ","); - } - eina_strbuf_append(buf, "'"); - - /* use first entry in used layouts */ - cl = e_config->xkb.used_layouts->data; - - if (cl->model) + else if (e_config->xkb.default_model) { eina_strbuf_append(buf, " -model '"); - if (strcmp(cl->model, "default")) - eina_strbuf_append(buf, cl->model); + if (strcmp(e_config->xkb.default_model, "default")) + eina_strbuf_append(buf, e_config->xkb.default_model); else if ((e_config->xkb.default_model) && (strcmp(e_config->xkb.default_model, "default"))) eina_strbuf_append(buf, e_config->xkb.default_model); @@ -92,17 +110,20 @@ e_xkb_update(int cur_group) eina_strbuf_append(buf, "'"); } - /* clear options */ - eina_strbuf_append(buf, " -option "); - - /* add in selected options */ - EINA_LIST_FOREACH(e_config->xkb.used_options, l, op) + if (e_config->xkb.used_options) { - if (op->name) + /* clear options */ + eina_strbuf_append(buf, " -option "); + + /* add in selected options */ + EINA_LIST_FOREACH(e_config->xkb.used_options, l, op) { - eina_strbuf_append(buf, " -option '"); - eina_strbuf_append(buf, op->name); - eina_strbuf_append(buf, "'"); + if (op->name) + { + eina_strbuf_append(buf, " -option '"); + eina_strbuf_append(buf, op->name); + eina_strbuf_append(buf, "'"); + } } } INF("SET XKB RUN: %s", eina_strbuf_string_get(buf)); diff --git a/src/modules/xkbswitch/e_mod_main.c b/src/modules/xkbswitch/e_mod_main.c index ef4bcbfdf..da52f2380 100644 --- a/src/modules/xkbswitch/e_mod_main.c +++ b/src/modules/xkbswitch/e_mod_main.c @@ -60,22 +60,6 @@ EAPI E_Module_Api e_modapi = "XKB Switcher" }; -static void -_e_xkb_default_add(void) -{ - E_Config_XKB_Layout *nl; - - CRI("No kbd layouts found! Probably hit super-annoying-xkb-module bug!"); - - nl = E_NEW(E_Config_XKB_Layout, 1); - nl->name = eina_stringshare_add("default"); - nl->model = eina_stringshare_add("default"); - nl->variant = eina_stringshare_add("basic"); - - e_config->xkb.used_layouts = - eina_list_append(e_config->xkb.used_layouts, nl); -} - /* Module initializer * Initializes the configuration file, checks its versions, populates * menus, finds the rules file, initializes gadget icon. @@ -92,8 +76,6 @@ e_modapi_init(E_Module *m) _xkb_cfg_dialog); _xkb.module = m; ecore_event_handler_add(ECORE_X_EVENT_XKB_STATE_NOTIFY, _xkb_changed_state, NULL); - if (!e_config->xkb.default_model) e_config->xkb.default_model = eina_stringshare_add("default"); - if (!e_config->xkb.used_layouts) _e_xkb_default_add(); /* Gadcon */ e_gadcon_provider_register(&_gc_class); return m;