Fix issue not to send IME focus-out message sometimes 37/245737/1
authorJihoon Kim <jihoon48.kim@samsung.com>
Thu, 15 Oct 2020 06:36:56 +0000 (15:36 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Thu, 15 Oct 2020 06:37:12 +0000 (15:37 +0900)
Change-Id: I473c1aace31e0c45815ebdc04908013bd8463f73
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/e_mod_main.c

index d8962fe..5cdf703 100644 (file)
@@ -1454,8 +1454,9 @@ _e_text_input_method_create_context(struct wl_client *client, E_Input_Method *in
 
    wl_input_method_send_activate(input_method->resource, context->resource, text_input->id, need_focus_out);
 
-   LOGD("wm_map TEXTINPUT activate : %p %p", input_method->resource,
-        context->resource);
+   LOGD("wm_map TEXTINPUT activate : input_method->resource(%p) context->resource(%p)",
+        input_method->resource, context->resource);
+
    destroyed_resource = NULL;
 
    return EINA_TRUE;
@@ -2161,23 +2162,27 @@ _e_text_input_cb_destroy(struct wl_client *client, struct wl_resource *resource)
         return;
      }
 
-   LOGD("text_input(%p), input_method(%p), context(%p), context->resource(%p) resource(%p)", text_input, input_method, input_method->context, (input_method->context ? input_method->context->resource : NULL), resource);
+   LOGD("text_input(%p), focus(%d), input_method(%p), input_method->resource(%p), context(%p), context->resource(%p), resource(%p)",
+        text_input, (text_input == g_text_input), input_method, input_method->resource, input_method->context,
+        (input_method->context ? input_method->context->resource : NULL), resource);
 
    if ((!input_method->context) || (!input_method->context->resource))
      _context_created = _e_text_input_method_create_context(client, input_method, text_input, EINA_FALSE);
 
-   if (text_input == g_text_input &&
-       input_method->resource && input_method->context && input_method->context->resource)
+   if (text_input == g_text_input)
      {
-        wl_input_method_send_destroy(input_method->resource, input_method->context->resource);
-        LOGD("wm_map TEXTINPUT destroy : %p %p", input_method->resource,
-             input_method->context->resource);
+        if (_context_created)
+          _e_text_input_deactivate(text_input, input_method, EINA_FALSE);
 
-        destroyed_resource = input_method->resource;
-     }
+        if (input_method->resource && input_method->context && input_method->context->resource)
+          {
+             wl_input_method_send_destroy(input_method->resource, input_method->context->resource);
+             LOGD("wm_map TEXTINPUT destroy : input_method->resource(%p) input_method->context->resource(%p)",
+                  input_method->resource, input_method->context->resource);
 
-   if (_context_created)
-     _e_text_input_deactivate(text_input, input_method, EINA_FALSE);
+             destroyed_resource = input_method->resource;
+          }
+     }
 }
 
 static const struct wl_text_input_interface _e_text_input_implementation = {