diff options
author | Marcel Hollerbach <marcel-hollerbach@t-online.de> | 2016-06-25 01:10:01 +0200 |
---|---|---|
committer | Marcel Hollerbach <marcel-hollerbach@t-online.de> | 2016-06-25 15:01:44 +0200 |
commit | 9c8b6a1c5d5194840116c6143804e66cbcdd3153 (patch) | |
tree | d0dccb46783ba5c5be727f64e827dd0581fcc661 | |
parent | 4bc61cfbd37ddd443f56bf8f0ba3da6c1c38a4e6 (diff) | |
download | enlightenment-9c8b6a1c5d5194840116c6143804e66cbcdd3153.tar.gz |
e_xkb: eval group before setted to wl
otherwise we are going to set 0 as default group.
This commit refactors out _eval_cur_group from the init timer, since wl
does not need a init timer.
-rw-r--r-- | src/bin/e_xkb.c | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/src/bin/e_xkb.c b/src/bin/e_xkb.c index 65c7018301..0aa1782551 100644 --- a/src/bin/e_xkb.c +++ b/src/bin/e_xkb.c @@ -14,25 +14,39 @@ static Ecore_Timer *save_group; E_API int E_EVENT_XKB_CHANGED = 0; -static Eina_Bool -_e_xkb_init_timer(void *data) +static void +_eval_cur_group(void) { Eina_List *l; - E_Config_XKB_Layout *cl2, *cl = data; + E_Config_XKB_Layout *cl2, *cl = NULL; int cur_group = -1; - if (!e_comp->root) return EINA_FALSE; + cl = e_config->xkb.current_layout; + if (!cl) cl = e_config->xkb.sel_layout; + EINA_LIST_FOREACH(e_config->xkb.used_layouts, l, cl2) { cur_group++; if (!cl2->name) continue; - if (e_config_xkb_layout_eq(cl, cl2)) + if (!cl || e_config_xkb_layout_eq(cl, cl2)) { INF("Setting keyboard layout: %s|%s|%s", cl2->name, cl2->model, cl2->variant); - e_xkb_update(cur_group); - break; + e_config->xkb.cur_group = cur_group; + return; } } + e_config->xkb.cur_group = 0; +} + +static Eina_Bool +_e_xkb_init_timer(void *data EINA_UNUSED) +{ + if (!e_comp->root) return EINA_FALSE; + + _eval_cur_group(); + + e_xkb_update(e_config->xkb.cur_group); + return EINA_FALSE; } @@ -99,13 +113,12 @@ e_xkb_init(E_Pixmap_Type comp_type) } #endif if (e_config->xkb.dont_touch_my_damn_keyboard) return 1; + _e_xkb_type_reconfig(comp_type); - if (e_config->xkb.cur_layout) - ecore_timer_add(1.5, _e_xkb_init_timer, e_config->xkb.current_layout); - else if (e_config->xkb.selected_layout) - ecore_timer_add(1.5, _e_xkb_init_timer, e_config->xkb.sel_layout); - else if (e_config->xkb.used_layouts) - ecore_timer_add(1.5, _e_xkb_init_timer, eina_list_data_get(e_config->xkb.used_layouts)); + + if (comp_type == E_PIXMAP_TYPE_X) + ecore_timer_add(1.5, _e_xkb_init_timer, NULL); + return 1; } @@ -317,7 +330,10 @@ _e_xkb_type_reconfig(E_Pixmap_Type comp_type) if (comp_type == E_PIXMAP_TYPE_X) _e_x_xkb_reconfig(); else if (comp_type == E_PIXMAP_TYPE_WL) - _e_wl_xkb_update(e_config->xkb.cur_group); + { + _eval_cur_group(); + _e_wl_xkb_update(e_config->xkb.cur_group); + } } E_API void |