xkb no longer sets dummy default layouts and is smarter about applying configs without layouts

SVN revision: 79141
This commit is contained in:
Mike Blumenkrantz 2012-11-12 09:49:07 +00:00
parent c3569031ff
commit 031624abd9
2 changed files with 57 additions and 54 deletions

View File

@ -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));

View File

@ -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;