E_Input_Method_Context *context;
};
+static struct wl_resource *destroyed_resource = NULL;
+
struct _E_Input_Method_Context
{
struct wl_resource *resource;
static void
_e_text_input_method_context_cb_destroy(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
{
- LOGD("resource : %p", resource);
+ E_Input_Method_Context *context = wl_resource_get_user_data(resource);
+
+ LOGD("resource(%p), context(%p), context->input(%p), context->input_method(%p)", resource, context, context->input, context->input_method);
+
wl_resource_destroy(resource);
}
_e_text_input_send_input_panel_geometry(context->input->resource, x, y, width, height);
g_updated_geometry = EINA_TRUE;
}
-
}
static void
}
#endif
- LOGD("resource : %p", resource);
+ LOGD("resource(%p), context(%p)", resource, context);
if ((context->input_method) &&
(context->input_method->context == context))
_e_text_input_method_context_grab_set(input_method->context,
EINA_FALSE);
#endif
- /* TODO: finish the grab of keyboard. */
- wl_input_method_send_deactivate(input_method->resource,
- input_method->context->resource,
- need_focus_in);
+ if (input_method->resource == destroyed_resource)
+ {
+ LOGD("deactivate skipped : %p %p", input_method->resource,
+ input_method->context->resource);
+ }
+ else
+ {
+ /* TODO: finish the grab of keyboard. */
+ wl_input_method_send_deactivate(input_method->resource,
+ input_method->context->resource,
+ need_focus_in);
+ LOGD("wm_map TEXTINPUT deactivate : %p %p", input_method->resource,
+ input_method->context->resource);
+ }
}
if (ecore_key_down_handler)
ecore_key_down_handler = NULL;
}
- LOGD("Resetting input_method->input : %p, text_input : %p", input_method->input, text_input);
+ LOGD("Resetting input_method->input : %p, text_input : %p, %p %p",
+ input_method->input, text_input,
+ input_method->resource,
+ (input_method->context ? input_method->context->resource : NULL));
input_method->input = NULL;
if (input_method->context) input_method->context->input = NULL;
input_method->context = NULL;
input_method->context = context;
if (context->resource)
- wl_input_method_send_activate(input_method->resource, context->resource, text_input->id, EINA_TRUE);
+ {
+ wl_input_method_send_activate(input_method->resource, context->resource, text_input->id, EINA_TRUE);
+ LOGD("wm_map TEXTINPUT activate : %p %p", input_method->resource,
+ context->resource);
+ }
else
WRN("Failed to send activate due to no resource in context");
}
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);
+ destroyed_resource = NULL;
+
return EINA_TRUE;
}
return;
}
- LOGD("resource : %p", resource);
+ LOGD("resource : %p", resource);
if (g_show_text_input == text_input)
{
return;
}
- LOGD("text_input : %p, input_method : %p, resource : %p", text_input, input_method, resource);
+ 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);
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)
- wl_input_method_send_destroy(input_method->resource, input_method->context->resource);
+ {
+ 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);
+
+ destroyed_resource = input_method->resource;
+ }
if (_context_created)
_e_text_input_deactivate(text_input, input_method, EINA_FALSE);