{"ru_RU", "evdev", "pc105", "ru"},
};
-static void _e_text_input_deactivate(E_Text_Input *text_input, E_Input_Method *input_method);
-static Eina_Bool _e_text_input_method_create_context(struct wl_client *client, E_Input_Method *input_method, E_Text_Input *text_input);
+static void _e_text_input_deactivate(E_Text_Input *text_input, E_Input_Method *input_method, Eina_Bool need_focus_in);
+static Eina_Bool _e_text_input_method_create_context(struct wl_client *client, E_Input_Method *input_method, E_Text_Input *text_input, Eina_Bool need_focus_out);
static void
_e_text_input_log_show(struct wl_resource *resource, uint32_t code, const char *msg, const char *warning_msg)
Because input_panel_hide event can be called after focus_out(deactivate) by application.
And Input Method(IME) should know the state of their own input_panel to manage their resource when the input_panel is hidden.
*/
- if (input_method && (!input_method->context || !input_method->context->resource))
- _context_created = _e_text_input_method_create_context(client, input_method, text_input);
+ if (input_method &&
+ ((!input_method->context) || (!input_method->context->resource)))
+ _context_created = _e_text_input_method_create_context(client, input_method, text_input, EINA_FALSE);
if (input_method && input_method->resource && input_method->context && input_method->context->resource)
wl_input_method_send_hide_input_panel(input_method->resource, input_method->context->resource);
if (_context_created)
- _e_text_input_deactivate(text_input, input_method);
+ _e_text_input_deactivate(text_input, input_method, EINA_FALSE);
e_input_panel_wait_update_set(EINA_FALSE);
}
}
static void
-_e_text_input_deactivate(E_Text_Input *text_input, E_Input_Method *input_method)
+_e_text_input_deactivate(E_Text_Input *text_input, E_Input_Method *input_method, Eina_Bool need_focus_in)
{
if (input_method->model == text_input)
{
#endif
/* TODO: finish the grab of keyboard. */
wl_input_method_send_deactivate(input_method->resource,
- input_method->context->resource);
+ input_method->context->resource,
+ need_focus_in);
}
if (ecore_key_down_handler)
return;
if (old)
- _e_text_input_deactivate(old, input_method);
+ _e_text_input_deactivate(old, input_method, EINA_TRUE);
input_method->model = text_input;
text_input->input_methods = eina_list_append(text_input->input_methods, input_method);
input_method->context = context;
if (context->resource)
- wl_input_method_send_activate(input_method->resource, context->resource, text_input->id);
+ wl_input_method_send_activate(input_method->resource, context->resource, text_input->id, EINA_TRUE);
}
#ifdef _TV
return;
}
- _e_text_input_deactivate(text_input, input_method);
+ _e_text_input_deactivate(text_input, input_method, EINA_TRUE);
}
static Eina_Bool
-_e_text_input_method_create_context(struct wl_client *client, E_Input_Method *input_method, E_Text_Input *text_input)
+_e_text_input_method_create_context(struct wl_client *client, E_Input_Method *input_method, E_Text_Input *text_input, Eina_Bool need_focus_out)
{
E_Input_Method_Context *context = NULL;
context->input_method = input_method;
input_method->context = context;
- wl_input_method_send_activate(input_method->resource, context->resource, text_input->id);
+ wl_input_method_send_activate(input_method->resource, context->resource, text_input->id, need_focus_out);
return EINA_TRUE;
}
* Because input_panel_show event can be called before focus_in(activate) by application.
* And Input Method(IME) should know the state of their own input_panel to manage their resource when the input_panel is shown. */
if (input_method && (!input_method->context || !input_method->context->resource))
- _e_text_input_method_create_context(client, input_method, text_input);
+ _e_text_input_method_create_context(client, input_method, text_input, EINA_TRUE);
if (input_method && input_method->resource && input_method->context && input_method->context->resource)
{
EINA_LIST_FREE(text_input->input_methods, input_method)
{
- _e_text_input_deactivate(text_input, input_method);
+ _e_text_input_deactivate(text_input, input_method, EINA_TRUE);
}
free(text_input);
if (input_method->resource != resource) return;
if (input_method->model)
- _e_text_input_deactivate(input_method->model, input_method);
+ _e_text_input_deactivate(input_method->model, input_method, EINA_TRUE);
input_method->resource = NULL;
input_method->context = NULL;