Fix issue radio button is not toggle when selecting other IME 02/101902/1
authorJihoon Kim <jihoon48.kim@samsung.com>
Fri, 2 Dec 2016 10:10:10 +0000 (19:10 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Fri, 2 Dec 2016 10:10:10 +0000 (19:10 +0900)
Change-Id: If709fbb92dbe3057f28e818692d7d31a73aaf45d
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
im_setting_list/input_method_setting_list_popup_view.cpp
im_setting_selector/input_method_setting_selector_ui.cpp

index fc253202e58ae7fa4b2a69db60081cb4dbb0fc95..bf5204474d607efe342629bf1d64a3fa9544a002 100644 (file)
@@ -46,6 +46,8 @@ class ime_info_compare
     }
 };
 
+static int selected_index = 0;
+
 static void im_setting_list_sort_ime_info(std::vector<ime_info_s> &preinstall, std::vector<ime_info_s> &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));
index 6681c8d493d841c13c80db571bdc49610c220f13..8eb8208a0c6a777e743015b6f3aa1f93ac6755bf 100755 (executable)
@@ -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));