Check for valid text_input object before trying to call wayland

functions on it.

NB: Wayland (internal) functions typically do not do Any object
validity checking, so lets be proactive and do it here first.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
Chris Michael 2013-07-24 09:15:43 +01:00
parent 47a7f74453
commit a48c4cd064
1 changed files with 35 additions and 21 deletions

View File

@ -102,6 +102,7 @@ update_state(WaylandIMContext *imcontext)
/* cursor_pos is a byte index */
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);
free(surrounding);
@ -117,6 +118,8 @@ update_state(WaylandIMContext *imcontext)
EINA_LOG_DOM_INFO(_ecore_imf_wayland_log_dom, "canvas (x: %d, y: %d)",
canvas_x, canvas_y);
if (imcontext->text_input)
{
wl_text_input_set_cursor_rectangle(imcontext->text_input,
imcontext->cursor_location.x + canvas_x,
imcontext->cursor_location.y + canvas_y,
@ -124,6 +127,7 @@ update_state(WaylandIMContext *imcontext)
imcontext->cursor_location.height);
wl_text_input_commit_state(imcontext->text_input, ++imcontext->serial);
}
}
static Eina_Bool
@ -507,6 +511,7 @@ text_input_leave(void *data,
{
WaylandIMContext *imcontext = (WaylandIMContext *)data;
if (text_input)
wl_text_input_hide_input_panel(text_input);
/* clear preedit */
@ -574,6 +579,7 @@ wayland_im_context_add(Ecore_IMF_Context *ctx)
imcontext->text_input =
wl_text_input_manager_create_text_input(imcontext->text_input_manager);
if (imcontext->text_input)
wl_text_input_add_listener(imcontext->text_input,
&text_input_listener, imcontext);
}
@ -585,6 +591,7 @@ wayland_im_context_del(Ecore_IMF_Context *ctx)
EINA_LOG_DOM_INFO(_ecore_imf_wayland_log_dom, "context_del");
if (imcontext->text_input)
wl_text_input_destroy(imcontext->text_input);
clear_preedit(imcontext);
@ -598,6 +605,7 @@ wayland_im_context_reset(Ecore_IMF_Context *ctx)
commit_preedit(imcontext);
clear_preedit(imcontext);
if (imcontext->text_input)
wl_text_input_reset(imcontext->text_input);
update_state(imcontext);
@ -619,10 +627,13 @@ wayland_im_context_focus_in(Ecore_IMF_Context *ctx)
if (!input || !input->seat)
return;
if (imcontext->text_input)
{
wl_text_input_show_input_panel(imcontext->text_input);
wl_text_input_activate(imcontext->text_input,
input->seat,
ecore_wl_window_surface_get(imcontext->window));
}
}
EAPI void
@ -634,6 +645,7 @@ wayland_im_context_focus_out(Ecore_IMF_Context *ctx)
if (!imcontext->window) return;
if (imcontext->text_input)
wl_text_input_deactivate(imcontext->text_input,
imcontext->window->display->input->seat);
}
@ -738,6 +750,7 @@ wayland_im_context_show(Ecore_IMF_Context *ctx)
EINA_LOG_DOM_INFO(_ecore_imf_wayland_log_dom, "context_show");
if (imcontext->text_input)
wl_text_input_show_input_panel(imcontext->text_input);
}
@ -748,6 +761,7 @@ wayland_im_context_hide(Ecore_IMF_Context *ctx)
EINA_LOG_DOM_INFO(_ecore_imf_wayland_log_dom, "context_hide");
if (imcontext->text_input)
wl_text_input_hide_input_panel(imcontext->text_input);
}