jihoon pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=662389f39bc3df831526c08f61f176aced1612c8
commit 662389f39bc3df831526c08f61f176aced1612c8 Author: Jihoon Kim <jihoon48....@samsung.com> Date: Fri Feb 12 10:18:05 2016 +0900 ecore_imf/wayland: send cursor position before requesting to show --- src/modules/ecore_imf/wayland/wayland_imcontext.c | 53 +++++++++++++++++------ 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/src/modules/ecore_imf/wayland/wayland_imcontext.c b/src/modules/ecore_imf/wayland/wayland_imcontext.c index d7d254e..9f4d071 100644 --- a/src/modules/ecore_imf/wayland/wayland_imcontext.c +++ b/src/modules/ecore_imf/wayland/wayland_imcontext.c @@ -343,35 +343,58 @@ commit_preedit(WaylandIMContext *imcontext) (void *)imcontext->preedit_commit); } -static Eina_Bool -show_input_panel(Ecore_IMF_Context *ctx) +static void +set_focus(Ecore_IMF_Context *ctx) { WaylandIMContext *imcontext = (WaylandIMContext *)ecore_imf_context_data_get(ctx); - Ecore_Wl2_Input *input; - struct wl_seat *seat; - - if ((!imcontext) || (!imcontext->window) || (!imcontext->text_input)) - return EINA_FALSE; - - input = ecore_wl2_window_input_get(imcontext->window); + Ecore_Wl2_Input *input = ecore_wl2_window_input_get(imcontext->window); if (!input) - return EINA_FALSE; + return; - seat = ecore_wl2_input_seat_get(input); + struct wl_seat *seat = ecore_wl2_input_seat_get(input); if (!seat) - return EINA_FALSE; + return; imcontext->input = input; - _clear_hide_timer(); - wl_text_input_show_input_panel(imcontext->text_input); wl_text_input_activate(imcontext->text_input, seat, ecore_wl2_window_surface_get(imcontext->window)); +} + +static Eina_Bool +show_input_panel(Ecore_IMF_Context *ctx) +{ + WaylandIMContext *imcontext = (WaylandIMContext *)ecore_imf_context_data_get(ctx); + char *surrounding = NULL; + int cursor_pos; + + if ((!imcontext) || (!imcontext->window) || (!imcontext->text_input)) + return EINA_FALSE; + + if (!imcontext->input) + set_focus(ctx); + + _clear_hide_timer(); wl_text_input_set_content_type(imcontext->text_input, imcontext->content_hint, imcontext->content_purpose); + if (ecore_imf_context_surrounding_get(imcontext->ctx, &surrounding, &cursor_pos)) + { + if (imcontext->text_input) + wl_text_input_set_surrounding_text(imcontext->text_input, surrounding, + cursor_pos, cursor_pos); + + if (surrounding) + { + free(surrounding); + surrounding = NULL; + } + } + + wl_text_input_show_input_panel(imcontext->text_input); + return EINA_TRUE; } @@ -751,6 +774,8 @@ wayland_im_context_focus_in(Ecore_IMF_Context *ctx) { EINA_LOG_DOM_INFO(_ecore_imf_wayland_log_dom, "focus-in"); + set_focus(ctx); + if (ecore_imf_context_input_panel_enabled_get(ctx)) if (!ecore_imf_context_input_panel_show_on_demand_get (ctx)) show_input_panel(ctx); --