static cbhm_h cbhm_handle;
#endif
-static CCoreEventCallback g_core_event_callback;
int g_imdata_state = 0;
extern emoticon_group_t current_emoticon_group;
}
}
-void CCoreEventCallback::on_init()
-{
- LOGD("CCoreEventCallback::init()\n");
- ise_create();
-
-#ifdef HAVE_CBHM
- cbhm_open_service(&cbhm_handle);
-#endif
-}
-
-void CCoreEventCallback::on_exit()
-{
- ::ise_hide();
- ise_destroy();
-
-#ifdef HAVE_CBHM
- cbhm_close_service(cbhm_handle);
- cbhm_handle = NULL;
-#endif
-}
-
-void CCoreEventCallback::on_attach_input_context(sclint ic, const sclchar *ic_uuid)
-{
- ise_attach_input_context(ic);
-}
-
-void CCoreEventCallback::on_detach_input_context(sclint ic, const sclchar *ic_uuid)
-{
- ise_detach_input_context(ic);
-}
-
-void CCoreEventCallback::on_focus_in(sclint ic, const sclchar *ic_uuid)
-{
- LOGD("Enter\n");
- ise_focus_in(ic);
-}
-
-void CCoreEventCallback::on_focus_out(sclint ic, const sclchar *ic_uuid)
-{
- LOGD("Enter\n");
- ise_focus_out(ic);
- g_imdata_state = 0;
-}
-
-void CCoreEventCallback::on_ise_show(sclint ic, const sclint degree, Ise_Context &context)
-{
- LOGD("Enter\n");
- //g_ise_common->set_keyboard_ise_by_uuid(KEYBD_ISE_UUID);
-
- /* Don't update screen until all the information is correctly set */
- if (g_ui)
- g_ui->set_update_pending(TRUE);
-
- ise_reset_context(); // reset ISE
-
- /*if (context.language == ECORE_IMF_INPUT_PANEL_LANG_ALPHABET) {
- ise_explictly_set_language(PRIMARY_LATIN_LANGUAGE_INDEX);
- }*/
-
- _context_layout = context.layout;
- _context_layout_variation = context.layout_variation;
- ise_set_layout(context.layout, context.layout_variation);
-
- ise_set_return_key_type(context.return_key_type);
- ise_set_return_key_disable(context.return_key_disabled);
-
- ise_set_caps_mode(context.caps_mode);
- ise_update_cursor_position(context.cursor_pos);
-
- /* Do not follow the application's rotation angle if we are already in visible state,
- since in that case we will receive the angle through ROTATION_CHANGE_REQUEST message */
- if (!(g_keyboard_state.visible_state)) {
- ise_set_screen_rotation(degree);
- } else {
- LOGD("Skipping rotation angle , %d\n", degree);
- }
-
- ::ise_show(ic);
-
- /* Now we update the whole screen */
- if (g_ui)
- g_ui->set_update_pending(FALSE);
-}
-
-void CCoreEventCallback::on_ise_hide(sclint ic, const sclchar *ic_uuid)
-{
- LOGD("Enter\n");
- ::ise_hide();
-}
-
-void CCoreEventCallback::on_reset_input_context(sclint ic, const sclchar *uuid)
-{
- ise_reset_input_context();
-}
-
-void CCoreEventCallback::on_set_display_language(const sclchar *language)
-{
- setlocale(LC_ALL, language);
- bindtextdomain(PACKAGE, LOCALEDIR);
- textdomain(PACKAGE);
-
- LOGD("Language : %s\n", (language ? language : "NULL"));
-}
-
-void CCoreEventCallback::on_set_accessibility_state(const sclboolean state)
-{
- LOGD("state=%d\n", state);
- ise_set_accessibility_state(state);
-}
-
-void CCoreEventCallback::on_set_rotation_degree(sclint degree)
-{
- ise_set_screen_rotation(degree);
-
- LOGD("degree=%d\n", degree);
- if (is_emoticon_show()) {
- ise_destroy_emoticon_layout();
- }
- if (g_keyboard_state.layout == ISE_LAYOUT_STYLE_VOICE) {
- ise_hide_stt_mode();
- }
- if (g_keyboard_state.layout == ISE_LAYOUT_STYLE_EMOTICON) {
- ise_show_emoticon_layout(current_emoticon_group, degree, false, ime_get_main_window());
- } else if (g_ui) {
- const sclchar *input_mode = g_ui->get_input_mode();
- if (input_mode) {
- if (!(strcmp(input_mode, "EMOTICON_LAYOUT")))
- ise_show_emoticon_layout(current_emoticon_group, degree, false, ime_get_main_window());
- else if (!(strcmp(input_mode, "STT_3X4")))
- ise_show_stt_mode(NATIVE_WINDOW_CAST(ime_get_main_window()));
- }
- }
-}
-
-void CCoreEventCallback::on_set_layout(sclu32 layout)
-{
- LOGD("layout=%d\n", layout);
- /* Check if the layoutIdx is in the valid range */
- if (layout < ISE_LAYOUT_STYLE_MAX) {
- if (g_keyboard_state.layout != layout) {
- g_keyboard_state.need_reset = TRUE;
- }
- g_keyboard_state.layout = layout;
- _context_layout = layout;
- _context_layout_variation = 0;
- }
- if (g_keyboard_state.visible_state)
- ise_show(g_keyboard_state.ic);
-}
-
-void CCoreEventCallback::on_set_caps_mode(sclu32 mode)
-{
- ise_set_caps_mode(mode);
-}
-
-void CCoreEventCallback::on_update_cursor_position(sclint ic, const sclchar *ic_uuid, sclint cursor_pos)
-{
- ise_update_cursor_position(cursor_pos);
-}
-
-void CCoreEventCallback::on_update_surrounding_text(sclint ic, const sclchar *text, sclint cursor)
-{
- LOGD("surrounding text:%s, cursor=%d\n", text, cursor);
- ime_delete_surrounding_text(-cursor, strlen(text));
-}
-
-void CCoreEventCallback::on_set_return_key_type(sclu32 type)
-{
- LOGD("Enter\n");
- ise_set_return_key_type(type);
-
- if (g_keyboard_state.visible_state)
- ise_show(g_keyboard_state.ic);
-}
-
-void CCoreEventCallback::on_set_return_key_disable(sclu32 disabled)
-{
- ise_set_return_key_disable(disabled);
-}
-
-void CCoreEventCallback::on_set_imdata(sclchar *buf, sclu32 len)
-{
- LOGD("Enter\n");
- g_imdata_state = 0;
- size_t _len = len;
- set_ise_imdata(buf, _len);
-}
-
-void CCoreEventCallback::on_get_language_locale(sclint ic, sclchar **locale)
-{
- ise_get_language_locale(locale);
-}
-
-void CCoreEventCallback::on_update_lookup_table(SclCandidateTable &table)
-{
- LOGD("Enter\n");
- g_softcandidate_string = table.candidate;
- ise_update_table(g_softcandidate_string);
-}
-
-void CCoreEventCallback::on_create_option_window(sclwindow window, SCLOptionWindowType type)
-{
- if (window) {
- option_window_created(NATIVE_WINDOW_CAST(window), type);
- }
-}
-
-void CCoreEventCallback::on_destroy_option_window(sclwindow window)
-{
- option_window_destroyed(NATIVE_WINDOW_CAST(window));
-}
-
-void CCoreEventCallback::on_check_option_window_availability(sclboolean *ret)
-{
- if (ret)
- *ret = true; // Tizen keyboard (ise-default) has the option window, but 3rd party IME may not. This interface is for it.
-}
-
-/**
-* This is only for the TV profile to handle remote control button
-* It will be called in the TV profile by ISF logic.
-*/
-void CCoreEventCallback::on_process_key_event(scim::KeyEvent &key, sclu32 *ret)
-{
- LOGD("Enter\n");
- if (g_keyboard_state.visible_state)
- ise_process_key_event(key, *ret);
- else
- ret = FALSE;
-}
-
-void CCoreEventCallback::on_candidate_show(sclint ic, const sclchar *ic_uuid)
-{
- LOGD("Enter\n");
- delete_softcandidate_hide_timer();
-
- create_softcandidate();
-
- g_softcandidate_show = true;
- if (g_candidate) {
- g_candidate->show();
- if (g_ui) {
- g_ui->set_custom_starting_coordinates(0, g_candidate->get_height());
- SclSize size_portrait = g_ui->get_input_mode_size(g_ui->get_input_mode(), DISPLAYMODE_PORTRAIT);
- SclSize size_landscape = g_ui->get_input_mode_size(g_ui->get_input_mode(), DISPLAYMODE_LANDSCAPE);
- size_portrait.height += g_candidate->get_height();
- size_landscape.height += g_candidate->get_height();
- ime_set_size(size_portrait.width, size_portrait.height, size_landscape.width, size_landscape.height);
-
- LOGD("Showing candidate , position [%d %d] size [%d %d] [%d %d]", 0, g_candidate->get_height(),
- size_portrait.width, size_portrait.height, size_landscape.width, size_landscape.height);
- }
- }
-}
-
-void CCoreEventCallback::on_candidate_hide(sclint ic, const sclchar *ic_uuid)
-{
- LOGD("Enter\n");
-
- if (!g_candidate || !g_softcandidate_show) {
- LOGD("No candidate\n");
- return;
- }
-
- add_softcandidate_hide_timer();
- if (g_ui) {
- g_ui->set_custom_starting_coordinates(0, 0);
- SclSize size_portrait = g_ui->get_input_mode_size(g_ui->get_input_mode(), DISPLAYMODE_PORTRAIT);
- SclSize size_landscape = g_ui->get_input_mode_size(g_ui->get_input_mode(), DISPLAYMODE_LANDSCAPE);
- ime_set_size(size_portrait.width, size_portrait.height, size_landscape.width, size_landscape.height);
-
- LOGD("Hiding candidate , position [%d %d] size [%d %d] [%d %d]", 0, 0,
- size_portrait.width, size_portrait.height, size_landscape.width, size_landscape.height);
- }
-}
-
/**
* Send the given string to input framework
*/
} else if (strncmp(event_desc.key_value, delete_all, strlen(delete_all)) == 0) {
ime_delete_surrounding_text((INT_MAX / 2) * -1, INT_MAX);
} else if (strncmp(event_desc.key_value, hide_panel, strlen(hide_panel)) == 0) {
- ::ise_hide();
+ ise_hide();
ime_request_hide();
} else if (event_desc.key_event) {
ise_send_event(event_desc.key_event, KEY_MASK_NULL);
}
void
-ise_attach_input_context(int ic)
-{
- LOGD("attaching, ic : %x , %x , g_ic : %x , %x, g_focused_ic : %x , %x\n", ic, check_ic_temporary(ic),
- g_keyboard_state.ic, check_ic_temporary(g_keyboard_state.ic),
- g_keyboard_state.focused_ic, check_ic_temporary(g_keyboard_state.focused_ic));
- ise_focus_in(ic);
-}
-
-void
-ise_detach_input_context(int ic)
-{
- ise_focus_out(ic);
-}
-
-void
ise_show(int ic)
{
sclboolean reset_inputmode = FALSE;
static void ime_app_create_cb(void *user_data)
{
- g_core_event_callback.on_init();
+ ise_create();
+
+#ifdef HAVE_CBHM
+ cbhm_open_service(&cbhm_handle);
+#endif
}
static void ime_app_exit_cb(void *user_data)
{
- g_core_event_callback.on_exit();
+ ise_hide();
+ ise_destroy();
+
+#ifdef HAVE_CBHM
+ cbhm_close_service(cbhm_handle);
+ cbhm_handle = NULL;
+#endif
}
static void ime_app_show_cb(int ic, ime_context_h ime_ctx, void *user_data)
g_ic = ic;
- g_core_event_callback.on_ise_show(ic, 0, iseContext);
+ //g_ise_common->set_keyboard_ise_by_uuid(KEYBD_ISE_UUID);
+
+ /* Don't update screen until all the information is correctly set */
+ if (g_ui)
+ g_ui->set_update_pending(TRUE);
+
+ ise_reset_context(); // reset ISE
+
+ /*if (context.language == ECORE_IMF_INPUT_PANEL_LANG_ALPHABET) {
+ ise_explictly_set_language(PRIMARY_LATIN_LANGUAGE_INDEX);
+ }*/
+
+ _context_layout = iseContext.layout;
+ _context_layout_variation = iseContext.layout_variation;
+ ise_set_layout(iseContext.layout, iseContext.layout_variation);
+
+ ise_set_return_key_type(iseContext.return_key_type);
+ ise_set_return_key_disable(iseContext.return_key_disabled);
+
+ ise_set_caps_mode(iseContext.caps_mode);
+ ise_update_cursor_position(iseContext.cursor_pos);
+
+ /* Do not follow the application's rotation angle if we are already in visible state,
+ since in that case we will receive the angle through ROTATION_CHANGE_REQUEST message */
+ int degree = 0;
+
+ if (!(g_keyboard_state.visible_state)) {
+ ise_set_screen_rotation(degree);
+ } else {
+ LOGD("Skipping rotation angle , %d\n", degree);
+ }
+
+ ise_show(ic);
+
+ /* Now we update the whole screen */
+ if (g_ui)
+ g_ui->set_update_pending(FALSE);
}
static void ime_app_hide_cb(int ic, void *user_data)
{
- g_core_event_callback.on_ise_hide(ic, NULL);
+ LOGD("Enter\n");
+ ise_hide();
}
static void ime_app_return_key_type_set_cb(Ecore_IMF_Input_Panel_Return_Key_Type type, void *user_data)
{
LOGD("return key type : %d\n", type);
- g_core_event_callback.on_set_return_key_type(type);
+ ise_set_return_key_type(type);
+
+ if (g_keyboard_state.visible_state)
+ ise_show(g_keyboard_state.ic);
}
static void ime_app_return_key_state_set_cb(bool disabled, void *user_data)
{
LOGD("return key disabled : %d\n", disabled);
- g_core_event_callback.on_set_return_key_disable(disabled);
+ ise_set_return_key_disable(disabled);
}
static void ime_app_input_context_reset_cb(void *user_data)
static void ime_app_cursor_position_updated_cb(int cursor_pos, void *user_data)
{
LOGD("cursor position : %d\n", cursor_pos);
- g_core_event_callback.on_update_cursor_position(g_ic, "", cursor_pos);
+ ise_update_cursor_position(cursor_pos);
}
static void ime_app_language_requested_cb(void *user_data, char **lang_code)
static void ime_app_surrounding_text_updated_cb(int context_id, const char *text, int cursor_pos, void *user_data)
{
- LOGD("cursor position : %d\n", cursor_pos);
- g_core_event_callback.on_update_surrounding_text(context_id, text, cursor_pos);
+ LOGD("surrounding text:%s, cursor=%d\n", text, cursor_pos);
+ ime_delete_surrounding_text(-cursor_pos, strlen(text));
}
static void ime_app_focus_in_cb(int context_id, void *user_data)
{
- g_core_event_callback.on_focus_in(context_id, NULL);
+ LOGD("Enter\n");
+ ise_focus_in(context_id);
}
static void ime_app_focus_out_cb(int context_id, void *user_data)
{
- g_core_event_callback.on_focus_out(context_id, NULL);
+ LOGD("Enter\n");
+ ise_focus_out(context_id);
+ g_imdata_state = 0;
}
static void ime_app_layout_set_cb(Ecore_IMF_Input_Panel_Layout layout, void *user_data)
{
- g_core_event_callback.on_set_layout(layout);
+ LOGD("layout=%d\n", layout);
+ /* Check if the layoutIdx is in the valid range */
+ if ((ISE_LAYOUT)layout < ISE_LAYOUT_STYLE_MAX) {
+ if (g_keyboard_state.layout != layout) {
+ g_keyboard_state.need_reset = TRUE;
+ }
+ g_keyboard_state.layout = layout;
+ _context_layout = layout;
+ _context_layout_variation = 0;
+ }
+ if (g_keyboard_state.visible_state)
+ ise_show(g_keyboard_state.ic);
}
static void ime_app_option_window_created_cb(Evas_Object *window, ime_option_window_type_e type, void *user_data)
{
- g_core_event_callback.on_create_option_window(SCL_WINDOW_CAST(window), (SCLOptionWindowType)type);
+ if (window) {
+ option_window_created(window, (SCLOptionWindowType)type);
+ }
}
static void ime_app_option_window_destroyed_cb(Evas_Object *window, void *user_data)
{
- g_core_event_callback.on_destroy_option_window(SCL_WINDOW_CAST(window));
+ option_window_destroyed(window);
}
static void ime_app_rotation_degree_changed_cb(int degree, void *user_data)
{
- g_core_event_callback.on_set_rotation_degree(degree);
+ ise_set_screen_rotation(degree);
+
+ LOGD("degree=%d\n", degree);
+ if (is_emoticon_show()) {
+ ise_destroy_emoticon_layout();
+ }
+ if (g_keyboard_state.layout == ISE_LAYOUT_STYLE_VOICE) {
+ ise_hide_stt_mode();
+ }
+ if (g_keyboard_state.layout == ISE_LAYOUT_STYLE_EMOTICON) {
+ ise_show_emoticon_layout(current_emoticon_group, degree, false, ime_get_main_window());
+ } else if (g_ui) {
+ const sclchar *input_mode = g_ui->get_input_mode();
+ if (input_mode) {
+ if (!(strcmp(input_mode, "EMOTICON_LAYOUT")))
+ ise_show_emoticon_layout(current_emoticon_group, degree, false, ime_get_main_window());
+ else if (!(strcmp(input_mode, "STT_3X4")))
+ ise_show_stt_mode(NATIVE_WINDOW_CAST(ime_get_main_window()));
+ }
+ }
}
static void ime_app_accessibility_state_changed_cb(bool state, void *user_data)
{
- g_core_event_callback.on_set_accessibility_state(state);
+ LOGD("state=%d\n", state);
+ ise_set_accessibility_state(state);
}
static void ime_app_imdata_set_cb(void *data, unsigned int data_length, void *user_data)
{
- g_core_event_callback.on_set_imdata((sclchar *)data, data_length);
+ LOGD("Enter\n");
+ g_imdata_state = 0;
+ size_t _len = data_length;
+ set_ise_imdata((sclchar *)data, _len);
}
static bool ime_app_process_key_event_cb(ime_key_code_e keycode, ime_key_mask_e keymask, ime_device_info_h dev_info, void *user_data)
{
scim::KeyEvent key(keycode, keymask);
unsigned int ret;
- g_core_event_callback.on_process_key_event(key, &ret);
+ if (g_keyboard_state.visible_state)
+ ise_process_key_event(key, ret);
+ else
+ ret = FALSE;
return ret;
}
static void ime_app_caps_mode_changed_cb(int mode, void *user_data)
{
- g_core_event_callback.on_set_caps_mode(mode);
+ ise_set_caps_mode(mode);
}
static void ime_app_candidate_show_cb(int context_id, void *user_data)
{
- g_core_event_callback.on_candidate_show(context_id, "");
+ LOGD("Enter\n");
+ delete_softcandidate_hide_timer();
+
+ create_softcandidate();
+
+ g_softcandidate_show = true;
+ if (g_candidate) {
+ g_candidate->show();
+ if (g_ui) {
+ g_ui->set_custom_starting_coordinates(0, g_candidate->get_height());
+ SclSize size_portrait = g_ui->get_input_mode_size(g_ui->get_input_mode(), DISPLAYMODE_PORTRAIT);
+ SclSize size_landscape = g_ui->get_input_mode_size(g_ui->get_input_mode(), DISPLAYMODE_LANDSCAPE);
+ size_portrait.height += g_candidate->get_height();
+ size_landscape.height += g_candidate->get_height();
+ ime_set_size(size_portrait.width, size_portrait.height, size_landscape.width, size_landscape.height);
+
+ LOGD("Showing candidate , position [%d %d] size [%d %d] [%d %d]", 0, g_candidate->get_height(),
+ size_portrait.width, size_portrait.height, size_landscape.width, size_landscape.height);
+ }
+ }
}
static void ime_app_candidate_hide_cb(int context_id, void *user_data)
{
- g_core_event_callback.on_candidate_hide(context_id, "");
+ LOGD("Enter\n");
+
+ if (!g_candidate || !g_softcandidate_show) {
+ LOGD("No candidate\n");
+ return;
+ }
+
+ add_softcandidate_hide_timer();
+ if (g_ui) {
+ g_ui->set_custom_starting_coordinates(0, 0);
+ SclSize size_portrait = g_ui->get_input_mode_size(g_ui->get_input_mode(), DISPLAYMODE_PORTRAIT);
+ SclSize size_landscape = g_ui->get_input_mode_size(g_ui->get_input_mode(), DISPLAYMODE_LANDSCAPE);
+ ime_set_size(size_portrait.width, size_portrait.height, size_landscape.width, size_landscape.height);
+
+ LOGD("Hiding candidate , position [%d %d] size [%d %d] [%d %d]", 0, 0,
+ size_portrait.width, size_portrait.height, size_landscape.width, size_landscape.height);
+ }
}
static void ime_app_lookup_table_changed_cb(Eina_List *list, void *user_data)