next/prev xkb layout switch actions now properly set the current/selected kbd layout name

SVN revision: 77369
This commit is contained in:
Mike Blumenkrantz 2012-10-03 13:46:11 +00:00
parent 0f5cd63f5a
commit 0521c799fa
1 changed files with 22 additions and 4 deletions

View File

@ -112,9 +112,18 @@ e_xkb_update(int cur_group)
EAPI void
e_xkb_layout_next(void)
{
int nb_groups = eina_list_count(e_config->xkb.used_layouts);
Eina_List *l;
E_Config_XKB_Layout *cl;
e_config->xkb.cur_group = (e_config->xkb.cur_group + 1) % nb_groups;
l = eina_list_nth_list(e_config->xkb.used_layouts, e_config->xkb.cur_group);
l = eina_list_next(l);
if (!l) l = e_config->xkb.used_layouts;
e_config->xkb.cur_group = (e_config->xkb.cur_group + 1) % eina_list_count(e_config->xkb.used_layouts);
cl = eina_list_data_get(l);
eina_stringshare_replace(&e_config->xkb.cur_layout, cl->name);
eina_stringshare_replace(&e_config->xkb.selected_layout, cl->name);
INF("Setting keyboard layout: %s", cl->name);
e_xkb_update(e_config->xkb.cur_group);
_e_xkb_update_event(e_config->xkb.cur_group);
e_config_save_queue();
@ -123,10 +132,19 @@ e_xkb_layout_next(void)
EAPI void
e_xkb_layout_prev(void)
{
int nb_groups = eina_list_count(e_config->xkb.used_layouts);
Eina_List *l;
E_Config_XKB_Layout *cl;
l = eina_list_nth_list(e_config->xkb.used_layouts, e_config->xkb.cur_group);
l = eina_list_prev(l);
if (!l) l = eina_list_last(e_config->xkb.used_layouts);
e_config->xkb.cur_group = (e_config->xkb.cur_group == 0) ?
(nb_groups - 1) : (e_config->xkb.cur_group - 1);
((int)eina_list_count(e_config->xkb.used_layouts) - 1) : (e_config->xkb.cur_group - 1);
cl = eina_list_data_get(l);
eina_stringshare_replace(&e_config->xkb.cur_layout, cl->name);
eina_stringshare_replace(&e_config->xkb.selected_layout, cl->name);
INF("Setting keyboard layout: %s", cl->name);
e_xkb_update(e_config->xkb.cur_group);
_e_xkb_update_event(e_config->xkb.cur_group);
e_config_save_queue();