diff --git a/src/bin/e_xkb.c b/src/bin/e_xkb.c index 85f596325..691cda405 100644 --- a/src/bin/e_xkb.c +++ b/src/bin/e_xkb.c @@ -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();