From: Ji-hoon Lee Date: Mon, 4 Jun 2018 10:48:05 +0000 (+0900) Subject: Add optimization_hint for IME to enhance reactivity X-Git-Tag: submit/tizen/20180620.234751~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=38f7ceced3d44ad0bebd74fa9ed632f6a649f001;p=platform%2Fcore%2Fapi%2Finputmethod.git Add optimization_hint for IME to enhance reactivity Change-Id: I706890f4a77a943153e1c08f92fa3e8822badd6c --- 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; /** @@ -79,6 +89,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. * @@ -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; +}