Add optimization_hint for IME to enhance reactivity 13/180813/2
authorJi-hoon Lee <dalton.lee@samsung.com>
Mon, 4 Jun 2018 10:48:05 +0000 (19:48 +0900)
committerJi-hoon Lee <dalton.lee@samsung.com>
Tue, 5 Jun 2018 05:17:33 +0000 (05:17 +0000)
Change-Id: I706890f4a77a943153e1c08f92fa3e8822badd6c

include/inputmethod_internal.h
src/inputmethod.cpp

index 711bad3e216a05142470484f71a875e9b4d5b3c9..7ff13ada744a1a77d26458a9709ed7d11c8bb4a3 100644 (file)
 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
index b86b2bb4b37c14981d00637650474208fd030127..7380b09b16b75007c290057c2fc6c99077b2d99f 100644 (file)
@@ -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;
+}