2 * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "input_method_setting_list.h"
20 #include <efl_extension.h>
23 #include "isf_control.h"
25 #define IM_SETTING_LIST_PACKAGE PACKAGE
26 #define IM_SETTING_LIST_LOCALE_DIR ("/usr/apps/"PACKAGE_NAME"/res/locale")
27 #define IM_SETTING_LIST_TITLE dgettext(PACKAGE, "IDS_IME_BODY_KEYBOARD")
28 #define IM_SETTING_LIST_KEYBOARD_HEADER dgettext(PACKAGE, "IDS_ST_HEADER_KEYBOARDS")
29 #define IM_SETTING_LIST_POPUP_TITLE dgettext(PACKAGE, "IDS_ST_BODY_ATTENTION")
30 #define IM_SETTING_LIST_POPUP_CANCEL dgettext(PACKAGE, "IDS_COM_SK_CANCEL_ABB")
31 #define IM_SETTING_LIST_POPUP_ENABLE dgettext(PACKAGE, "IDS_ST_BUTTON_ENABLE")
32 #define IM_SETTING_LIST_VIRTUAL_KEYBOARD dgettext(PACKAGE, "IDS_ST_HEADER_VIRTUAL_KEYBOARD")
33 #define IM_SETTING_LIST_DEFAULT_KEYBOARD dgettext(PACKAGE, "IDS_ST_HEADER_DEFAULT_KEYBOARD_ABB")
34 #define IM_SETTING_LIST_KEYBOARD_SETTING dgettext(PACKAGE, "IDS_IME_HEADER_KEYBOARD_SETTINGS_ABB")
35 #define IM_SETTING_LIST_POPUP_TEXT dgettext(PACKAGE, "IDS_ST_POP_THIS_INPUT_METHOD_MAY_BE_ABLE_TO_COLLECT_ALL_THE"\
36 "_TEXT_YOU_TYPE_INCLUDING_PERSONAL_DATA_LIKE_PASSWORDS_AND"\
37 "_CREDIT_CARD_NUMBERS_MSG")
40 typedef struct list_item_text_s
46 typedef struct popup_cb_data_s
52 typedef struct gen_item_data_s
54 Elm_Object_Item *gen_item;
58 class ime_info_compare
61 bool operator()(const ime_info_s &first, const ime_info_s &sec)
63 return (strcasecmp(first.label, sec.label) < 0);
67 typedef void (*popup_ok_cb)(void *data, Evas_Object *obj, void *event_info);
68 typedef void (*popup_cancel_cb)(void *data, Evas_Object *obj, void *event_info);
70 static std::vector<ime_info_s> g_ime_info_list;
71 static Elm_Genlist_Item_Class *itc_im_list_keyboard_list = NULL;
72 static Elm_Genlist_Item_Class *itc_im_list_group = NULL;
73 static Elm_Genlist_Item_Class *itc_im_list_item = NULL;
74 static Elm_Genlist_Item_Class *itc_im_list_item_one_line = NULL;
75 static int g_active_ime_index = -1;
76 static list_item_text item_text[2];
77 static std::vector<gen_item_data> g_gen_item_data;
79 void im_setting_list_update_window(void *data);
81 static void im_setting_list_text_domain_set(void)
83 bindtextdomain(IM_SETTING_LIST_PACKAGE, IM_SETTING_LIST_LOCALE_DIR);
84 textdomain(IM_SETTING_LIST_PACKAGE);
88 im_setting_list_main_window_create(const char *name, int app_type)
90 Evas_Object *eo = NULL;
91 eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
93 elm_win_title_set(eo, name);
94 elm_win_borderless_set(eo, EINA_TRUE);
95 elm_win_alpha_set(eo, EINA_FALSE);
96 elm_win_conformant_set(eo, EINA_TRUE);
97 elm_win_autodel_set(eo, EINA_TRUE);
99 if (app_type != APP_TYPE_SETTING_NO_ROTATION) {
100 int rots[4] = {0, 90, 180, 270};
101 elm_win_wm_rotation_available_rotations_set(eo, rots, 4);
107 static Evas_Object* im_setting_list_bg_create(Evas_Object *parent)
110 if (parent == NULL) return NULL;
111 bg = elm_bg_add(parent);
112 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
113 elm_win_resize_object_add(parent, bg);
114 evas_object_show(bg);
118 static void im_setting_list_sort_ime_info(std::vector<ime_info_s> &preinstall, std::vector<ime_info_s> &user)
120 std::sort(preinstall.begin(), preinstall.end(), ime_info_compare());
121 std::sort(user.begin(), user.end(), ime_info_compare());
122 for(unsigned int i=0; i<preinstall.size(); ++i)
124 g_ime_info_list.push_back(preinstall[i]);
126 for(unsigned int i=0; i<user.size(); ++i)
128 g_ime_info_list.push_back(user[i]);
132 static void im_setting_list_load_ime_info(void)
134 std::vector<ime_info_s> ime_info_list_preinstall;
135 std::vector<ime_info_s> ime_info_list_user;
136 ime_info_s *info = NULL;
137 g_ime_info_list.clear();
138 int cnt = isf_control_get_all_ime_info(&info);
141 for(int i=0; i<cnt; ++i)
143 SECURE_LOGD("%s %s %d %d %d", info[i].appid, info[i].label, info[i].is_enabled, info[i].is_preinstalled, info[i].has_option);
144 if (info[i].is_preinstalled)
146 ime_info_list_preinstall.push_back(info[i]);
150 ime_info_list_user.push_back(info[i]);
157 LOGD("isf_control_get_all_ime_info failed\n");
159 im_setting_list_sort_ime_info(ime_info_list_preinstall, ime_info_list_user);
162 static int im_setting_list_get_active_ime_index(void)
164 char *active_ime_appid = NULL;
165 isf_control_get_active_ime(&active_ime_appid);
166 std::vector<ime_info_s>::iterator iter = g_ime_info_list.begin();
167 std::vector<ime_info_s>::iterator end = g_ime_info_list.end();
168 for (; iter != end; ++iter)
170 if (active_ime_appid && (!strcmp(active_ime_appid, iter->appid)))
175 if (active_ime_appid)
177 free(active_ime_appid);
179 return (iter-g_ime_info_list.begin());
183 im_setting_list_app_control_reply_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *user_data)
185 if (!request || !reply) {
186 LOGD("app_control handle is null");
189 if (result == APP_CONTROL_RESULT_SUCCEEDED) {
190 im_setting_list_update_window(user_data);
194 static void im_setting_list_show_ime_selector(void *data)
197 appdata *ad = (appdata *)data;
198 app_control_h app_control;
199 const char *app_id = "org.tizen.inputmethod-setting-selector";
204 ret = app_control_create (&app_control);
205 if (ret != APP_CONTROL_ERROR_NONE) {
206 LOGD("app_control_create returned %d", ret);
210 ret = app_control_set_operation (app_control, APP_CONTROL_OPERATION_DEFAULT);
211 if (ret != APP_CONTROL_ERROR_NONE) {
212 LOGD("app_control_set_operation returned %d", ret);
213 app_control_destroy(app_control);
217 ret = app_control_set_app_id (app_control, app_id);
218 if (ret != APP_CONTROL_ERROR_NONE) {
219 LOGD("app_control_set_app_id returned %d", ret);
220 app_control_destroy(app_control);
224 if (ad->app_type == APP_TYPE_SETTING_NO_ROTATION)
225 app_control_add_extra_data(app_control, "caller", "settings_no_rotation");
227 app_control_add_extra_data(app_control, "caller", "settings");
229 ret = app_control_send_launch_request(app_control, im_setting_list_app_control_reply_cb, data);
230 if (ret != APP_CONTROL_ERROR_NONE) {
231 LOGD("app_control_send_launch_request returned %d, %s\n", ret, get_error_message(ret));
232 app_control_destroy(app_control);
235 app_control_destroy(app_control);
239 im_setting_list_check_popup_ok_cb(void *data, Evas_Object *obj, void *event_info)
241 popup_cb_data *cb_data = (popup_cb_data *)data;
242 int index = (int)reinterpret_cast<long>(cb_data->data);
243 if (index < 0 || index >= (int)g_ime_info_list.size()) {
244 LOGW("Wrong value. index : %d, g_ime_info_list.size() : %d\n", index, g_ime_info_list.size());
247 Eina_Bool state = EINA_FALSE;
248 state = g_gen_item_data[index].chk_status;
249 isf_control_set_enable_ime(g_ime_info_list[index].appid, state);
250 evas_object_del(cb_data->popup);
255 im_setting_list_check_popup_cancel_cb(void *data, Evas_Object *obj, void *event_info)
257 popup_cb_data *cb_data = (popup_cb_data *)data;
258 int index = (int)reinterpret_cast<long>(cb_data->data);
259 if (index < 0 || index >= (int)g_ime_info_list.size()) {
260 LOGW("Wrong value. index : %d, g_ime_info_list.size() : %d\n", index, g_ime_info_list.size());
264 Eina_Bool state = g_gen_item_data[index].chk_status;
265 isf_control_set_enable_ime(g_ime_info_list[index].appid, !state);
266 g_gen_item_data[index].chk_status = !state;
267 elm_genlist_item_update(g_gen_item_data[index].gen_item);
268 evas_object_del(cb_data->popup);
272 static void _popup_back_cb(void *data, Evas_Object *obj, void *event_info)
274 eext_object_event_callback_del(obj, EEXT_CALLBACK_BACK, _popup_back_cb);
275 im_setting_list_check_popup_cancel_cb(data, NULL, NULL);
278 static void im_setting_list_show_popup(void *data, Evas_Object *obj, popup_ok_cb ime_setting_list_ok_callback, popup_cancel_cb ime_setting_list_cancel_callback)
280 int index = (int)reinterpret_cast<long>(data);
281 if (index < 0 || index >= (int)g_ime_info_list.size()) {
282 LOGW("Wrong value. index : %d, g_ime_info_list.size() : %d\n", index, g_ime_info_list.size());
286 Evas_Object *top_widget = elm_object_top_widget_get(obj);
287 Evas_Object *popup = elm_popup_add(top_widget);
288 elm_popup_align_set (popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
289 elm_object_part_text_set(popup, "title,text", IM_SETTING_LIST_POPUP_TITLE);
291 char chFormatMsg[255] = {'\0'};
292 char chPopupMsg[255] = {'\0'};
293 snprintf(chFormatMsg, sizeof(chFormatMsg), "%s", IM_SETTING_LIST_POPUP_TEXT);
294 snprintf(chPopupMsg, sizeof(chPopupMsg), chFormatMsg, g_ime_info_list[index].label);
295 elm_object_text_set(popup, chPopupMsg);
297 popup_cb_data *cb_data = new popup_cb_data;
298 cb_data->popup = popup;
299 cb_data->data = data;
301 Evas_Object *btn_cancel = elm_button_add(popup);
302 elm_object_text_set(btn_cancel, IM_SETTING_LIST_POPUP_CANCEL);
303 elm_object_part_content_set(popup, "button1", btn_cancel);
304 evas_object_smart_callback_add(btn_cancel, "clicked", ime_setting_list_cancel_callback, cb_data);
306 Evas_Object *btn_ok = elm_button_add(popup);
307 elm_object_text_set(btn_ok, IM_SETTING_LIST_POPUP_ENABLE);
308 elm_object_part_content_set(popup, "button2", btn_ok);
309 evas_object_smart_callback_add(btn_ok, "clicked", ime_setting_list_ok_callback, cb_data);
311 eext_object_event_callback_add (popup, EEXT_CALLBACK_BACK, _popup_back_cb, cb_data);
312 evas_object_show(popup);
315 static void im_setting_list_check_button_change_cb(void *data, Evas_Object *obj, void *event_info)
317 /*save the checked ime*/
318 int index = (int)reinterpret_cast<long>(data);
319 if (index < 0 || index >= (int)g_ime_info_list.size()) {
320 LOGW("Wrong value. index : %d, g_ime_info_list.size() : %d\n", index, g_ime_info_list.size());
324 Eina_Bool state = g_gen_item_data[index].chk_status;
328 isf_control_set_enable_ime(g_ime_info_list[index].appid, state);
332 im_setting_list_show_popup(data, obj, im_setting_list_check_popup_ok_cb, im_setting_list_check_popup_cancel_cb);
337 im_setting_list_popup_ok_cb(void *data, Evas_Object *obj, void *event_info)
339 popup_cb_data *cb_data = (popup_cb_data *)data;
340 int index = (int)reinterpret_cast<long>(cb_data->data);
341 if (index < 0 || index >= (int)g_ime_info_list.size()) {
342 LOGW("Wrong value. index : %d, g_ime_info_list.size() : %d\n", index, g_ime_info_list.size());
346 Eina_Bool state = g_gen_item_data[index].chk_status;
347 g_gen_item_data[index].chk_status = !state;
348 isf_control_set_enable_ime(g_ime_info_list[index].appid, !state);
349 elm_genlist_item_update(g_gen_item_data[index].gen_item);
350 evas_object_del(cb_data->popup);
355 im_setting_list_popup_cancel_cb(void *data, Evas_Object *obj, void *event_info)
357 popup_cb_data *cb_data = (popup_cb_data *)data;
358 evas_object_del(cb_data->popup);
362 static void im_setting_list_item_sel_cb(void *data, Evas_Object *obj, void *event_info)
364 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
365 elm_genlist_item_selected_set (item, EINA_FALSE);
367 int index = (int)reinterpret_cast<long>(data);
368 if (index < 0 || index >= (int)g_ime_info_list.size()) {
369 LOGW("Wrong value. index : %d, g_ime_info_list.size() : %d\n", index, g_ime_info_list.size());
373 if (g_ime_info_list[index].is_preinstalled || (index == g_active_ime_index))
378 Evas_Object *ck = elm_object_item_part_content_get (item, "elm.icon.right");
380 ck = elm_object_item_part_content_get (item, "elm.icon");
382 Eina_Bool state = g_gen_item_data[index].chk_status;
386 g_gen_item_data[index].chk_status = !state;
387 isf_control_set_enable_ime(g_ime_info_list[index].appid, !state);
388 elm_genlist_item_update(item);
392 im_setting_list_show_popup(data, obj, im_setting_list_popup_ok_cb, im_setting_list_popup_cancel_cb);
396 static void im_setting_list_set_default_keyboard_item_sel_cb(void *data, Evas_Object *obj, void *event_info)
398 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
399 elm_genlist_item_selected_set (item, EINA_FALSE);
400 im_setting_list_show_ime_selector(data);
403 static void im_setting_list_keyboard_setting_item_sel_cb(void *data, Evas_Object *obj, void *event_info)
405 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
406 elm_genlist_item_selected_set (item, EINA_FALSE);
407 isf_control_open_ime_option_window();
410 static Evas_Object *im_setting_list_conform_create(Evas_Object *parentWin)
412 Evas_Object *conform = elm_conformant_add(parentWin);
413 elm_win_indicator_mode_set(parentWin, ELM_WIN_INDICATOR_SHOW);
414 elm_win_indicator_opacity_set(parentWin, ELM_WIN_INDICATOR_OPAQUE);
415 evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
416 evas_object_size_hint_align_set(conform, EVAS_HINT_FILL, EVAS_HINT_FILL);
417 elm_win_resize_object_add(parentWin, conform);
418 evas_object_show(conform);
422 static Evas_Object *im_setting_list_naviframe_create(Evas_Object* parent)
424 Evas_Object *naviframe = elm_naviframe_add(parent);
425 elm_naviframe_prev_btn_auto_pushed_set(naviframe, EINA_TRUE);
426 eext_object_event_callback_add(naviframe, EEXT_CALLBACK_BACK, eext_naviframe_back_cb, NULL);
427 evas_object_size_hint_weight_set(naviframe, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
428 evas_object_size_hint_align_set(naviframe, EVAS_HINT_FILL, EVAS_HINT_FILL);
429 elm_object_part_content_set(parent, "elm.swallow.content", naviframe);
430 evas_object_show(naviframe);
434 static Evas_Object *im_setting_list_genlist_create(Evas_Object* parent)
436 Evas_Object *genlist = elm_genlist_add(parent);
437 evas_object_show(genlist);
441 static char *im_setting_list_genlist_group_label_get(void *data, Evas_Object *obj, const char *part)
443 char *text = (char *)data;
445 if (!strcmp(part, "elm.text.main")) {
447 if (!strcmp(part, "elm.text")) {
454 static char *im_setting_list_genlist_keyboard_list_item_label_get(void *data, Evas_Object *obj, const char *part)
456 int index = (int)reinterpret_cast<long>(data);
457 if (index < 0 || index >= (int)g_ime_info_list.size()) {
458 LOGW("Wrong value. index : %d, g_ime_info_list.size() : %d\n", index, g_ime_info_list.size());
462 if (!strcmp(part, "elm.text.main.left.top") ||
463 !strcmp(part, "elm.text.main.left") ||
464 !strcmp(part, "elm.text.main") ||
465 !strcmp(part, "elm.text") ||
466 !strcmp(part, "elm.text.1")) {
467 return strdup(g_ime_info_list[index].label);
472 static Evas_Object *im_setting_list_genlist_keyboard_list_item_icon_get(void *data, Evas_Object *obj, const char *part)
474 int index = (int)reinterpret_cast<long>(data);
475 if (index < 0 || index >= (int)g_ime_info_list.size()) {
476 LOGW("Wrong value. index : %d, g_ime_info_list.size() : %d\n", index, g_ime_info_list.size());
480 if (!strcmp(part, "elm.icon.right") || !strcmp(part, "elm.icon")) {
481 Evas_Object *ck = elm_check_add(obj);
482 elm_object_style_set (ck, "on&off");
483 elm_object_disabled_set(ck, g_ime_info_list[index].is_preinstalled || (index == g_active_ime_index));
484 elm_check_state_set(ck, g_gen_item_data[index].chk_status);
485 evas_object_propagate_events_set (ck, EINA_FALSE);
486 evas_object_size_hint_align_set(ck, EVAS_HINT_FILL, EVAS_HINT_FILL);
487 evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
488 elm_check_state_pointer_set(ck, (Eina_Bool *)(&(g_gen_item_data[index].chk_status)));
489 evas_object_pass_events_set(ck, 1);
490 evas_object_smart_callback_add(ck, "changed", im_setting_list_check_button_change_cb, (void *)(index));
491 evas_object_show(ck);
497 static char *im_setting_list_genlist_item_label_get(void *data, Evas_Object *obj, const char *part)
499 list_item_text *item_text = (list_item_text *)data;
500 if (!strcmp(part, "elm.text.main.left.top") ||
501 !strcmp(part, "elm.text.main.left") ||
502 !strcmp(part, "elm.text.main") ||
503 !strcmp(part, "elm.text") ||
504 !strcmp(part, "elm.text.1")) {
505 return strdup(item_text->main_text);
508 if (!strcmp(part, "elm.text.sub.left.bottom") ||
509 !strcmp(part, "elm.text.multiline") ||
510 !strcmp(part, "elm.text.2")) {
511 return strdup(item_text->sub_text);
516 static char *im_setting_list_genlist_item_one_line_label_get(void *data, Evas_Object *obj, const char *part)
518 list_item_text *item_text = (list_item_text *)data;
519 if (!strcmp(part, "elm.text.main.left.top") ||
520 !strcmp(part, "elm.text.main.left") ||
521 !strcmp(part, "elm.text.main") ||
522 !strcmp(part, "elm.text") ||
523 !strcmp(part, "elm.text.1")) {
524 return strdup(item_text->main_text);
529 static void im_setting_list_genlist_item_class_create(int app_type)
531 if (NULL == itc_im_list_group)
533 itc_im_list_group = elm_genlist_item_class_new();
534 if (itc_im_list_group)
536 itc_im_list_group->item_style = "groupindex";
537 itc_im_list_group->func.text_get = im_setting_list_genlist_group_label_get;
538 itc_im_list_group->func.content_get = NULL;
539 itc_im_list_group->func.state_get = NULL;
540 itc_im_list_group->func.del = NULL;
544 if (NULL == itc_im_list_keyboard_list)
546 itc_im_list_keyboard_list = elm_genlist_item_class_new();
547 if (itc_im_list_keyboard_list)
550 itc_im_list_keyboard_list->item_style = "1line";
552 itc_im_list_keyboard_list->item_style = "1text.1icon.1";
554 itc_im_list_keyboard_list->func.text_get = im_setting_list_genlist_keyboard_list_item_label_get;
555 itc_im_list_keyboard_list->func.content_get = im_setting_list_genlist_keyboard_list_item_icon_get;
556 itc_im_list_keyboard_list->func.state_get = NULL;
557 itc_im_list_keyboard_list->func.del = NULL;
561 if (app_type == APP_TYPE_SETTING || app_type == APP_TYPE_SETTING_NO_ROTATION)
563 if (NULL == itc_im_list_item)
565 itc_im_list_item = elm_genlist_item_class_new();
566 if (itc_im_list_item)
569 itc_im_list_item->item_style = "2line.top";
571 itc_im_list_item->item_style = "2text";
573 itc_im_list_item->func.text_get = im_setting_list_genlist_item_label_get;
574 itc_im_list_item->func.content_get = NULL;
575 itc_im_list_item->func.state_get = NULL;
576 itc_im_list_item->func.del = NULL;
580 if (NULL == itc_im_list_item_one_line)
582 itc_im_list_item_one_line = elm_genlist_item_class_new();
583 if (itc_im_list_item_one_line)
586 itc_im_list_item_one_line->item_style = "1line";
588 itc_im_list_item_one_line->item_style = "1text";
590 itc_im_list_item_one_line->func.text_get = im_setting_list_genlist_item_one_line_label_get;
591 itc_im_list_item_one_line->func.content_get = NULL;
592 itc_im_list_item_one_line->func.state_get = NULL;
593 itc_im_list_item_one_line->func.del = NULL;
599 static void im_setting_list_add_ime(void *data) {
600 appdata *ad = (appdata *)data;
602 im_setting_list_genlist_item_class_create(ad->app_type);
604 if (NULL != ad->genlist)
606 elm_genlist_clear(ad->genlist);
609 g_active_ime_index = im_setting_list_get_active_ime_index();
610 if (g_active_ime_index < 0 || g_active_ime_index >= (int)g_ime_info_list.size()) {
611 LOGW("Wrong value. g_active_ime_index : %d, g_ime_info_list.size() : %d\n", g_active_ime_index, g_ime_info_list.size());
615 memset(&item_text, 0, sizeof(item_text));
616 Elm_Object_Item * group_header_item = NULL;
617 if (ad->app_type == APP_TYPE_SETTING || ad->app_type == APP_TYPE_SETTING_NO_ROTATION)
619 snprintf(item_text[0].main_text, sizeof(item_text[0].main_text), "%s", IM_SETTING_LIST_DEFAULT_KEYBOARD);
620 snprintf(item_text[0].sub_text, sizeof(item_text[0].sub_text), "%s", g_ime_info_list[g_active_ime_index].label);
621 elm_genlist_item_append(ad->genlist,
623 (void *)&item_text[0],
625 ELM_GENLIST_ITEM_NONE,
626 im_setting_list_set_default_keyboard_item_sel_cb,
629 snprintf(item_text[1].main_text, sizeof(item_text[1].main_text), "%s", IM_SETTING_LIST_KEYBOARD_SETTING);
630 Elm_Object_Item *item = elm_genlist_item_append(ad->genlist,
631 itc_im_list_item_one_line,
632 (void *)&item_text[1],
634 ELM_GENLIST_ITEM_NONE,
635 im_setting_list_keyboard_setting_item_sel_cb,
638 elm_object_item_disabled_set(item, !(g_ime_info_list[g_active_ime_index].has_option));
641 group_header_item = elm_genlist_item_append(ad->genlist,
643 IM_SETTING_LIST_KEYBOARD_HEADER,
645 ELM_GENLIST_ITEM_NONE,
648 elm_genlist_item_select_mode_set(group_header_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
651 int info_list_size = g_ime_info_list.size();
652 for (i = 0; i < info_list_size; i++) {
653 gen_item_data item_data;
655 if (g_ime_info_list[i].is_preinstalled || (i == g_active_ime_index)) {
656 item_data.chk_status = EINA_TRUE;
658 item_data.chk_status = g_ime_info_list[i].is_enabled;
660 g_gen_item_data.push_back(item_data);
662 Elm_Object_Item *item = elm_genlist_item_append(ad->genlist,
663 itc_im_list_keyboard_list,
666 ELM_GENLIST_ITEM_NONE,
667 im_setting_list_item_sel_cb,
670 if (g_ime_info_list[i].is_preinstalled || (i == g_active_ime_index)) {
671 elm_object_item_disabled_set(item, EINA_TRUE);
674 g_gen_item_data[i].gen_item = item;
678 static Eina_Bool im_setting_list_navi_item_pop_cb(void *data, Elm_Object_Item *it)
680 static bool in_exit = false;
690 static void im_setting_list_navi_back_btn_call_cb(void *data, Evas_Object *obj, void *event_info)
692 evas_object_smart_callback_del(obj, "clicked", im_setting_list_navi_back_btn_call_cb);
696 Evas_Object *im_setting_list_list_create(void *data)
698 appdata *ad = (appdata *)data;
699 ad->conform = im_setting_list_conform_create(ad->win);
700 ad->naviframe = im_setting_list_naviframe_create(ad->conform);
701 ad->genlist = im_setting_list_genlist_create(ad->naviframe);
702 im_setting_list_add_ime(ad);
704 /* Add genlist to naviframe */
705 Evas_Object *back_btn = elm_button_add (ad->naviframe);
706 elm_object_style_set (back_btn, "naviframe/back_btn/default");
707 evas_object_smart_callback_add(back_btn, "clicked", im_setting_list_navi_back_btn_call_cb, NULL);
708 Elm_Object_Item *nf_main_item = elm_naviframe_item_push(ad->naviframe,
709 IM_SETTING_LIST_TITLE,
714 elm_naviframe_item_title_enabled_set(nf_main_item, EINA_TRUE, EINA_TRUE);
715 elm_naviframe_item_pop_cb_set(nf_main_item, im_setting_list_navi_item_pop_cb, ad);
716 elm_object_content_set(ad->conform, ad->naviframe);
721 void im_setting_list_app_terminate(void *data)
723 g_ime_info_list.clear();
724 g_gen_item_data.clear();
725 if (NULL != itc_im_list_keyboard_list)
727 elm_genlist_item_class_free(itc_im_list_keyboard_list);
728 itc_im_list_keyboard_list = NULL;
731 if (NULL != itc_im_list_group)
733 elm_genlist_item_class_free(itc_im_list_group);
734 itc_im_list_group = NULL;
737 if (NULL != itc_im_list_item)
739 elm_genlist_item_class_free(itc_im_list_item);
740 itc_im_list_item = NULL;
744 void im_setting_list_update_window(void *data)
746 appdata *ad = (appdata *)data;
747 im_setting_list_load_ime_info();
748 im_setting_list_add_ime(ad);
752 im_setting_list_app_create(void *data)
754 appdata *ad = (appdata *)data;
757 im_setting_list_text_domain_set();
758 ad->win = im_setting_list_main_window_create(PACKAGE, ad->app_type);
759 im_setting_list_bg_create(ad->win);
760 im_setting_list_load_ime_info();
762 im_setting_list_list_create(ad);
763 evas_object_show(ad->win);