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

-- 


Reply via email to