From 3be0f947f83942e9ad33432f91fc44f3fb752254 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Tue, 12 Sep 2017 11:17:28 +0900 Subject: [PATCH 01/16] Add ime_get_selected_text API for getting selected text Change-Id: I436301569f9e6bca3459ba193ade28747562d9d7 Signed-off-by: Jihoon Kim --- include/inputmethod.h | 21 +++++++++++++++++++++ src/inputmethod.cpp | 25 +++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/include/inputmethod.h b/include/inputmethod.h index 11b51f3..a6dccc3 100644 --- a/include/inputmethod.h +++ b/include/inputmethod.h @@ -1665,6 +1665,27 @@ int ime_get_surrounding_text(int maxlen_before, int maxlen_after, char **text, i int ime_set_selection(int start, int end); /** + * @brief Gets the selected text synchronously. + * + * @remarks @a text must be released using free(). + * + * @since_tizen 4.0 + * + * @privlevel public + * + * @privilege %http://tizen.org/privilege/ime + * + * @param[out] text The selected text + * + * @return 0 on success, otherwise a negative error value + * @retval #IME_ERROR_NONE No error + * @retval #IME_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #IME_ERROR_PERMISSION_DENIED The application does not have the privilege to call this function + * @retval #IME_ERROR_NOT_RUNNING IME main loop isn't started yet + */ +EXPORT_API int ime_get_selected_text(char **text); + +/** * @brief This API returns the pointer of input panel main window. * * @since_tizen @if MOBILE 2.4 @else 3.0 @endif diff --git a/src/inputmethod.cpp b/src/inputmethod.cpp index 2f36cf3..99fa9e7 100644 --- a/src/inputmethod.cpp +++ b/src/inputmethod.cpp @@ -1246,6 +1246,31 @@ EXPORT_API int ime_set_selection(int start, int end) return IME_ERROR_NONE; } +EXPORT_API int ime_get_selected_text(char **text) +{ + ime_error_e retVal = IME_ERROR_NONE; + + if (!text) { + LOGW("IME_ERROR_INVALID_PARAMETER"); + return IME_ERROR_INVALID_PARAMETER; + } + + if (!g_running) { + LOGW("IME_ERROR_NOT_RUNNING"); + return IME_ERROR_NOT_RUNNING; + } + + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) { + LOGE("_check_privilege returned %d.", retVal); + return retVal; + } + + g_core.get_selection_text(text); + + return IME_ERROR_NONE; +} + EXPORT_API Evas_Object* ime_get_main_window(void) { ime_error_e retVal = IME_ERROR_NONE; -- 2.7.4 From 548b1d23cc9aa6da98ef9de39b5d56d67c9ecb6d Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Wed, 13 Sep 2017 14:33:18 +0900 Subject: [PATCH 02/16] Update package version to 0.1.12 Change-Id: I9d88d878b0bd6dadfc012737c9300d7ca12a7bb2 Signed-off-by: Jihoon Kim --- packaging/capi-ui-inputmethod.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/capi-ui-inputmethod.spec b/packaging/capi-ui-inputmethod.spec index e417518..de75a6c 100644 --- a/packaging/capi-ui-inputmethod.spec +++ b/packaging/capi-ui-inputmethod.spec @@ -1,6 +1,6 @@ Name: capi-ui-inputmethod Summary: Input Method Library -Version: 0.1.11 +Version: 0.1.12 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -- 2.7.4 From 8218b97579803303b33b335b54cbcce4af97238b Mon Sep 17 00:00:00 2001 From: "sungwook79.park" Date: Tue, 26 Sep 2017 19:24:24 +0900 Subject: [PATCH 03/16] Enhance line coverage ratio Change-Id: I5e01cfda2fa0e38519333a248fe8c17ea7426cee Signed-off-by: sungwook79.park --- src/inputmethod.cpp | 447 ++++++++++++++-------------------------------------- 1 file changed, 117 insertions(+), 330 deletions(-) diff --git a/src/inputmethod.cpp b/src/inputmethod.cpp index 99fa9e7..6bb6765 100644 --- a/src/inputmethod.cpp +++ b/src/inputmethod.cpp @@ -495,10 +495,7 @@ EXPORT_API int ime_run(ime_callback_s *basic_cb, void *user_data) } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_basic_callback = *basic_cb; @@ -537,10 +534,7 @@ EXPORT_API int ime_event_set_focus_in_cb(ime_focus_in_cb callback_func, void *us } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.focus_in = callback_func; g_event_callback.focus_in_user_data = user_data; @@ -558,10 +552,7 @@ EXPORT_API int ime_event_set_focus_out_cb(ime_focus_out_cb callback_func, void * } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.focus_out = callback_func; g_event_callback.focus_out_user_data = user_data; @@ -579,10 +570,7 @@ EXPORT_API int ime_event_set_surrounding_text_updated_cb(ime_surrounding_text_up } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.surrounding_text_updated = callback_func; g_event_callback.surrounding_text_updated_user_data = user_data; @@ -600,10 +588,7 @@ EXPORT_API int ime_event_set_input_context_reset_cb(ime_input_context_reset_cb c } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.input_context_reset = callback_func; g_event_callback.input_context_reset_user_data = user_data; @@ -621,10 +606,7 @@ EXPORT_API int ime_event_set_cursor_position_updated_cb(ime_cursor_position_upda } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.cursor_position_updated = callback_func; g_event_callback.cursor_position_updated_user_data = user_data; @@ -642,10 +624,7 @@ EXPORT_API int ime_event_set_language_requested_cb(ime_language_requested_cb cal } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.language_requested = callback_func; g_event_callback.language_requested_user_data = user_data; @@ -663,10 +642,7 @@ EXPORT_API int ime_event_set_language_set_cb(ime_language_set_cb callback_func, } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.language_set = callback_func; g_event_callback.language_set_user_data = user_data; @@ -684,10 +660,7 @@ EXPORT_API int ime_event_set_imdata_set_cb(ime_imdata_set_cb callback_func, void } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.imdata_set = callback_func; g_event_callback.imdata_set_user_data = user_data; @@ -705,10 +678,7 @@ EXPORT_API int ime_event_set_imdata_requested_cb(ime_imdata_requested_cb callbac } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.imdata_requested = callback_func; g_event_callback.imdata_requested_user_data = user_data; @@ -726,10 +696,7 @@ EXPORT_API int ime_event_set_layout_set_cb(ime_layout_set_cb callback_func, void } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.layout_set = callback_func; g_event_callback.layout_set_user_data = user_data; @@ -747,10 +714,7 @@ EXPORT_API int ime_event_set_return_key_type_set_cb(ime_return_key_type_set_cb c } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.return_key_type_set = callback_func; g_event_callback.return_key_type_set_user_data = user_data; @@ -768,10 +732,7 @@ EXPORT_API int ime_event_set_return_key_state_set_cb(ime_return_key_state_set_cb } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.return_key_state_set = callback_func; g_event_callback.return_key_state_set_user_data = user_data; @@ -789,10 +750,7 @@ EXPORT_API int ime_event_set_geometry_requested_cb(ime_geometry_requested_cb cal } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.geometry_requested = callback_func; g_event_callback.geometry_requested_user_data = user_data; @@ -810,10 +768,7 @@ EXPORT_API int ime_event_set_process_key_event_cb(ime_process_key_event_cb callb } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.process_key_event = callback_func; g_event_callback.process_key_event_user_data = user_data; @@ -831,10 +786,7 @@ EXPORT_API int ime_event_set_display_language_changed_cb(ime_display_language_ch } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.display_language_changed = callback_func; g_event_callback.display_language_changed_user_data = user_data; @@ -852,10 +804,7 @@ EXPORT_API int ime_event_set_rotation_degree_changed_cb(ime_rotation_degree_chan } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.rotation_degree_changed = callback_func; g_event_callback.rotation_degree_changed_user_data = user_data; @@ -873,10 +822,7 @@ EXPORT_API int ime_event_set_accessibility_state_changed_cb(ime_accessibility_st } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.accessibility_state_changed = callback_func; g_event_callback.accessibility_state_changed_user_data = user_data; @@ -894,10 +840,7 @@ EXPORT_API int ime_event_set_option_window_created_cb(ime_option_window_created_ } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.option_window_created = callback_func; g_event_callback.option_window_created_user_data = user_data; @@ -915,10 +858,7 @@ EXPORT_API int ime_event_set_option_window_destroyed_cb(ime_option_window_destro } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.option_window_destroyed = callback_func; g_event_callback.option_window_destroyed_user_data = user_data; @@ -936,10 +876,7 @@ EXPORT_API int ime_event_set_caps_mode_changed_cb(ime_caps_mode_changed_cb callb } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.caps_mode_changed = callback_func; g_event_callback.caps_mode_changed_user_data = user_data; @@ -957,10 +894,7 @@ EXPORT_API int ime_event_set_candidate_show_cb(ime_candidate_show_cb callback_fu } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.candidate_show = callback_func; g_event_callback.candidate_show_user_data = user_data; @@ -978,10 +912,7 @@ EXPORT_API int ime_event_set_candidate_hide_cb(ime_candidate_hide_cb callback_fu } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.candidate_hide = callback_func; g_event_callback.candidate_hide_user_data = user_data; @@ -999,10 +930,7 @@ EXPORT_API int ime_event_set_lookup_table_changed_cb(ime_lookup_table_changed_cb } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.lookup_table_changed = callback_func; g_event_callback.lookup_table_changed_user_data = user_data; @@ -1020,10 +948,7 @@ EXPORT_API int ime_send_key_event(ime_key_code_e keycode, ime_key_mask_e keymask } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; if (forward_key) g_core.forward_key_event(-1, NULL, (sclu32)keycode, (sclu16)keymask); @@ -1048,10 +973,7 @@ EXPORT_API int ime_commit_string(const char *str) } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.commit_string(-1, NULL, str); @@ -1068,10 +990,7 @@ EXPORT_API int ime_show_preedit_string(void) } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.show_preedit_string(-1, NULL); @@ -1088,10 +1007,7 @@ EXPORT_API int ime_hide_preedit_string(void) } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.hide_preedit_string(-1, NULL); @@ -1113,10 +1029,7 @@ EXPORT_API int ime_update_preedit_string(const char *str, Eina_List *attrs) } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; scim::AttributeList attrv; void *data = NULL; @@ -1152,10 +1065,7 @@ EXPORT_API int ime_request_surrounding_text(int maxlen_before, int maxlen_after) } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.get_surrounding_text(NULL, maxlen_before, maxlen_after); @@ -1177,10 +1087,7 @@ EXPORT_API int ime_delete_surrounding_text(int offset, int len) } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.delete_surrounding_text(offset, len); @@ -1202,10 +1109,7 @@ EXPORT_API int ime_get_surrounding_text(int maxlen_before, int maxlen_after, cha } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; int cursor = 0; @@ -1236,10 +1140,7 @@ EXPORT_API int ime_set_selection(int start, int end) } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.set_selection(start, end); @@ -1261,10 +1162,7 @@ EXPORT_API int ime_get_selected_text(char **text) } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.get_selection_text(text); @@ -1277,12 +1175,6 @@ EXPORT_API Evas_Object* ime_get_main_window(void) Evas_Object *win = NULL; - if (!g_running) { - set_last_result(IME_ERROR_NOT_RUNNING); - LOGW("IME_ERROR_NOT_RUNNING"); - return NULL; - } - retVal = _check_privilege(); if (retVal != IME_ERROR_NONE) { LOGE("_check_privilege returned %d.", retVal); @@ -1290,6 +1182,12 @@ EXPORT_API Evas_Object* ime_get_main_window(void) return NULL; } + if (!g_running) { + set_last_result(IME_ERROR_NOT_RUNNING); + LOGW("IME_ERROR_NOT_RUNNING"); + return NULL; + } + win = static_cast(g_core.get_main_window()); if (win) { set_last_result(IME_ERROR_NONE); @@ -1318,10 +1216,7 @@ EXPORT_API int ime_set_size(int portrait_width, int portrait_height, int landsca } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; portrait_size.width = portrait_width; portrait_size.height = portrait_height; @@ -1349,10 +1244,7 @@ EXPORT_API int ime_create_option_window(void) } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; if (g_core.create_option_window()) { return IME_ERROR_NONE; @@ -1382,10 +1274,7 @@ EXPORT_API int ime_destroy_option_window(Evas_Object *window) } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.destroy_option_window(window); @@ -1402,10 +1291,7 @@ EXPORT_API int ime_set_imengine(const char *engine_id) } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.set_keyboard_ise_by_uuid(engine_id); @@ -1422,10 +1308,7 @@ EXPORT_API int ime_flush_imengine() } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.flush_keyboard_ise(); @@ -1442,10 +1325,7 @@ EXPORT_API int ime_reset_imengine() } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.reset_keyboard_ise(); @@ -1462,10 +1342,7 @@ EXPORT_API int ime_update_input_context(unsigned int type, unsigned int value) } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.update_input_context(type, value); @@ -1482,10 +1359,7 @@ EXPORT_API int ime_request_hide() } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.request_ise_hide(); @@ -1497,10 +1371,7 @@ EXPORT_API int ime_initialize() ime_error_e retVal = IME_ERROR_NONE; retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.init(); @@ -1517,10 +1388,7 @@ EXPORT_API int ime_prepare() } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.prepare(); @@ -1534,10 +1402,7 @@ EXPORT_API int ime_finalize() ime_error_e retVal = IME_ERROR_NONE; retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.fini(); @@ -1554,10 +1419,7 @@ EXPORT_API int ime_select_candidate(unsigned int index) } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.select_candidate(index); @@ -1579,10 +1441,7 @@ EXPORT_API int ime_send_private_command(const char *command) } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_core.send_private_command(command); @@ -1598,17 +1457,14 @@ EXPORT_API int ime_commit_content(const char *content, const char *description, return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - g_core.commit_content(content, description, mime_type); return IME_ERROR_NONE; @@ -1623,17 +1479,14 @@ EXPORT_API int ime_context_get_layout(ime_context_h context, Ecore_IMF_Input_Pan return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - *layout = context->layout; return IME_ERROR_NONE; @@ -1648,17 +1501,14 @@ EXPORT_API int ime_context_get_layout_variation(ime_context_h context, ime_layou return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - *layout_variation = static_cast(context->layout_variation); return IME_ERROR_NONE; @@ -1673,17 +1523,14 @@ EXPORT_API int ime_context_get_cursor_position(ime_context_h context, int *curso return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - *cursor_pos = context->cursor_pos; return IME_ERROR_NONE; @@ -1698,17 +1545,14 @@ EXPORT_API int ime_context_get_autocapital_type(ime_context_h context, Ecore_IMF return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - *autocapital_type = context->autocapital_type; return IME_ERROR_NONE; @@ -1723,17 +1567,14 @@ EXPORT_API int ime_context_get_return_key_type(ime_context_h context, Ecore_IMF_ return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - *return_key_type = context->return_key_type; return IME_ERROR_NONE; @@ -1748,17 +1589,14 @@ EXPORT_API int ime_context_get_return_key_state(ime_context_h context, bool *ret return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - *return_key_state = static_cast(context->return_key_disabled); return IME_ERROR_NONE; @@ -1773,17 +1611,14 @@ EXPORT_API int ime_context_get_prediction_mode(ime_context_h context, bool *pred return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - *prediction_mode = static_cast(context->prediction_allow); return IME_ERROR_NONE; @@ -1798,17 +1633,14 @@ EXPORT_API int ime_context_get_password_mode(ime_context_h context, bool *passwo return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - *password_mode = static_cast(context->password_mode); return IME_ERROR_NONE; @@ -1823,17 +1655,14 @@ EXPORT_API int ime_context_get_input_hint(ime_context_h context, Ecore_IMF_Input return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - *input_hint = context->input_hint; return IME_ERROR_NONE; @@ -1848,17 +1677,14 @@ EXPORT_API int ime_context_get_bidi_direction(ime_context_h context, Ecore_IMF_B return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - *bidi = context->bidi_direction; return IME_ERROR_NONE; @@ -1873,17 +1699,14 @@ EXPORT_API int ime_context_get_language(ime_context_h context, Ecore_IMF_Input_P return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - *language = context->language; return IME_ERROR_NONE; @@ -1898,17 +1721,14 @@ EXPORT_API int ime_context_get_caps_mode(ime_context_h context, bool *caps_mode) return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - *caps_mode = static_cast(context->caps_mode); return IME_ERROR_NONE; @@ -1923,17 +1743,14 @@ EXPORT_API int ime_device_info_get_name(ime_device_info_h dev_info, char **dev_n return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - if (!dev_info->dev_name) *dev_name = strdup(""); else @@ -1951,17 +1768,14 @@ EXPORT_API int ime_device_info_get_class(ime_device_info_h dev_info, Ecore_IMF_D return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - *dev_class = dev_info->dev_class; return IME_ERROR_NONE; @@ -1976,17 +1790,14 @@ EXPORT_API int ime_device_info_get_subclass(ime_device_info_h dev_info, Ecore_IM return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - *dev_subclass = dev_info->dev_subclass; return IME_ERROR_NONE; @@ -2002,10 +1813,7 @@ EXPORT_API int ime_event_set_process_input_device_event_cb(ime_process_input_dev } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.process_input_device_event = callback_func; g_event_callback.process_input_device_event_user_data = user_data; @@ -2018,10 +1826,7 @@ EXPORT_API int ime_event_unset_process_input_device_event_cb(void) ime_error_e retVal = IME_ERROR_NONE; retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.process_input_device_event = NULL; g_event_callback.process_input_device_event_user_data = NULL; @@ -2045,17 +1850,14 @@ EXPORT_API int ime_input_device_rotary_get_direction(ime_input_device_event_h ev return IME_ERROR_INVALID_PARAMETER; } + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_OPERATION_FAILED"); return IME_ERROR_OPERATION_FAILED; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - Ecore_Event_Detent_Rotate *rotary_device_event = static_cast(device_event->event_data); if (rotary_device_event) { @@ -2079,10 +1881,7 @@ EXPORT_API int ime_event_set_prediction_hint_set_cb(ime_prediction_hint_set_cb c } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.prediction_hint_set = callback_func; g_event_callback.prediction_hint_set_user_data = user_data; @@ -2100,10 +1899,7 @@ EXPORT_API int ime_event_set_mime_type_set_request_cb(ime_mime_type_set_request_ } retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } + if (retVal != IME_ERROR_NONE) return retVal; g_event_callback.mime_type_set = callback_func; g_event_callback.mime_type_set_user_data = user_data; @@ -2115,17 +1911,14 @@ EXPORT_API int ime_set_floating_mode(bool floating_mode) { ime_error_e retVal = IME_ERROR_NONE; + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - g_core.set_floating_mode(floating_mode); return IME_ERROR_NONE; @@ -2135,17 +1928,14 @@ EXPORT_API int ime_set_floating_drag_start(void) { ime_error_e retVal = IME_ERROR_NONE; + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - g_core.set_floating_drag_enabled(true); return IME_ERROR_NONE; @@ -2155,17 +1945,14 @@ EXPORT_API int ime_set_floating_drag_end(void) { ime_error_e retVal = IME_ERROR_NONE; + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + if (!g_running) { LOGW("IME_ERROR_NOT_RUNNING"); return IME_ERROR_NOT_RUNNING; } - retVal = _check_privilege(); - if (retVal != IME_ERROR_NONE) { - LOGE("_check_privilege returned %d.", retVal); - return retVal; - } - g_core.set_floating_drag_enabled(false); return IME_ERROR_NONE; -- 2.7.4 From deac8cd8306959170385bf39fbc8d0cab02c177a Mon Sep 17 00:00:00 2001 From: InHong Han Date: Thu, 21 Sep 2017 16:12:26 +0900 Subject: [PATCH 04/16] Changed the API description by API review Change-Id: I8040829069651f2021f8deaa3b355763591280af (cherry picked from commit fd4e6af2a24aec75caf7632039e9ee1e7afc67dd) --- include/inputmethod.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/include/inputmethod.h b/include/inputmethod.h index a6dccc3..9adc218 100644 --- a/include/inputmethod.h +++ b/include/inputmethod.h @@ -1667,7 +1667,8 @@ int ime_set_selection(int start, int end); /** * @brief Gets the selected text synchronously. * - * @remarks @a text must be released using free(). + * @details If multi-line text is selected, the result will contain '\n' for each newline character. + * And if the selected text is empty, the result will be an empty string. * * @since_tizen 4.0 * @@ -1675,6 +1676,8 @@ int ime_set_selection(int start, int end); * * @privilege %http://tizen.org/privilege/ime * + * @remarks @a text must be released using free(). + * * @param[out] text The selected text * * @return 0 on success, otherwise a negative error value @@ -1683,7 +1686,7 @@ int ime_set_selection(int start, int end); * @retval #IME_ERROR_PERMISSION_DENIED The application does not have the privilege to call this function * @retval #IME_ERROR_NOT_RUNNING IME main loop isn't started yet */ -EXPORT_API int ime_get_selected_text(char **text); +int ime_get_selected_text(char **text); /** * @brief This API returns the pointer of input panel main window. -- 2.7.4 From df64a1d09165a1133fe6e829a25ab070d5dab6ba Mon Sep 17 00:00:00 2001 From: Ji-hoon Lee Date: Thu, 28 Sep 2017 10:09:52 +0900 Subject: [PATCH 05/16] Update package version to 0.1.13 Change-Id: I2c6110b2784f5e63e1c9c07ac37d4a51caf77b10 --- packaging/capi-ui-inputmethod.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/capi-ui-inputmethod.spec b/packaging/capi-ui-inputmethod.spec index de75a6c..32af274 100644 --- a/packaging/capi-ui-inputmethod.spec +++ b/packaging/capi-ui-inputmethod.spec @@ -1,6 +1,6 @@ Name: capi-ui-inputmethod Summary: Input Method Library -Version: 0.1.12 +Version: 0.1.13 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -- 2.7.4 From 1c7394772e0927926ac95185866059781b0d5ce0 Mon Sep 17 00:00:00 2001 From: "sungwook79.park" Date: Tue, 5 Dec 2017 14:37:18 +0900 Subject: [PATCH 06/16] Add internal API to set whether IME is called from dotnet Change-Id: I73c5a5d0d738ef38643673c996acc7d9b95447f4 Signed-off-by: sungwook79.park --- include/inputmethod_internal.h | 14 ++++++++++++++ src/inputmethod.cpp | 23 +++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/include/inputmethod_internal.h b/include/inputmethod_internal.h index a2a003a..4e9f74d 100644 --- a/include/inputmethod_internal.h +++ b/include/inputmethod_internal.h @@ -323,6 +323,20 @@ int ime_prepare(); */ int ime_finalize(); +/** + * @brief Set flag whether IME is called from dotnet + * + * @since_tizen 4.0 + * + * @privilege %http://tizen.org/privilege/ime + * + * @param[in] set Set with Dotnet mode + * @return 0 on success, otherwise a negative error value + * @retval #IME_ERROR_NONE No error + * @retval #IME_ERROR_PERMISSION_DENIED The application does not have the privilege to call this function + */ +int ime_set_dotnet_flag(bool set); + #ifdef __cplusplus } #endif diff --git a/src/inputmethod.cpp b/src/inputmethod.cpp index 6bb6765..5401456 100644 --- a/src/inputmethod.cpp +++ b/src/inputmethod.cpp @@ -480,6 +480,19 @@ ime_error_e _check_privilege() return ret; } +bool g_from_dotnet = false; +EXPORT_API int ime_set_dotnet_flag(bool set) +{ + ime_error_e retVal = IME_ERROR_NONE; + + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + + g_from_dotnet = set; + + return retVal; +} + EXPORT_API int ime_run(ime_callback_s *basic_cb, void *user_data) { ime_error_e retVal = IME_ERROR_NONE; @@ -510,6 +523,11 @@ EXPORT_API int ime_run(ime_callback_s *basic_cb, void *user_data) g_user_data = user_data; g_running = true; + if (g_from_dotnet) { + LOGD("ime_run is called from dotnet"); + return IME_ERROR_NONE; + } + try { g_core.run(); } catch (...) { @@ -1374,6 +1392,7 @@ EXPORT_API int ime_initialize() if (retVal != IME_ERROR_NONE) return retVal; g_core.init(); + g_running = false; return retVal; } @@ -1405,6 +1424,10 @@ EXPORT_API int ime_finalize() if (retVal != IME_ERROR_NONE) return retVal; g_core.fini(); + g_running = false; + memset(&g_basic_callback, 0, sizeof(ime_callback_s)); + memset(&g_event_callback, 0, sizeof(ime_event_callback_s)); + g_user_data = NULL; return retVal; } -- 2.7.4 From 238e02259b1c2e01c1c6bbb8c649fa78fc46378e Mon Sep 17 00:00:00 2001 From: "sungwook79.park" Date: Thu, 7 Dec 2017 11:21:19 +0900 Subject: [PATCH 07/16] Update package version to 0.1.14 Change-Id: I8852d19269d75a51d71e76c191b2fb708784b1e0 Signed-off-by: sungwook79.park --- packaging/capi-ui-inputmethod.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/capi-ui-inputmethod.spec b/packaging/capi-ui-inputmethod.spec index 32af274..930f66c 100644 --- a/packaging/capi-ui-inputmethod.spec +++ b/packaging/capi-ui-inputmethod.spec @@ -1,6 +1,6 @@ Name: capi-ui-inputmethod Summary: Input Method Library -Version: 0.1.13 +Version: 0.1.14 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -- 2.7.4 From 1c9cd418928e73101b6de50fcf99e32b7f5bdf09 Mon Sep 17 00:00:00 2001 From: Ji-hoon Lee Date: Mon, 11 Dec 2017 20:54:50 +0900 Subject: [PATCH 08/16] Add deferring window creation feature Change-Id: Ie45df0f725fa5fe2b4888725bf8396ca0ee4f0e6 --- include/inputmethod_internal.h | 14 ++++++++++++++ src/inputmethod.cpp | 12 ++++++++++++ 2 files changed, 26 insertions(+) diff --git a/include/inputmethod_internal.h b/include/inputmethod_internal.h index 4e9f74d..711bad3 100644 --- a/include/inputmethod_internal.h +++ b/include/inputmethod_internal.h @@ -337,6 +337,20 @@ int ime_finalize(); */ int ime_set_dotnet_flag(bool set); +/** + * @brief Set flag whether creating IME window should be defered until there is a access request + * + * @since_tizen 5.0 + * + * @privilege %http://tizen.org/privilege/ime + * + * @param[in] flag true if deferring window creation is desired + * @return 0 on success, otherwise a negative error value + * @retval #IME_ERROR_NONE No error + * @retval #IME_ERROR_PERMISSION_DENIED The application does not have the privilege to call this function + */ +int ime_set_window_creation_defer_flag(bool flag); + #ifdef __cplusplus } #endif diff --git a/src/inputmethod.cpp b/src/inputmethod.cpp index 5401456..b260987 100644 --- a/src/inputmethod.cpp +++ b/src/inputmethod.cpp @@ -1980,3 +1980,15 @@ EXPORT_API int ime_set_floating_drag_end(void) return IME_ERROR_NONE; } + +EXPORT_API int ime_set_window_creation_defer_flag(bool flag) +{ + ime_error_e retVal = IME_ERROR_NONE; + + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + + g_core.set_window_creation_defer_flag(flag); + + return IME_ERROR_NONE; +} -- 2.7.4 From ead67bda1aa69a02048b8ba329bf882838b4ce64 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Thu, 26 Oct 2017 17:53:22 +0900 Subject: [PATCH 09/16] Support prediction_hint_data interface Change-Id: Iaa7ba0674cdd6bca1bd16333461fb29404137dca Signed-off-by: Jihoon Kim --- include/inputmethod.h | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ src/inputmethod.cpp | 28 ++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/include/inputmethod.h b/include/inputmethod.h index 9adc218..b621acc 100644 --- a/include/inputmethod.h +++ b/include/inputmethod.h @@ -706,6 +706,28 @@ typedef void (*ime_prediction_hint_set_cb)(const char *prediction_hint, void *us typedef void (*ime_mime_type_set_request_cb)(const char *mime_type, void *user_data); /** + * @brief Called to set the prediction hint key and value to deliver to the input panel. + * + * @since_tizen 5.0 + * + * @privlevel public + * + * @privilege %http://tizen.org/privilege/ime + * + * @remarks @a prediction_hint_data is valid only in the callback. To use outside the callback, make a copy. + * This function is used by the applications to deliver the prediction hint data message to the input panel. + * + * @param[in] key The prediction hint key to be set to the input panel + * @param[in] value The prediction hint value to be set to the input panel + * @param[in] user_data User data to be passed to the callback function + * + * @pre The callback can be registered using ime_event_set_prediction_hint_data_set_cb() function. + * + * @see ime_event_set_prediction_hint_data_set_cb() + */ +typedef void (*ime_prediction_hint_data_set_cb)(const char *key, const char *value, void *user_data); + +/** * @brief The structure type to contain the set of the essential callback functions for IME application lifecycle and appearance. * * @since_tizen @if MOBILE 2.4 @else 3.0 @endif @@ -2358,6 +2380,33 @@ int ime_set_floating_drag_start(void); int ime_set_floating_drag_end(void); /** + * @brief Sets prediction hint data event callback function. + * + * @since_tizen 5.0 + * + * @privlevel public + * + * @privilege %http://tizen.org/privilege/ime + * + * @remarks The ime_prediction_hint_data_set_cb() callback function is called to set the prediction + * hint key and value to deliver to the input panel. + * + * @param[in] callback_func The prediction hint event callback function + * @param[in] user_data User data to be passed to the callback function + * + * @return 0 on success, otherwise a negative error value + * @retval #IME_ERROR_NONE No error + * @retval #IME_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #IME_ERROR_PERMISSION_DENIED The application does not have the privilege to call this function + * + * @post The ime_run() function should be called to start to run IME application's main loop. + * + * @see ime_prediction_hint_data_set_cb() + * @see ime_run() + */ +int ime_event_set_prediction_hint_data_set_cb(ime_prediction_hint_data_set_cb callback_func, void *user_data); + +/** * @} */ diff --git a/src/inputmethod.cpp b/src/inputmethod.cpp index b260987..b86b2bb 100644 --- a/src/inputmethod.cpp +++ b/src/inputmethod.cpp @@ -69,6 +69,7 @@ class CCoreEventCallback : public ISCLCoreEventCallback void on_process_input_device_event(sclu32 &type, sclchar *data, size_t &len, sclu32 *ret); void on_set_prediction_hint(const sclchar *prediction_hint); void on_set_mime_type(const sclchar *mime_type); + void on_set_prediction_hint_data(const sclchar *key, const sclchar *value); }; typedef struct @@ -99,6 +100,7 @@ typedef struct ime_process_input_device_event_cb process_input_device_event; /**< Called when the event is received from the unconventional input devices */ ime_prediction_hint_set_cb prediction_hint_set; ime_mime_type_set_request_cb mime_type_set; + ime_prediction_hint_data_set_cb prediction_hint_data_set; void *focus_in_user_data; void *focus_out_user_data; void *surrounding_text_updated_user_data; @@ -125,6 +127,7 @@ typedef struct void *process_input_device_event_user_data; void *prediction_hint_set_user_data; void *mime_type_set_user_data; + void *prediction_hint_data_set_user_data; } ime_event_callback_s; typedef struct { @@ -459,6 +462,13 @@ void CCoreEventCallback::on_set_mime_type(const sclchar *mime_type) } } +void CCoreEventCallback::on_set_prediction_hint_data(const sclchar *key, const sclchar *value) +{ + if (g_event_callback.prediction_hint_data_set) { + g_event_callback.prediction_hint_data_set(key, value, g_event_callback.prediction_hint_data_set_user_data); + } +} + ime_error_e _check_privilege() { char uid[16]; @@ -1992,3 +2002,21 @@ EXPORT_API int ime_set_window_creation_defer_flag(bool flag) return IME_ERROR_NONE; } + +EXPORT_API int ime_event_set_prediction_hint_data_set_cb(ime_prediction_hint_data_set_cb callback_func, void *user_data) +{ + ime_error_e retVal = IME_ERROR_NONE; + + if (!callback_func) { + LOGW("IME_ERROR_INVALID_PARAMETER"); + return IME_ERROR_INVALID_PARAMETER; + } + + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + + g_event_callback.prediction_hint_data_set = callback_func; + g_event_callback.prediction_hint_data_set_user_data = user_data; + + return IME_ERROR_NONE; +} -- 2.7.4 From e1e8cf8070a37339a2dcaaa8b5a71c058f76c766 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Tue, 19 Dec 2017 13:43:00 +0900 Subject: [PATCH 10/16] Update package version to 0.2.1 Change-Id: I10f9ff520a159929bcebce9ad82abef1470b4a1e Signed-off-by: Jihoon Kim --- packaging/capi-ui-inputmethod.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/capi-ui-inputmethod.spec b/packaging/capi-ui-inputmethod.spec index 930f66c..74e8587 100644 --- a/packaging/capi-ui-inputmethod.spec +++ b/packaging/capi-ui-inputmethod.spec @@ -1,6 +1,6 @@ Name: capi-ui-inputmethod Summary: Input Method Library -Version: 0.1.14 +Version: 0.2.1 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -- 2.7.4 From cca2a82fd6bc737fde7b324f3a422694d2b033ff Mon Sep 17 00:00:00 2001 From: "sungwook79.park" Date: Thu, 26 Apr 2018 16:12:23 +0900 Subject: [PATCH 11/16] Fix issue that detected by static analysis tool Change-Id: Ib95ea84d559e1d79e286f88ca7a875a6ccbfeee1 Signed-off-by: sungwook79.park --- src/privilege_checker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/privilege_checker.cpp b/src/privilege_checker.cpp index 5afdc1a..1e4c0aa 100644 --- a/src/privilege_checker.cpp +++ b/src/privilege_checker.cpp @@ -54,7 +54,7 @@ check_privilege(const char *uid, const char *privilege) fp = fopen(label_path, "r"); if (fp != NULL) { - if (fread(smack_label, 1, sizeof(smack_label), fp) <= 0) + if (fread(smack_label, 1, sizeof(smack_label) - 1, fp) <= 0) LOGW("Error : fread"); fclose(fp); -- 2.7.4 From dd2510bc92b5740eda19acadabf2b75f6e6d5241 Mon Sep 17 00:00:00 2001 From: "sungwook79.park" Date: Thu, 26 Apr 2018 17:29:31 +0900 Subject: [PATCH 12/16] Update package version to 0.2.2 Change-Id: I64658ca1186c170f8c9912d3693986cd1486c8ef Signed-off-by: sungwook79.park --- packaging/capi-ui-inputmethod.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/capi-ui-inputmethod.spec b/packaging/capi-ui-inputmethod.spec index 74e8587..c86d2e5 100644 --- a/packaging/capi-ui-inputmethod.spec +++ b/packaging/capi-ui-inputmethod.spec @@ -1,6 +1,6 @@ Name: capi-ui-inputmethod Summary: Input Method Library -Version: 0.2.1 +Version: 0.2.2 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -- 2.7.4 From 38f7ceced3d44ad0bebd74fa9ed632f6a649f001 Mon Sep 17 00:00:00 2001 From: Ji-hoon Lee Date: Mon, 4 Jun 2018 19:48:05 +0900 Subject: [PATCH 13/16] Add optimization_hint for IME to enhance reactivity Change-Id: I706890f4a77a943153e1c08f92fa3e8822badd6c --- include/inputmethod_internal.h | 45 ++++++++++++++++++++++++++++++++++++++++++ src/inputmethod.cpp | 31 +++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/include/inputmethod_internal.h b/include/inputmethod_internal.h index 711bad3..7ff13ad 100644 --- a/include/inputmethod_internal.h +++ b/include/inputmethod_internal.h @@ -29,6 +29,16 @@ extern "C" { #endif +/** + * @brief Enumeration for input method optimization hint + * + * @since_tizen 5.0 + */ +typedef enum { + IME_OPTIMIZATION_HINT_NONE = 0, /**< No hint provided */ + IME_OPTIMIZATION_HINT_SHOW_PREPARE, /**< This IME is going to be displayed on screen soon */ +} ime_optimization_hint_e; + typedef struct _ime_context *ime_context_h; /** @@ -80,6 +90,17 @@ typedef void (*ime_candidate_hide_cb)(int context_id, void *user_data); typedef void (*ime_lookup_table_changed_cb)(Eina_List *list, void *user_data); /** + * @brief Called when a optimization hint value is set + * + * @since_tizen 5.0 + * + * @privilege %http://tizen.org/privilege/ime + * + * @param[in] hint The hint value used for optimization + */ +typedef void (*ime_optimization_hint_set_cb)(ime_optimization_hint_e hint, void *user_data); + +/** * @brief Sets @c ime_caps_mode_changed_cb event callback function. * * @since_tizen 3.0 @@ -351,6 +372,30 @@ int ime_set_dotnet_flag(bool set); */ int ime_set_window_creation_defer_flag(bool flag); +/** + * @brief Sets @c ime_optimization_hint_set_cb event callback function. + * + * @since_tizen 5.0 + * + * @privilege %http://tizen.org/privilege/ime + * + * @remarks The ime_optimization_hint_set_cb() callback function is called when an optimization hint is set + * + * @param[in] callback_func @c ime_optimization_hint_set_cb event callback function + * @param[in] user_data User data to be passed to the callback function + * + * @return 0 on success, otherwise a negative error value + * @retval #IME_ERROR_NONE No error + * @retval #IME_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #IME_ERROR_PERMISSION_DENIED The application does not have the privilege to call this function + * @retval #IME_ERROR_OPERATION_FAILED Operation failed + * + * @post The ime_run() function should be called to start to run IME application's main loop. + * + * @see ime_run() + */ +int ime_event_set_optimization_hint_set_cb(ime_optimization_hint_set_cb callback_func, void *user_data); + #ifdef __cplusplus } #endif diff --git a/src/inputmethod.cpp b/src/inputmethod.cpp index b86b2bb..7380b09 100644 --- a/src/inputmethod.cpp +++ b/src/inputmethod.cpp @@ -70,6 +70,7 @@ class CCoreEventCallback : public ISCLCoreEventCallback void on_set_prediction_hint(const sclchar *prediction_hint); void on_set_mime_type(const sclchar *mime_type); void on_set_prediction_hint_data(const sclchar *key, const sclchar *value); + void on_set_optimization_hint(sclu32 hint); }; typedef struct @@ -101,6 +102,7 @@ typedef struct ime_prediction_hint_set_cb prediction_hint_set; ime_mime_type_set_request_cb mime_type_set; ime_prediction_hint_data_set_cb prediction_hint_data_set; + ime_optimization_hint_set_cb optimization_hint_set; void *focus_in_user_data; void *focus_out_user_data; void *surrounding_text_updated_user_data; @@ -128,6 +130,7 @@ typedef struct void *prediction_hint_set_user_data; void *mime_type_set_user_data; void *prediction_hint_data_set_user_data; + void *optimization_hint_set_user_data; } ime_event_callback_s; typedef struct { @@ -469,6 +472,13 @@ void CCoreEventCallback::on_set_prediction_hint_data(const sclchar *key, const s } } +void CCoreEventCallback::on_set_optimization_hint(sclu32 hint) +{ + if (g_event_callback.optimization_hint_set) { + g_event_callback.optimization_hint_set((ime_optimization_hint_e)hint, g_event_callback.optimization_hint_set_user_data); + } +} + ime_error_e _check_privilege() { char uid[16]; @@ -2020,3 +2030,24 @@ EXPORT_API int ime_event_set_prediction_hint_data_set_cb(ime_prediction_hint_dat return IME_ERROR_NONE; } + +EXPORT_API int ime_event_set_optimization_hint_set_cb(ime_optimization_hint_set_cb callback_func, void *user_data) +{ + LOGD(""); + ime_error_e retVal = IME_ERROR_NONE; + + if (!callback_func) { + LOGW("IME_ERROR_INVALID_PARAMETER"); + return IME_ERROR_INVALID_PARAMETER; + } + + LOGD(""); + retVal = _check_privilege(); + if (retVal != IME_ERROR_NONE) return retVal; + + LOGD(""); + g_event_callback.optimization_hint_set = callback_func; + g_event_callback.optimization_hint_set_user_data = user_data; + + return IME_ERROR_NONE; +} -- 2.7.4 From 0e52f90db70237a8e8bc876ebb6e4cffb92b7c72 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Thu, 21 Jun 2018 08:43:13 +0900 Subject: [PATCH 14/16] Update package version to 0.2.3 Change-Id: I1aec8e34a492540fa7c8cc12bb87828f9826a913 Signed-off-by: Jihoon Kim --- packaging/capi-ui-inputmethod.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/capi-ui-inputmethod.spec b/packaging/capi-ui-inputmethod.spec index c86d2e5..94f82a3 100644 --- a/packaging/capi-ui-inputmethod.spec +++ b/packaging/capi-ui-inputmethod.spec @@ -1,6 +1,6 @@ Name: capi-ui-inputmethod Summary: Input Method Library -Version: 0.2.2 +Version: 0.2.3 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -- 2.7.4 From 1805365b519a0e4fba421f614c5eadf3f60c1edf Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Fri, 13 Jul 2018 16:12:58 +0900 Subject: [PATCH 15/16] Expose ime_request_hide() API as public API Change-Id: Idf4fcc013cfa98cfaa77f3bb84c4fd4cb2643c6f Signed-off-by: Jihoon Kim --- include/inputmethod.h | 16 ++++++++++++++++ include/inputmethod_internal.h | 14 -------------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/include/inputmethod.h b/include/inputmethod.h index b621acc..e9fa057 100644 --- a/include/inputmethod.h +++ b/include/inputmethod.h @@ -2407,6 +2407,22 @@ int ime_set_floating_drag_end(void); int ime_event_set_prediction_hint_data_set_cb(ime_prediction_hint_data_set_cb callback_func, void *user_data); /** + * @brief Sends the request to hide IME. + * + * @since_tizen 5.0 + * + * @privlevel public + * + * @privilege %http://tizen.org/privilege/ime + * + * @return 0 on success, otherwise a negative error value + * @retval #IME_ERROR_NONE No error + * @retval #IME_ERROR_PERMISSION_DENIED The application does not have the privilege to call this function + * @retval #IME_ERROR_NOT_RUNNING IME main loop isn't started yet + */ +int ime_request_hide(); + +/** * @} */ diff --git a/include/inputmethod_internal.h b/include/inputmethod_internal.h index 7ff13ad..e21b103 100644 --- a/include/inputmethod_internal.h +++ b/include/inputmethod_internal.h @@ -282,20 +282,6 @@ int ime_select_candidate(unsigned int index); int ime_update_input_context(unsigned int type, unsigned int value); /** - * @brief Send the request to hide IME. - * - * @since_tizen 3.0 - * - * @privilege %http://tizen.org/privilege/ime - * - * @return 0 on success, otherwise a negative error value - * @retval #IME_ERROR_NONE No error - * @retval #IME_ERROR_PERMISSION_DENIED The application does not have the privilege to call this function - * @retval #IME_ERROR_NOT_RUNNING IME main loop isn't started yet - */ -int ime_request_hide(); - -/** * @brief Explicitly request IME to initialize * * @details When using ime_run API, the initialize / prepare / finalize procedures -- 2.7.4 From c1fb98d9d1eeb0791f8f74ebb2d5e7de68a7d198 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Mon, 16 Jul 2018 19:20:02 +0900 Subject: [PATCH 16/16] Update package version to 0.2.4 Change-Id: I77121a9db5d5ed51b1876cfd34deabb0f059d485 Signed-off-by: Jihoon Kim --- packaging/capi-ui-inputmethod.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/capi-ui-inputmethod.spec b/packaging/capi-ui-inputmethod.spec index 94f82a3..988afc6 100644 --- a/packaging/capi-ui-inputmethod.spec +++ b/packaging/capi-ui-inputmethod.spec @@ -1,6 +1,6 @@ Name: capi-ui-inputmethod Summary: Input Method Library -Version: 0.2.3 +Version: 0.2.4 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -- 2.7.4