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