From: Jihoon Kim Date: Fri, 2 Dec 2016 10:10:10 +0000 (+0900) Subject: Fix issue radio button is not toggle when selecting other IME X-Git-Tag: submit/tizen_3.0/20161202.104030~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2f4c34f32dc68e7ec8831461a902fc2589b75842;p=platform%2Fcore%2Fuifw%2Finputmethod-setting.git Fix issue radio button is not toggle when selecting other IME Change-Id: If709fbb92dbe3057f28e818692d7d31a73aaf45d Signed-off-by: Jihoon Kim --- diff --git a/im_setting_list/input_method_setting_list_popup_view.cpp b/im_setting_list/input_method_setting_list_popup_view.cpp index fc25320..bf52044 100644 --- a/im_setting_list/input_method_setting_list_popup_view.cpp +++ b/im_setting_list/input_method_setting_list_popup_view.cpp @@ -46,6 +46,8 @@ class ime_info_compare } }; +static int selected_index = 0; + static void im_setting_list_sort_ime_info(std::vector &preinstall, std::vector &user) { std::sort(preinstall.begin(), preinstall.end(), ime_info_compare()); @@ -123,14 +125,13 @@ static void im_setting_list_update_radio_state(Elm_Object_Item *item, Evas_Objec if (item && obj) { elm_genlist_item_selected_set(item, EINA_FALSE); - /* Update check button */ - Evas_Object *radio = elm_object_item_part_content_get(item, "elm.icon.right"); + /* Update radio button */ + Evas_Object *radio = elm_object_item_part_content_get(item, "elm.swallow.end"); if (radio == NULL) { radio = elm_object_item_part_content_get(item, "elm.icon"); } evas_object_data_set(radio, "parent_genlist", obj); elm_radio_value_set(radio, index); - isf_control_set_active_ime(g_active_ime_info_list[index].appid); } } @@ -143,6 +144,32 @@ void im_setting_list_update_window_selector(void *data) im_setting_list_update_window(ad); } +static Eina_Bool _ime_select_idler_cb(void *data) +{ + appdata *ad = (appdata *)data; + if (!ad) return ECORE_CALLBACK_CANCEL; + + LOGD("set active IME\n"); + isf_control_set_active_ime(g_active_ime_info_list[selected_index].appid); + + LOGD("update window selector\n"); + im_setting_list_update_window_selector(ad); + + LOGD("delete popup\n"); + + if (ad->popup) { + evas_object_del(ad->popup); + } + ad->popup = NULL; + + if (ad->app_type == APP_TYPE_NORMAL) { + if (ad->naviframe) + elm_naviframe_item_pop(ad->naviframe); + } + + return ECORE_CALLBACK_CANCEL; +} + static void im_setting_list_ime_sel_cb(void *data, Evas_Object *obj, void *event_info) { sel_cb_data *cb_data = (sel_cb_data *)data; @@ -154,6 +181,7 @@ static void im_setting_list_ime_sel_cb(void *data, Evas_Object *obj, void *event return; int index = cb_data->index; + selected_index = index; Elm_Object_Item *item = (Elm_Object_Item *)event_info; if (!item) { @@ -162,17 +190,8 @@ static void im_setting_list_ime_sel_cb(void *data, Evas_Object *obj, void *event } im_setting_list_update_radio_state(item, obj, index); - im_setting_list_update_window_selector(ad); - - if (ad->popup) { - evas_object_del(ad->popup); - } - ad->popup = NULL; - - delete cb_data; - if (ad->app_type == APP_TYPE_NORMAL) - elm_naviframe_item_pop(ad->naviframe); + ecore_idler_add(_ime_select_idler_cb, ad); } static Evas_Object *im_setting_list_genlist_create(Evas_Object* parent, Evas_Object* conform) @@ -220,6 +239,7 @@ static Evas_Object *im_setting_list_genlist_item_icon_get(void *data, Evas_Objec Evas_Object *radio = elm_radio_add(obj); elm_object_style_set(radio, "list"); elm_radio_state_value_set(radio, index); + evas_object_propagate_events_set(radio, EINA_FALSE); elm_radio_group_add(radio, group_radio); evas_object_show(radio); evas_object_smart_callback_add(radio, "changed", im_setting_list_radio_change_cb, (void *) (index)); diff --git a/im_setting_selector/input_method_setting_selector_ui.cpp b/im_setting_selector/input_method_setting_selector_ui.cpp index 6681c8d..8eb8208 100755 --- a/im_setting_selector/input_method_setting_selector_ui.cpp +++ b/im_setting_selector/input_method_setting_selector_ui.cpp @@ -49,6 +49,8 @@ class ime_info_compare } }; +static int selected_index = 0; + static void im_setting_selector_text_domain_set(void) { bindtextdomain(IM_SETTING_SELECTOR_PACKAGE, IM_SETTING_SELECTOR_LOCALE_DIR); @@ -215,10 +217,25 @@ static void im_setting_selector_update_radio_state(Elm_Object_Item *item, Evas_O } evas_object_data_set(radio, "parent_genlist", obj); elm_radio_value_set(radio, index); - isf_control_set_active_ime(g_ime_info_list[index].appid); } } +static Eina_Bool _ime_select_idler_cb(void *data) +{ + appdata *ad = (appdata *)data; + if (!ad) return ECORE_CALLBACK_CANCEL; + + LOGD("set active IME\n"); + isf_control_set_active_ime(g_ime_info_list[selected_index].appid); + + if (ad->naviframe) + elm_naviframe_item_pop(ad->naviframe); + + ui_app_exit(); + + return ECORE_CALLBACK_CANCEL; +} + static void im_setting_selector_ime_sel_cb(void *data, Evas_Object *obj, void *event_info) { sel_cb_data *cb_data = (sel_cb_data *)data; @@ -232,11 +249,12 @@ static void im_setting_selector_ime_sel_cb(void *data, Evas_Object *obj, void *e Elm_Object_Item *item = (Elm_Object_Item *)event_info; if (!item) return; + + selected_index = index; im_setting_selector_update_radio_state(item, obj, index); + ecore_idler_add(_ime_select_idler_cb, ad); delete cb_data; - elm_naviframe_item_pop(ad->naviframe); - ui_app_exit(); } static Evas_Object *im_setting_selector_genlist_create(Evas_Object* parent, Evas_Object* conform) @@ -282,6 +300,7 @@ static Evas_Object *im_setting_selector_genlist_item_icon_get(void *data, Evas_O Evas_Object *radio = elm_radio_add(obj); elm_object_style_set(radio, "list"); elm_radio_state_value_set(radio, index); + evas_object_propagate_events_set(radio, EINA_FALSE); elm_radio_group_add(radio, group_radio); evas_object_show(radio); evas_object_smart_callback_add(radio, "changed", im_setting_selector_radio_change_cb, (void *) (index));