forked from enlightenment/efl
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:
parent
47a7f74453
commit
a48c4cd064
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue