From c10c36ed49282c06ab50116d902c7d70fbd89e4b Mon Sep 17 00:00:00 2001 From: Haifeng Deng Date: Thu, 18 Feb 2016 18:32:45 +0800 Subject: [PATCH] ecore_imf/wayland: Support input panel data get Change-Id: I8f7a57b7ead8ed3e21b0ebbc72acf8cc1f35d1f0 --- src/modules/ecore_imf/wayland/wayland_imcontext.c | 50 ++++++++++++++++++++++- src/modules/ecore_imf/wayland/wayland_imcontext.h | 3 ++ src/modules/ecore_imf/wayland/wayland_module.c | 2 +- 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/modules/ecore_imf/wayland/wayland_imcontext.c b/src/modules/ecore_imf/wayland/wayland_imcontext.c index 2453420..18a8313 100755 --- a/src/modules/ecore_imf/wayland/wayland_imcontext.c +++ b/src/modules/ecore_imf/wayland/wayland_imcontext.c @@ -106,6 +106,9 @@ struct _WaylandIMContext uint32_t imdata_size; uint32_t bidi_direction; + + void *input_panel_data; + uint32_t input_panel_data_length; // }; @@ -966,6 +969,24 @@ text_input_private_command(void *data, ecore_imf_context_event_callback_call(imcontext->ctx, ECORE_IMF_CALLBACK_PRIVATE_COMMAND_SEND, (void *)command); } + +static void +text_input_input_panel_data(void *data, + struct wl_text_input *text_input EINA_UNUSED, + uint32_t serial EINA_UNUSED, + const char *input_panel_data, + uint32_t length) +{ + WaylandIMContext *imcontext = (WaylandIMContext *)data; + if (!imcontext || !imcontext->ctx) return; + + if (imcontext->input_panel_data) + free(imcontext->input_panel_data); + + imcontext->input_panel_data = calloc(1, length); + memcpy(imcontext->input_panel_data, input_panel_data, length); + imcontext->input_panel_data_length = length; +} // static const struct wl_text_input_listener text_input_listener = @@ -986,7 +1007,8 @@ static const struct wl_text_input_listener text_input_listener = // TIZEN_ONLY(20150918): Support to set the selection region text_input_selection_region, text_input_private_command, - text_input_input_panel_geometry + text_input_input_panel_geometry, + text_input_input_panel_data // }; @@ -1034,6 +1056,13 @@ wayland_im_context_del(Ecore_IMF_Context *ctx) imcontext->imdata = NULL; imcontext->imdata_size = 0; } + + if (imcontext->input_panel_data) + { + free(imcontext->input_panel_data); + imcontext->input_panel_data = NULL; + imcontext->input_panel_data_length = 0; + } // if (imcontext->text_input) @@ -1447,6 +1476,25 @@ wayland_im_context_input_panel_imdata_set(Ecore_IMF_Context *ctx, const void *da if (imcontext->input && (imcontext->imdata_size > 0)) wl_text_input_set_input_panel_data(imcontext->text_input, (const char *)imcontext->imdata, imcontext->imdata_size); } + +EAPI void +wayland_im_context_input_panel_imdata_get(Ecore_IMF_Context *ctx, void *data, int *length) +{ + if (!ctx) return; + WaylandIMContext *imcontext = (WaylandIMContext *)ecore_imf_context_data_get(ctx); + + if (imcontext && imcontext->input_panel_data && (imcontext->input_panel_data_length > 0)) + { + if (data) + memcpy(data, imcontext->input_panel_data, imcontext->input_panel_data_length); + + if (length) + *length = imcontext->input_panel_data_length; + } + else + if (length) + *length = 0; +} // // TIZEN_ONLY(20160218): Support BiDi direction diff --git a/src/modules/ecore_imf/wayland/wayland_imcontext.h b/src/modules/ecore_imf/wayland/wayland_imcontext.h index a2d67f0..28a8a88 100755 --- a/src/modules/ecore_imf/wayland/wayland_imcontext.h +++ b/src/modules/ecore_imf/wayland/wayland_imcontext.h @@ -111,6 +111,9 @@ wayland_im_context_input_panel_geometry_get(Ecore_IMF_Context *ctx, EAPI void wayland_im_context_input_panel_imdata_set(Ecore_IMF_Context *ctx, const void *data, int length); + +EAPI void +wayland_im_context_input_panel_imdata_get(Ecore_IMF_Context *ctx, void *data, int *length); // // TIZEN_ONLY(20160218): Support BiDi direction EAPI void diff --git a/src/modules/ecore_imf/wayland/wayland_module.c b/src/modules/ecore_imf/wayland/wayland_module.c index 025b6fe..30cf960 100755 --- a/src/modules/ecore_imf/wayland/wayland_module.c +++ b/src/modules/ecore_imf/wayland/wayland_module.c @@ -70,7 +70,7 @@ static Ecore_IMF_Context_Class wayland_imf_class = NULL, /* input_panel_language_get, */ wayland_im_context_cursor_location_set, /* cursor_location_set */ wayland_im_context_input_panel_imdata_set, /* input_panel_imdata_set */ - NULL, /* input_panel_imdata_get */ + wayland_im_context_input_panel_imdata_get, /* input_panel_imdata_get */ wayland_im_context_input_panel_return_key_type_set, /* input_panel_return_key_type_set */ wayland_im_context_input_panel_return_key_disabled_set, /* input_panel_return_key_disabled_set */ NULL, /* input_panel_caps_lock_mode_set */ -- 2.7.4