-#if ENABLE(TIZEN_ISF_PORT)
-static void imfInputPanelStateEventCb(void* data, Ecore_IMF_Context* ctx, int state)
-{
- Ewk_View_Smart_Data* smartData = static_cast<Ewk_View_Smart_Data*>(data);
- EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
-
- if (state == ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
- evas_object_smart_callback_call(smartData->self, "editorclient,ime,closed", 0);
- LOG(ISF, "[SIGNAL] editorclient,ime,closed\n");
- } else if (state == ECORE_IMF_INPUT_PANEL_STATE_SHOW) {
- evas_object_smart_callback_call(smartData->self, "editorclient,ime,opened", 0);
- LOG(ISF, "[SIGNAL] editorclient,ime,opened\n");
- }
-}
-
-static void imfInputPanelGeometryEventCb(void* data, Ecore_IMF_Context* ctx, int value)
-{
- Ewk_View_Smart_Data* smartData = static_cast<Ewk_View_Smart_Data*>(data);
- EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
-
- Eina_Rectangle rect;
- ecore_imf_context_input_panel_geometry_get(priv->imfContext, &rect.x, &rect.y, &rect.w, &rect.h);
- evas_object_smart_callback_call(smartData->self, "inputmethod,changed", &rect);
- LOG(ISF, "%s : [SIGNAL] inputmethod,changed (%d,%d,%d,%d)\n", __func__, rect.x, rect.y, rect.w, rect.h);
-}
-
-static void imfCandidatePanelStateEventCb(void* data, Ecore_IMF_Context* ctx, int state)
-{
- Ewk_View_Smart_Data* smartData = static_cast<Ewk_View_Smart_Data*>(data);
- EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
-
- if (state == ECORE_IMF_CANDIDATE_PANEL_SHOW)
- evas_object_smart_callback_call(smartData->self, "editorclient,candidate,opened", 0);
- else
- evas_object_smart_callback_call(smartData->self, "editorclient,candidate,closed", 0);
-}
-
-static void imfCandidatePanelGeometryEventCb(void* data, Ecore_IMF_Context* ctx, int value)
-{
- Ewk_View_Smart_Data* smartData = static_cast<Ewk_View_Smart_Data*>(data);
- EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
-
- Eina_Rectangle rect;
- ecore_imf_context_candidate_panel_geometry_get(priv->imfContext, &rect.x, &rect.y, &rect.w, &rect.h);
- evas_object_smart_callback_call(smartData->self, "editorclient,candidate,changed", &rect);
-}
-
-static Eina_Bool imfRetrieveSurroundingCb(void* data, Ecore_IMF_Context* context, char** text, int* offset)
-{
- Ewk_View_Smart_Data* smartData = static_cast<Ewk_View_Smart_Data*>(data);
- EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv, false);
-
- if (!priv->pageClient->page()->focusedFrame() || (!text && !offset))
- return false;
-
- String surroundingText;
- int cursorOffset;
- priv->pageClient->page()->getSurroundingTextAndCursorOffset(surroundingText, cursorOffset);
-
- if (text) {
- CString utf8Text(surroundingText.utf8());
- size_t length = utf8Text.length();
-
- *text = static_cast<char*>(malloc((length + 1) * sizeof(char)));
- if (!(*text))
- return false;
-
- if (length)
- strncpy(*text, utf8Text.data(), length);
- (*text)[length] = 0;
- }
-
- if (offset)
- *offset = cursorOffset;
-
- return true;
-}
-
-static void imfPreeditChangedCb(void* data, Ecore_IMF_Context* context, void* eventInfo)
-{
- Ewk_View_Smart_Data* smartData = static_cast<Ewk_View_Smart_Data*>(data);
- EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
-
- priv->pageClient->imContextPreeditChanged(context);
-}
-
-static void imfEventCommittedCb(void* data, Ecore_IMF_Context* context, void* eventInfo)
-{
- Ewk_View_Smart_Data* smartData = static_cast<Ewk_View_Smart_Data*>(data);
- EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
-
- priv->pageClient->imContextCommitted(context, static_cast<char*>(eventInfo));
-}
-
-static void imfContextDeleteSurroundingCb(void* data, Ecore_IMF_Context* context, void* eventInfo)
-{
- Ewk_View_Smart_Data* smartData = static_cast<Ewk_View_Smart_Data*>(data);
- EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
-
- Ecore_IMF_Event_Delete_Surrounding* event = static_cast<Ecore_IMF_Event_Delete_Surrounding*>(eventInfo);
- if (!event)
- return;
-
- priv->pageClient->page()->deleteSurroundingText(event->offset, event->n_chars);
-}
-
-Ecore_IMF_Context* ewk_view_imf_context_get(Evas_Object* ewkView)
-{
- EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, 0);
- EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv, 0);
-
- return priv->imfContext;
-}
-
-Ecore_IMF_Context* ewk_view_imf_context_set(Evas_Object* ewkView, Ecore_IMF_Input_Panel_Layout layout)
-{
- EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, 0);
- EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv, 0);
-
- Ecore_IMF_Context* imfContext;
- Eina_List* iterator;
- void* data;
-
- EINA_LIST_FOREACH(priv->imfContextList, iterator, data) {
- imfContext = static_cast<Ecore_IMF_Context*>(data);
- if (ecore_imf_context_input_panel_layout_get(imfContext) == layout) {
- priv->imfContext = imfContext;
- return imfContext;
- }
- }
-
- imfContext = ecore_imf_context_add(ecore_imf_context_default_id_get());
- if (!imfContext)
- return 0;
-
- ecore_imf_context_input_panel_enabled_set(imfContext, false);
- ecore_imf_context_input_panel_event_callback_add(imfContext, ECORE_IMF_INPUT_PANEL_STATE_EVENT, imfInputPanelStateEventCb, smartData);
- ecore_imf_context_input_panel_event_callback_add(imfContext, ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, imfInputPanelGeometryEventCb, smartData);
- ecore_imf_context_input_panel_event_callback_add(imfContext, ECORE_IMF_CANDIDATE_PANEL_STATE_EVENT, imfCandidatePanelStateEventCb, smartData);
- ecore_imf_context_input_panel_event_callback_add(imfContext, ECORE_IMF_CANDIDATE_PANEL_GEOMETRY_EVENT, imfCandidatePanelGeometryEventCb, smartData);
- ecore_imf_context_retrieve_surrounding_callback_set(imfContext, imfRetrieveSurroundingCb, smartData); // Support for Auto Capitalization
- ecore_imf_context_event_callback_add(imfContext, ECORE_IMF_CALLBACK_PREEDIT_CHANGED, imfPreeditChangedCb, smartData);
- ecore_imf_context_event_callback_add(imfContext, ECORE_IMF_CALLBACK_COMMIT, imfEventCommittedCb, smartData);
- ecore_imf_context_event_callback_add(imfContext, ECORE_IMF_CALLBACK_DELETE_SURROUNDING, imfContextDeleteSurroundingCb, smartData); //Support for Automatic Full Stop
- ecore_imf_context_input_panel_layout_set(imfContext, layout);
-
- priv->imfContextList = eina_list_append(priv->imfContextList, imfContext);
- priv->imfContext = imfContext;
-
- return imfContext;
-}
-
-void ewk_view_imf_context_reset(Evas_Object* ewkView)
-{
- EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
- EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
-
- if (!priv->imfContext)
- return;
-
- ecore_imf_context_reset(priv->imfContext);
-
- if (ecore_imf_context_input_panel_state_get(priv->imfContext) == ECORE_IMF_INPUT_PANEL_STATE_HIDE)
- priv->imfContext = 0;
-}
-
-void ewk_view_imf_context_hide(Evas_Object* ewkView)
-{
- EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
- EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
-
- if (!priv->imfContext)
- return;
-
- if (ecore_imf_context_input_panel_state_get(priv->imfContext) != ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
- ecore_imf_context_reset(priv->imfContext);
- ecore_imf_context_input_panel_hide(priv->imfContext);
- ecore_imf_context_focus_out(priv->imfContext);
- }
-
- priv->imfContext = 0;
-}
-
-static void _ewk_view_imf_context_destroy(Ewk_View_Private_Data* priv)
-{
- if (!priv->imfContextList)
- return;
-
- void* item;
- EINA_LIST_FREE(priv->imfContextList, item) {
- Ecore_IMF_Context* imfContext = static_cast<Ecore_IMF_Context*>(item);
- if (!imfContext)
- continue;
-
- ecore_imf_context_input_panel_event_callback_del(imfContext, ECORE_IMF_INPUT_PANEL_STATE_EVENT, imfInputPanelStateEventCb);
- ecore_imf_context_input_panel_event_callback_del(imfContext, ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, imfInputPanelGeometryEventCb);
- ecore_imf_context_input_panel_event_callback_del(imfContext, ECORE_IMF_CANDIDATE_PANEL_STATE_EVENT, imfCandidatePanelStateEventCb);
- ecore_imf_context_input_panel_event_callback_del(imfContext, ECORE_IMF_CANDIDATE_PANEL_GEOMETRY_EVENT, imfCandidatePanelGeometryEventCb);
- ecore_imf_context_event_callback_del(imfContext, ECORE_IMF_CALLBACK_PREEDIT_CHANGED, imfPreeditChangedCb);
- ecore_imf_context_event_callback_del(imfContext, ECORE_IMF_CALLBACK_COMMIT, imfEventCommittedCb);
- ecore_imf_context_event_callback_del(imfContext, ECORE_IMF_CALLBACK_DELETE_SURROUNDING, imfContextDeleteSurroundingCb);
- ecore_imf_context_del(imfContext);
- }
-
- priv->imfContextList = 0;
- priv->imfContext = 0;
-}
-
-void ewk_view_imf_context_destroy(Evas_Object* ewkView)
-{
- EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
- EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
-
- _ewk_view_imf_context_destroy(priv);
-}
-#endif
-