fix for applying wayland (removing X)
[apps/home/settings.git] / setting-font / src / setting-font-main.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Contact: MyoungJune Park <mj2004.park@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21 #include <setting-font-main.h>
22 #include <dd-deviced.h>
23 #include <fontconfig/fontconfig.h>
24 #include <unicode/uloc.h>
25 #include <libxml/xmlmemory.h>
26 #include <libxml/parser.h>
27 #include <setting-font-font-size.h>
28
29 #include <eventsystem.h>
30
31
32 #define SETTING_FONT_MAX_LEN 10
33 #define FONT_BUF_SIZE 256
34
35 static int setting_font_main_create(void *cb);
36 static int setting_font_main_destroy(void *cb);
37 static int setting_font_main_update(void *cb);
38 static int setting_font_main_cleanup(void *cb);
39
40 static Eina_Bool __setting_font_main_click_softkey_back_cb(void *data, Elm_Object_Item *it);
41 static void _slider_mouse_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
42 static int setting_font_style_is_exist_string(const Eina_List *list, const char *key);
43 static void __setting_get_font_size_str(void *data, int size);
44 static void __setting_get_font_type_str(void *data, char *font_data);
45
46 setting_view setting_view_font_main = {
47         .create = setting_font_main_create,
48         .destroy = setting_font_main_destroy,
49         .update = setting_font_main_update,
50         .cleanup = setting_font_main_cleanup,
51 };
52
53
54 char *get_example_style_text(const char *font_size, const char *font_type)
55 {
56         char default_example_str[MAX_COMMON_BUFFER_LEN + 1] = {0, };
57         snprintf(default_example_str, MAX_COMMON_BUFFER_LEN,
58                  "<color=#000000><font_size=%s><font=%s>%s<br>%s<br>%s</font></font_size></color>",
59                  font_size, font_type,
60                  "<align=middle>ABCDE</align>",
61                  "<align=middle>abcde</align>",
62                  "<align=middle>12345!@#$</align>");
63
64         return (char *)g_strdup(default_example_str);
65
66 }
67 static int format_font_name_by_id(char *font_data, char *font_name_id, char *temp, int bufsize)
68 {
69         retvm_if(font_data == NULL, 0, "Invalid argument: event info is NULL");
70
71         char *pos = font_data;
72         char new_name[bufsize];
73         int i = 0;
74         int count = 0;
75         while (*pos != '\0') {
76                 /*SETTING_TRACE(">>>  %c", *pos); */
77                 if (*pos == ' ') {
78                         SETTING_TRACE(">>>  empty ' ' ");
79                         new_name[count] = '\\';
80                         count++;
81                         new_name[count] = ' ';
82                 } else {
83                         new_name[count] = font_data[i];
84                 }
85
86                 count++;
87                 pos++;
88                 i++;
89         }
90         new_name[count] = '\0';
91         char trans_font_type_name[FONT_BUF_SIZE] = {0,};
92         if (safeStrCmp(font_name_id, "IDS_ST_BODY_CHOCO_COOKY") == 0) {
93                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_CHOCO_COOKY"));
94         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_COOL_JAZZ") == 0) {
95                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_COOL_JAZZ"));
96         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_FONTSTYLE_ROSEMARY") == 0) {
97                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_FONTSTYLE_ROSEMARY"));
98         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME") == 0) {
99                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME"));
100         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_MARUBERI_JPN_DCM") == 0) {
101                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_MARUBERI_JPN_DCM"));
102         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_POP_JPN_DCM") == 0) {
103                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_POP_JPN_DCM"));
104         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_UDMINCHO_JPN") == 0) {
105                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDMINCHO_JPN"));
106         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_UDRGOTHICM_JPN") == 0) {
107                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDRGOTHICM_JPN"));
108         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_UDGOTHIC_M_FONT") == 0) {
109                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDGOTHIC_M_FONT"));
110         } else if (safeStrCmp(font_name_id, "IDS_ST_BODY_DEFAULT_FONT") == 0) {
111                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_DEFAULT_FONT"));
112         } else {
113                 snprintf(trans_font_type_name, bufsize, "%s", font_name_id);
114         }
115         snprintf(temp, bufsize, "<font=%s>%s</font>", new_name, trans_font_type_name);
116         return 1;
117 }
118
119 char *_item_text_keystr2_get(void *data, Evas_Object *obj, const char *part)
120 {
121         setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
122         Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) data;
123         char *ret_str = NULL;
124         if (!strcmp(part, "elm.text.main.left")) {
125                 if (item_data->keyStr2) {
126                         char temp[FONT_BUF_SIZE] = {0,};
127
128                         int ret = format_font_name_by_id(item_data->sub_desc, item_data->keyStr2, temp, FONT_BUF_SIZE);
129
130                         if (ret == 0) { /* error condition */
131                                 SETTING_TRACE_ERROR("Error condition font");
132                         }
133
134                         SETTING_TRACE_DEBUG("temp : %s", (char *)temp);
135                         ret_str = (char *)g_strdup(temp);
136                 }
137         }
138         /*SETTING_TRACE_END; */
139         return ret_str;
140 }
141
142
143 static Evas_Object *_font_size_slider_get(void *data, Evas_Object *obj,
144                                           const char *part)
145 {
146         SETTING_TRACE_BEGIN;
147
148         retv_if(!data, NULL);
149         Setting_GenGroupItem_Data *item_data = data;
150         SETTING_TRACE(" --------------------> part:%s", part);
151
152         if (!safeStrCmp(part, "elm.icon")) { /* CENTER WHOLE */
153                 /*SETTING_TRACE("item_data->swallow_type:%d", item_data->swallow_type); */
154                 if (SWALLOW_Type_LAYOUT_5STEP_SLIDER == item_data->swallow_type) {
155                         SETTING_TRACE("Add 5Step Slider");
156
157                         Evas_Object *layout = elm_layout_add(obj);
158                         Eina_Bool ret = elm_layout_file_set(layout, SETTING_THEME_EDJ_NAME, "font_slider");
159                         if (ret == EINA_TRUE) { /* error condition */
160                                 SETTING_TRACE("elm_layout_file_set - OK");
161                         } else {
162                                 SETTING_TRACE_ERROR("elm_layout_file_set - FAILED");
163                         }
164
165                         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
166
167                         Evas_Object *label = elm_label_add(obj);
168                         elm_object_text_set(label, _("<color=#000000><font_size=23>A</font_size></color>"));
169                         evas_object_show(label);
170                         elm_object_part_content_set(layout, "left_text", label);
171                         Evas_Object *label2 = elm_label_add(obj);
172                         elm_object_text_set(label2, _("<color=#000000><font_size=30>A</font_size></color>"));
173                         evas_object_show(label2);
174                         elm_object_part_content_set(layout, "right_text", label2);
175                         Evas_Object *li_slider =
176                             setting_create_5step_slider(obj, item_data->evas,
177                                                         item_data->l_swallow_path,
178                                                         item_data->r_swallow_path,
179                                                         item_data->chk_status,
180                                                         item_data->isIndicatorVisible,
181                                                         item_data->slider_min,
182                                                         item_data->slider_max,
183                                                         item_data->chk_change_cb,
184                                                         item_data->start_change_cb,
185                                                         item_data->stop_change_cb,
186                                                         item_data);
187                         item_data->eo_check = li_slider;
188                         item_data->mouse_up_cb = _slider_mouse_cb;
189                         evas_object_event_callback_add(li_slider, EVAS_CALLBACK_MOUSE_UP, _slider_mouse_cb, item_data);
190
191                         /*evas_object_size_hint_max_set(li_slider, 360, 6); */
192                         elm_object_part_content_set(layout, "slider", li_slider);
193                         return layout;
194                 } else {
195                         SETTING_TRACE("item_data->keyStr:%s", item_data->keyStr);
196                         SETTING_TRACE("item_data->sub_desc:%s", item_data->sub_desc);
197                         int padding_h = 0;
198                         Evas_Object *box = elm_box_add(obj);
199                         evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
200                         evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
201                         elm_box_padding_set(box, 10, padding_h);
202
203                         elm_box_pack_end(box, setting_create_blank_rect_customize(obj, 1, 20));
204
205                         item_data->eo_check = setting_create_textbox(obj, item_data->sub_desc);
206                         elm_box_pack_end(box, item_data->eo_check);
207                         elm_box_pack_end(box, setting_create_blank_rect_customize(obj, 1, 20));
208
209                         return box;
210                 }
211         }
212         return NULL;
213 }
214
215 static int setting_font_style_is_exist_string(const Eina_List *list, const char *key)
216 {
217         Eina_List *l = NULL;
218         if ((key == NULL) || (list == NULL)) {
219                 return 0;
220         }
221
222         for (l = list; l; l = eina_list_next(l)) {
223                 if (l->data && (!strcmp((char *)l->data, key))) {
224                         return 1;
225                 }
226         }
227
228         return 0;
229 }
230
231 /**
232  * [API] get a font list from current system
233  * REFACTORING: move this feature to system-settings
234  */
235 static Eina_List *__setting_font_main_available_list_get()
236 {
237         SETTING_TRACE_BEGIN;
238         FcObjectSet *os = NULL;
239         FcFontSet *fs = NULL;
240         FcPattern *pat = NULL;
241         Eina_List *list = NULL;
242         FcConfig *font_config = NULL;
243
244         font_config = FcInitLoadConfigAndFonts();
245
246         setting_retvm_if(font_config == NULL, NULL, "Failed: FcInitLoadConfigAndFonts");
247
248
249         char *locale = setlocale(0, NULL);
250
251         pat = FcPatternCreate();
252
253         os = FcObjectSetBuild(FC_FAMILY, FC_FILE, FC_FAMILYLANG, (char *) 0);
254
255         if (os) {
256                 fs = FcFontList(font_config, pat, os);
257                 FcObjectSetDestroy(os);
258                 os = NULL;
259         }
260
261         if (pat) {
262                 FcPatternDestroy(pat);
263                 pat = NULL;
264         }
265
266         if (fs) {
267                 int j;
268                 SETTING_TRACE_DEBUG("fs->nfont = %d", fs->nfont);
269
270                 for (j = 0; j < fs->nfont; j++) {
271
272                         FcChar8 *family = NULL;
273                         FcChar8 *file = NULL;
274                         if (FcPatternGetString(fs->fonts[j], FC_FILE, 0, &file) == FcResultMatch) {
275                                 /*SETTING_TRACE_DEBUG("FC_FILE : %s\n", file); */
276                                 int preload_path_len = safeStrLen(SETTING_FONT_PRELOAD_FONT_PATH);
277                                 int download_path_len = safeStrLen(SETTING_FONT_DOWNLOADED_FONT_PATH);
278                                 if (!safeStrNCmp((const char *)file, SETTING_FONT_PRELOAD_FONT_PATH, preload_path_len) ||
279                                     !safeStrNCmp((const char *)file, SETTING_FONT_DOWNLOADED_FONT_PATH, download_path_len)) {
280                                         char *family_result = NULL;
281                                         FcChar8 *lang = NULL;
282                                         int id = 0;
283                                         if (FcPatternGetString(fs->fonts[j], FC_FAMILY, id, &family) != FcResultMatch) {
284                                                 break;
285                                         }
286                                         if (FcPatternGetString(fs->fonts[j], FC_FAMILYLANG, id, &lang) != FcResultMatch) {
287                                                 break;
288                                         }
289                                         family_result = (char *)family;
290
291                                         /* Find proper family name for current locale. */
292                                         while (locale && family && lang) {
293                                                 if (!strncmp(locale, (char *)lang, strlen((char *)lang))) {
294                                                         family_result = (char *)family;
295                                                         break;
296                                                 }
297
298                                                 /* I will set english as default family language. */
299                                                 /* If there is no proper family language for current locale, */
300                                                 /* we have to show the english family name. */
301                                                 if (!strcmp(lang, "en")) {
302                                                         family_result = (char *)family;
303                                                 }
304                                                 id++;
305                                                 if (FcPatternGetString(fs->fonts[j], FC_FAMILY, id, &family) != FcResultMatch) {
306                                                         break;
307                                                 }
308                                                 if (FcPatternGetString(fs->fonts[j], FC_FAMILYLANG, id, &lang) != FcResultMatch) {
309                                                         break;
310                                                 }
311                                         }
312                                         if (family_result && !setting_font_style_is_exist_string(list, family_result)) {
313                                                 list = eina_list_sorted_insert(list, safeStrCmp, strdup(family_result));
314                                                 SETTING_TRACE_DEBUG("-------- ADDED FONT - family = %s", family_result);
315                                                 /* list = eina_list_append(list, family_result); */
316                                                 /* for TEST because there's 1 font on target. */
317                                         }
318                                 }
319                         }
320                 }
321                 FcFontSetDestroy(fs);
322                 fs = NULL;
323         }
324
325         FcConfigDestroy(font_config);
326         font_config = NULL;
327         return list;
328 }
329 int get_font_name_id(char *font_data, char *temp, int bufsize)
330 {
331         /*SETTING_TRACE("font data : %s", (char*)font_data); */
332         /*char trans_font_type_name[FONT_BUF_SIZE] = {0,}; */
333         /*SETTING_TRACE(">>> new_name length : %d : string : %s", count, (char*)new_name); */
334         if (safeStrCmp(font_data, "Choco cooky") == 0) {
335                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_CHOCO_COOKY");
336         } else if (safeStrCmp(font_data, "Cool jazz") == 0) {
337                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_COOL_JAZZ");
338         } else if (safeStrCmp(font_data, "Rosemary") == 0) {
339                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_FONTSTYLE_ROSEMARY");
340         } else if (safeStrCmp(font_data, "HelveticaNeue") == 0) {
341                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME");
342         } else if (safeStrCmp(font_data, "Maruberi") == 0) {
343                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_MARUBERI_JPN_DCM");
344         } else if (safeStrCmp(font_data, "POP") == 0) {
345                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_POP_JPN_DCM");
346         } else if (safeStrCmp(font_data, "UDMincho") == 0) {
347                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_UDMINCHO_JPN");
348         } else if (safeStrCmp(font_data, "UDRGothic") == 0) {
349                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_UDRGOTHICM_JPN");
350         } else if (safeStrCmp(font_data, "UDGothic") == 0) {
351                 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_UDGOTHIC_M_FONT");
352         } else {
353                 snprintf(temp, bufsize, "%s", font_data);
354         }
355         return 1;
356 }
357
358
359 int get_font_name_str(char *font_type_name, char *trans_font_type_name, int bufsize)
360 {
361         /*SETTING_TRACE_BEGIN; */
362         if (safeStrCmp(font_type_name, "Choco cooky") == 0) {
363                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_CHOCO_COOKY"));
364                 /*SETTING_TRACE("%s", trans_font_type_name); */
365         } else if (safeStrCmp(font_type_name, "Cool jazz") == 0) {
366                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_COOL_JAZZ"));
367                 /*SETTING_TRACE("%s", trans_font_type_name); */
368         } else if (safeStrCmp(font_type_name, "Rosemary") == 0) {
369                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_FONTSTYLE_ROSEMARY"));
370                 /*SETTING_TRACE("%s", trans_font_type_name); */
371         } else if (safeStrCmp(font_type_name, "HelveticaNeue") == 0) {
372                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME"));
373                 /*SETTING_TRACE("%s", trans_font_type_name); */
374         } else if (safeStrCmp(font_type_name, "Maruberi") == 0) {
375                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_MARUBERI_JPN_DCM"));
376                 /*SETTING_TRACE("%s", trans_font_type_name); */
377         } else if (safeStrCmp(font_type_name, "POP") == 0) {
378                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_POP_JPN_DCM"));
379                 /*SETTING_TRACE("%s", trans_font_type_name); */
380         } else if (safeStrCmp(font_type_name, "UDMincho") == 0) {
381                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDMINCHO_JPN"));
382                 /*SETTING_TRACE("%s", trans_font_type_name); */
383         } else if (safeStrCmp(font_type_name, "UDRGothic") == 0) {
384                 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDRGOTHICM_JPN"));
385                 /*SETTING_TRACE("%s", trans_font_type_name); */
386         } else {
387                 snprintf(trans_font_type_name, bufsize, "%s", font_type_name);
388                 /*SETTING_TRACE("%s", trans_font_type_name); */
389         }
390         return 1;
391 }
392
393
394 static void __setting_progress_popup_cb(void *data, Evas_Object *obj, void *event_info)
395 {
396         SettingFontUG *ad = (SettingFontUG *) data;
397         SETTING_TRACE("send ug_destroy_me by callback");
398         if (ad->main_popup) {
399                 evas_object_del(ad->main_popup);
400                 ad->main_popup = NULL;
401         }
402         ad->font_change_status = SELECTED_FONT_CHANGE_DONE;
403
404         ug_destroy_me(ad->ug);
405 }
406
407 static void _event_set_font_type_helper(char *font_name)
408 {
409         int ret = system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, font_name);
410         if (ret == SYSTEM_SETTINGS_ERROR_NONE) {
411                 /* on success */
412                 /* set event system */
413                 setting_set_event_system(SYS_EVENT_FONT_SET,
414                                          EVT_KEY_FONT_SET,
415                                          font_name);
416         }
417 }
418
419 static Eina_Bool __font_type_change_call(void *data)
420 {
421         SETTING_TRACE_BEGIN;
422         SettingFontUG *ad = (SettingFontUG *) data;
423
424         /* logic */
425         /*system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, ad->font_name); */
426         _event_set_font_type_helper(ad->font_name);
427
428         /* finalize */
429         ad->font_type_timer = NULL;
430         return ECORE_CALLBACK_CANCEL;
431 }
432
433 static Eina_Bool __font_size_change_call(void *data)
434 {
435         SETTING_TRACE_BEGIN;
436         SettingFontUG *ad = (SettingFontUG *) data;
437
438         ad->size_popup = setting_create_popup_with_progressbar(ad, ad->win_get,
439                                                                PROGRESSBAR_STYLE,
440                                                                NULL, KeyStr_Loading, NULL, 3/*0*/, TRUE, TRUE);
441         _P(ad->size_popup);
442
443         /* logic */
444         int ret;
445         ret = system_settings_set_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, ad->ret_font_size);
446         if (ret != 0) {
447                 SETTING_TRACE_ERROR("system call failed with error code %d", ret);
448         }
449
450         /* finalize */
451         ad->font_size_idler = NULL;
452         return ECORE_CALLBACK_CANCEL;
453 }
454
455 static Eina_Bool __slide_timer(void *data)
456 {
457         SETTING_TRACE_BEGIN;
458         Setting_GenGroupItem_Data *list_item = data;
459         SettingFontUG *ad = list_item->userdata;
460
461         double val = elm_slider_value_get(list_item->eo_check);
462         int value = (int)(val + 0.5);
463         SETTING_TRACE("val:%f", val);
464         elm_slider_value_set(list_item->eo_check, value);
465         list_item->chk_status = elm_slider_value_get(list_item->eo_check);
466
467         if (ad->init_font_size == list_item->chk_status) {
468                 ad->size_change_flag = FALSE;
469         } else {
470                 ad->size_change_flag = TRUE;
471         }
472         ad->ret_font_size = list_item->chk_status;
473
474         if (ad->font_example) {
475                 __setting_get_font_size_str(ad, list_item->chk_status);
476                 char *tmp = ad->font_example->sub_desc;
477                 ad->font_example->sub_desc = get_example_style_text(ad->font_size_str, ad->font_type_str);
478                 G_FREE(tmp);
479                 elm_entry_entry_set(ad->font_example->eo_check, ad->font_example->sub_desc);
480         }
481
482         /* finalize */
483         ad->timer = NULL;
484         return ECORE_CALLBACK_CANCEL;
485 }
486
487 static void __font_size_slider_value_change_cb(void *data, Evas_Object *obj, void *event_info)
488 {
489         SETTING_TRACE_BEGIN;
490         retm_if(data == NULL, "Data parameter is NULL");
491         Setting_GenGroupItem_Data *list_item = data;
492         SettingFontUG *ad = list_item->userdata;
493         retm_if(ad == NULL, "ad parameter is NULL");
494         /*for sliding performance */
495         if (ad->timer) {
496                 ecore_timer_del(ad->timer);
497                 ad->timer = NULL;
498         }
499         ad->timer = ecore_timer_add(0.2, (Ecore_Task_Cb)__slide_timer, list_item);
500 }
501
502 /**
503  * [UI][expandable list][event handler:selection][font change]
504  */
505 void setting_font_main_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
506 {
507         SETTING_TRACE_BEGIN;
508         /* error check */
509         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
510         Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
511         elm_genlist_item_selected_set(subitem, 0);
512         Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subitem);
513         ret_if(NULL == data_subItem);
514
515         SettingFontUG *ad = (SettingFontUG *) data;
516
517
518         /*  if not change, return */
519         if (ad->prev_font == data_subItem->chk_status) {
520                 SETTING_TRACE("NOT CHANGED ");
521                 return;
522         }
523         if (ad->font_change_status == SELECTED_FONT_CHANGE_IN_PROCESS) {
524                 return;
525         }
526         ad->subitem = data_subItem;
527         /* Fix PLM P131016-04680
528           when user check the option, make sure the radio button is checked for prev_font font item
529           the radio of new font item will be checked when user seleck "ok" on popup*/
530         elm_radio_value_set(ad->subitem->rgd, data_subItem->chk_status);
531
532         /* extract font name from tag mixed string */
533         SETTING_TRACE("ad->subitem->keyStr --> popup - get FONT : %s ", ad->subitem->keyStr);
534         SETTING_TRACE("sub_desc --> popup - get FONT : %s ", ad->subitem->sub_desc);
535
536         /* set font name to font main and font config */
537         /*for mincho font type, need to display "Mincho",but need to update the real font with "UDMincho"*/
538         /*keyStr is used to store the string "Mincho", and sub_desc is used to store "UDMDu4"*/
539
540         if (ad->font_type) {
541                 ad->font_type->sub_desc = (char *)g_strdup(ad->subitem->keyStr);
542                 elm_object_item_data_set(ad->font_type->item, ad->font_type);
543                 elm_genlist_item_update(ad->font_type->item);
544         }
545
546         if (ad->font_example) {
547                 __setting_get_font_type_str(ad, ad->subitem->sub_desc);
548                 char *tmp = ad->font_example->sub_desc;
549                 SETTING_TRACE_DEBUG("ad->font_type_str:%s", ad->font_type_str);
550                 ad->font_example->sub_desc = get_example_style_text(ad->font_size_str, ad->font_type_str);
551                 G_FREE(tmp);
552                 elm_entry_entry_set(ad->font_example->eo_check, ad->font_example->sub_desc);
553         }
554
555         if (ad->init_font_type == data_subItem->chk_status) {
556                 ad->type_change_flag = FALSE;
557         } else {
558                 ad->type_change_flag = TRUE;
559         }
560
561         /* sub - descc */
562         char *font_name = g_strdup(ad->subitem->sub_desc);
563
564         ad->prev_font = ad->subitem->chk_status;
565         G_FREE(ad->font_name);
566         ad->font_name = (char *)g_strdup(_(font_name));
567         SETTING_TRACE("ad->subitem->keyStr2 = %s", font_name);
568
569         /*when the expandlist item is NOT expanded, the subitem object is not existed,so need to clear the list*/
570         if (ad->font_type_list != NULL) {
571                 eina_list_free(ad->font_type_list);
572                 ad->font_type_list = NULL;
573         }
574 }
575
576 static void __font_vconf_change_cb(keynode_t *key, void *data)
577 {
578         SETTING_TRACE_BEGIN;
579         setting_retm_if(NULL == key, "key is NULL");
580         setting_retm_if(NULL == data, "data is NULL");
581         SettingFontUG *ad = (SettingFontUG *)data;
582
583         char *vconf_name = vconf_keynode_get_name(key);
584
585         if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME)) {
586
587
588                 char *font_type_name = NULL;
589                 int ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &font_type_name);
590                 if (ret != 0) {
591                         SETTING_TRACE("system-setting call failed with error code %d", ret);
592                 }
593                 SETTING_TRACE("---------------- system-setting call : (%s) ", font_type_name);
594                 char *default_font_name = NULL;
595                 default_font_name = _get_default_font();
596                 char trans_font_type_name[FONT_BUF_SIZE] = {0,};
597                 if (!safeStrCmp(default_font_name, font_type_name)) {
598                         snprintf(trans_font_type_name, FONT_BUF_SIZE, "%s", SETTING_DEFAULT_FONT_TYPE);
599                 } else {
600                         ret = get_font_name_id(font_type_name, trans_font_type_name, FONT_BUF_SIZE);
601                 }
602
603                 if (ad->font_type) {
604                         G_FREE(ad->font_type->sub_desc);
605                         ad->font_type->sub_desc = (char *)g_strdup(trans_font_type_name);
606                         elm_object_item_data_set(ad->font_type->item, ad->font_type);
607                         elm_genlist_item_update(ad->font_type->item);
608                         SETTING_TRACE("ad->font_type->sub_desc:%s", trans_font_type_name);
609
610                         if (elm_genlist_item_expanded_get(ad->font_type->item)) {
611                                 Eina_List *l = NULL;
612                                 Setting_GenGroupItem_Data *font_type_subitem;
613                                 EINA_LIST_FOREACH(ad->font_type_list, l, font_type_subitem) {
614                                         if (font_type_subitem && !safeStrCmp(font_type_subitem->sub_desc, font_type_name)) {
615
616                                                 if (font_type_subitem && font_type_subitem->rgd) {
617                                                         elm_radio_value_set(font_type_subitem->rgd, font_type_subitem->chk_status);
618                                                         if (ad->font_change_status != SELECTED_FONT_CHANGE_IN_PROCESS) {
619                                                                 ad->subitem = font_type_subitem;
620                                                         }
621                                                 }
622                                                 break;
623
624                                         }
625                                 }
626                         }
627                 }
628         } else {
629                 SETTING_TRACE_ERROR("vconf_name is error");
630         }
631         SETTING_TRACE_END;
632 }
633
634 #define SLIDER_MAX_VALUE 4
635
636 #define SLIDER_START_POINT_X _slider_startpoint_x()
637 #define SLIDER_END_POINT_X (_slider_get_width() - SLIDER_START_POINT_X)
638 #define SLIDER_LENGTH (SLIDER_END_POINT_X - SLIDER_START_POINT_X)
639
640 static int _slider_get_width()
641 {
642         int w, h;
643         //ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
644
645         return w;
646 }
647
648
649 static int _slider_endpoint_x()
650 {
651         if (_slider_get_width() == 720)         /* M0 */
652                 return 47;
653         else                                                            /* KIRAN */
654                 return 36;
655 }
656
657 static int _slider_startpoint_x()
658 {
659         int w, h;
660         //ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
661
662         return w;
663 }
664
665
666 static void _slider_mouse_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
667 {
668         SETTING_TRACE_BEGIN;
669         if (data == NULL || obj == NULL || event_info == NULL)
670                 return;
671
672         Setting_GenGroupItem_Data *list_item = data;
673         SettingFontUG *ad = list_item->userdata;
674
675         Evas_Object *slider = obj;
676         Evas_Event_Mouse_Down *ev = event_info;
677
678         int val = 0;
679         int max_vol = SLIDER_MAX_VALUE;
680         int start_x = SLIDER_START_POINT_X;
681         double current = 0.0;
682
683         {
684                 current = ev->canvas.x - start_x;
685                 SETTING_TRACE("ev->canvas.x %d ", ev->canvas.x);
686
687                 double dval = current * max_vol / SLIDER_LENGTH;
688                 val = current * max_vol / SLIDER_LENGTH;
689
690                 SETTING_TRACE("dval = %lf, val = %d, dval-val=%lf ", dval, val, (dval - val));
691                 if ((dval - val) > 0.5)
692                         val =  val + 1;
693         }
694
695         if (val < 0) val = 0;
696         else if (val > max_vol) val = max_vol;
697
698         SETTING_TRACE("val = %d", val);
699
700         elm_slider_value_set(slider, val);
701
702         /*for sliding performance */
703         if (ad->timer) {
704                 ecore_timer_del(ad->timer);
705                 ad->timer = NULL;
706         }
707         ad->timer = ecore_timer_add(0.2, (Ecore_Task_Cb)__slide_timer, list_item);
708         return;
709 }
710
711 static Eina_Bool __font_change_call(void *data)
712 {
713         SETTING_TRACE_BEGIN;
714         SettingFontUG *ad = (SettingFontUG *) data;
715
716         /* logic3 */
717         if (ad->size_change_flag == TRUE) {
718                 system_settings_set_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, ad->ret_font_size);
719         }
720
721         if (ad->type_change_flag == TRUE) {
722                 /*      system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, ad->font_name); */
723                 _event_set_font_type_helper(ad->font_name);
724         }
725
726         /* finalize */
727         ad->font_type_timer = NULL;
728         return ECORE_CALLBACK_CANCEL;
729 }
730
731 static void setting_font_done_click_cb(void *data, Evas_Object *obj, void *event_info)
732 {
733         SETTING_TRACE_BEGIN;
734         /* error check */
735         retm_if(data == NULL, "Data parameter is NULL");
736         SettingFontUG *ad = (SettingFontUG *) data;
737
738         SETTING_TRACE_DEBUG("ad->size_change_flag = %d", ad->size_change_flag);
739         SETTING_TRACE_DEBUG("ad->type_change_flag = %d", ad->type_change_flag);
740
741         if (ad->size_change_flag == TRUE || ad->type_change_flag == TRUE) {
742                 if (ad->main_popup) {
743                         evas_object_del(ad->main_popup);
744                         ad->main_popup = NULL;
745                 }       /* font type popup */
746
747                 ad->font_change_status = SELECTED_FONT_CHANGE_IN_PROCESS;
748                 ad->main_popup = setting_create_popup_with_progressbar(ad, ad->win_get,
749                                                                        PROGRESSBAR_STYLE,
750                                                                        NULL, KeyStr_Loading, __setting_progress_popup_cb, 3/*0*/, TRUE, TRUE);  /* 3 seconds to wait in maximum */
751
752                 /* ecore timer for change actual font */
753                 ad->font_type_timer = ecore_timer_add(1, (Ecore_Task_Cb)__font_change_call, ad);
754         } else {
755                 /* Send destroy request */
756                 ug_destroy_me(ad->ug);
757         }
758 }
759
760 static void setting_font_cancel_click_cb(void *data, Evas_Object *obj, void *event_info)
761 {
762         SETTING_TRACE_BEGIN;
763         /* error check */
764         retm_if(data == NULL, "Data parameter is NULL");
765         SettingFontUG *ad = (SettingFontUG *) data;
766
767         /* Send destroy request */
768         ug_destroy_me(ad->ug);
769 }
770
771 static void __setting_get_font_size_str(void *data, int size)
772 {
773         SETTING_TRACE_BEGIN;
774
775         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
776         SettingFontUG *ad = (SettingFontUG *) data;
777
778         switch (size) {
779                 case 0:
780                         ad->font_size_str = (char *)g_strdup("24");
781                         break;
782                 case 1:
783                         ad->font_size_str = (char *)g_strdup("30");
784                         break;
785                 case 2:
786                         ad->font_size_str = (char *)g_strdup("44");
787                         break;
788                 case 3:
789                         ad->font_size_str = (char *)g_strdup("56");
790                         break;
791                 case 4:
792                         ad->font_size_str = (char *)g_strdup("70");
793                         break;
794                 default:
795                         ad->font_size_str = (char *)g_strdup("30");
796         }
797 }
798
799 static void __setting_get_font_type_str(void *data, char *font_data)
800 {
801         SETTING_TRACE_BEGIN;
802         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
803         retv_if(font_data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
804
805         SettingFontUG *ad = (SettingFontUG *) data;
806
807         char *pos = font_data;
808         char new_name[FONT_BUF_SIZE];
809         int i = 0;
810         int count = 0;
811         while (*pos != '\0') {
812                 if (*pos == ' ') {
813                         SETTING_TRACE(">>>  empty ' ' ");
814                         new_name[count] = '\\';
815                         count++;
816                         new_name[count] = ' ';
817                 } else {
818                         new_name[count] = font_data[i];
819                 }
820
821                 count++;
822                 pos++;
823                 i++;
824         }
825         new_name[count] = '\0';
826
827         ad->font_type_str = g_strdup(new_name);
828 }
829
830 /* ***************************************************
831  *
832  *basic func
833  *
834  ***************************************************/
835 static int setting_font_main_create(void *cb)
836 {
837         SETTING_TRACE_BEGIN;
838         /* error check */
839         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
840
841         SettingFontUG *ad = (SettingFontUG *) cb;
842         setting_create_Gendial_itc("1line", &(ad->itc_1text_1icon_2));
843         ad->itc_1text_1icon_2.func.text_get = _item_text_keystr2_get;
844
845         setting_create_Gendial_itc("1icon", &(ad->itc_bg_1icon));
846         SETTING_TRACE("ad->itc_bg_1icon: %s ", ad->itc_bg_1icon);
847         ad->itc_bg_1icon.func.content_get = _font_size_slider_get;
848
849         retvm_if(ad->win_main_layout == NULL, SETTING_DRAW_ERR_FAIL_LOAD_EDJ,
850                  "win_main_layout is NULL");
851         ad->font_change_status = SELECTED_FONT_CHANGE_NONE;
852         ad->ly_main =
853             setting_create_layout_navi_bar_genlist(ad->win_main_layout,
854                                                    ad->win_get,
855                                                    "IDS_ST_BODY_FONT",
856                                                    _("IDS_ST_BUTTON_BACK"),
857                                                    NULL,
858                                                    (setting_call_back_func)__setting_font_main_click_softkey_back_cb,
859                                                    NULL,
860                                                    ad, &ad->genlist, &ad->navibar);
861         ad->navi_it_font = elm_naviframe_top_item_get(ad->navibar);
862
863         /* Title Cancel Button */
864         ad->btn_cancel = setting_create_button(ad->navibar, "IDS_MSG_ACBUTTON_CANCEL_ABB",
865                                                "naviframe/title_cancel",
866                                                setting_font_cancel_click_cb, ad);
867         elm_object_item_part_content_set(ad->navi_it_font, "title_left_btn", ad->btn_cancel);
868         /* Title Done Button */
869         ad->btn_done = setting_create_button(ad->navibar, "IDS_MSG_ACBUTTON_DONE_ABB",
870                                              "naviframe/title_done",
871                                              setting_font_done_click_cb, ad);
872         elm_object_item_part_content_set(ad->navi_it_font, "title_right_btn", ad->btn_done);
873
874         elm_genlist_mode_set(ad->genlist, ELM_LIST_COMPRESS);
875         evas_object_smart_callback_add(ad->genlist, "realized", __gl_realized_cb, ad);
876
877         char *font_name = NULL;
878         G_FREE(ad->font_type_str);
879         int ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &font_name);
880         if (ret != SYSTEM_SETTINGS_ERROR_NONE) {
881                 SETTING_TRACE_ERROR("Failed to call system_settings_get_value_string with error cdoe %d", ret);
882                 font_name = _get_default_font();
883         }
884         __setting_get_font_type_str(ad, font_name);
885         int size = -1;
886         ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, &size);
887         setting_retvm_if(ret != 0, SETTING_RETURN_SUCCESS, "fail to get vconf");
888         __setting_get_font_size_str(ad, size);
889
890         SETTING_TRACE_DEBUG("ad->font_size_str = %s", ad->font_size_str);
891         SETTING_TRACE_DEBUG("ad->font_type_str = %s", ad->font_type_str);
892
893         /*1.Font Example */
894         char *default_example_str = get_example_style_text(ad->font_size_str, ad->font_type_str);
895
896         ad->font_example =
897             setting_create_Gendial_field_def(ad->genlist, &(ad->itc_bg_1icon),
898                                              NULL,
899                                              ad, SWALLOW_Type_INVALID, NULL,
900                                              NULL, 0, NULL,
901                                              default_example_str, NULL);
902
903         if (ad->font_example) {
904                 __BACK_POINTER_SET(ad->font_example);
905         } else {
906                 SETTING_TRACE_ERROR("ad->font_example is NULL");
907         }
908         G_FREE(default_example_str);
909
910         /*2.Font Size..... */
911         setting_create_Gendial_field_titleItem(ad->genlist, &(itc_group_item), "IDS_ST_BODY_SIZE", NULL);
912
913         size = -1;
914         ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, &size);
915         setting_retvm_if(ret != 0, SETTING_RETURN_SUCCESS, "fail to get vconf");
916         ad->init_font_size = size;
917         ad->font_size =
918             setting_create_Gendial_field_def(ad->genlist, &(ad->itc_bg_1icon), NULL,
919                                              NULL, SWALLOW_Type_LAYOUT_5STEP_SLIDER,
920                                              NULL,
921                                              NULL, size, "IDS_ST_BODY_SIZE",
922                                              NULL,
923                                              __font_size_slider_value_change_cb);
924
925         if (ad->font_size) {
926                 ad->font_size->win_main = ad->win_main_layout;
927                 ad->font_size->evas = ad->evas;
928                 ad->font_size->slider_min = 0;
929                 ad->font_size->slider_max = 4;
930                 ad->font_size->isIndicatorVisible = 0;
931                 ad->font_size->userdata = ad;
932                 ad->font_size->start_change_cb = NULL;
933                 ad->font_size->stop_change_cb = NULL;
934                 ad->font_size->mouse_up_cb = _slider_mouse_cb;
935                 __BACK_POINTER_SET(ad->font_size);
936         } else {
937                 SETTING_TRACE_ERROR("ad->data_br_sli is NULL");
938         }
939
940         /*3.Font Type..... */
941         setting_create_Gendial_field_titleItem(ad->genlist, &(itc_group_item), "IDS_ST_BODY_TYPE", NULL);
942         Evas_Object *rgd = NULL;
943         int i = 0;
944         int matched_font = -1;
945         G_FREE(ad->font_name);
946         ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &(ad->font_name));
947         if (ret != SYSTEM_SETTINGS_ERROR_NONE) {
948                 SETTING_TRACE_ERROR("Failed to call system_settings_get_value_string with error cdoe %d", ret);
949                 ad->font_name = _get_default_font();
950         }
951
952         rgd = elm_radio_add(ad->genlist);
953         elm_radio_value_set(rgd, -1);
954
955         char *default_font_name = NULL;
956         default_font_name = _get_default_font();
957         if (NULL != default_font_name) {
958                 /*char font_name_dispaly[FONT_BUF_SIZE] = {0,}; */
959                 SETTING_TRACE_DEBUG("default_font_name:%s", default_font_name);
960                 /*format_default_font(SETTING_DEFAULT_FONT_TYPE, font_name_dispaly,FONT_BUF_SIZE, default_font_name); */
961                 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
962                 setting_retvm_if(!item_data, SETTING_RETURN_SUCCESS, "calloc failed");
963                 item_data->keyStr2 = (char *)g_strdup(SETTING_DEFAULT_FONT_TYPE);/*for display */
964                 item_data->keyStr = (char *)g_strdup(_(SETTING_DEFAULT_FONT_TYPE));/*for tts reading */
965                 item_data->swallow_type = SWALLOW_Type_1RADIO_RIGHT;
966                 item_data->chk_status = i;
967                 item_data->rgd = rgd;
968                 item_data->chk_change_cb = NULL;
969                 item_data->group_style = SETTING_GROUP_STYLE_CENTER;
970                 item_data->sub_desc = strdup(default_font_name); /*the real font type value */
971                 item_data->item = elm_genlist_item_append(ad->genlist, &(ad->itc_1text_1icon_2), item_data, NULL, ELM_GENLIST_ITEM_NONE, setting_font_main_list_sel_cb, ad);
972
973                 if (item_data) {
974                         setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_CENTER);
975                         item_data->userdata = ad;
976                         if (!safeStrCmp(ad->font_name, (const char *)item_data->sub_desc)) {
977                                 matched_font = i;
978                         }
979                 }
980                 i++;
981                 ad->font_type_list = eina_list_append(ad->font_type_list, item_data);
982         }
983
984         Eina_List *font_list = NULL;
985         Eina_List *l = NULL;
986         char *font_data = NULL;
987         font_list = __setting_font_main_available_list_get();
988         EINA_LIST_FOREACH(font_list, l, font_data) {
989                 if (safeStrCmp(default_font_name, (char *)font_data) != 0) {
990                         char keyStr[FONT_BUF_SIZE] = {0,};
991                         get_font_name_str((char *)font_data, keyStr, FONT_BUF_SIZE);
992                         char temp[FONT_BUF_SIZE] = {0,};
993                         /*int ret = get_font_name_tag(font_data, temp, FONT_BUF_SIZE); */
994                         get_font_name_id((char *)font_data, temp, FONT_BUF_SIZE);
995                         SETTING_TRACE_DEBUG("font data : %s", (char *)font_data);
996                         Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
997                         setting_retvm_if(!item_data, SETTING_RETURN_SUCCESS, "calloc failed");
998                         item_data->keyStr2 = (char *)g_strdup(temp);/*for display */
999                         item_data->keyStr = (char *)g_strdup(keyStr);/*for tts reading */
1000                         item_data->swallow_type = SWALLOW_Type_1RADIO_RIGHT;
1001                         item_data->chk_status = i;
1002                         item_data->rgd = rgd;
1003                         item_data->chk_change_cb = NULL;
1004                         item_data->group_style = SETTING_GROUP_STYLE_CENTER;
1005                         item_data->sub_desc = strdup((char *)font_data);
1006                         item_data->item = elm_genlist_item_append(ad->genlist, &(ad->itc_1text_1icon_2), item_data, NULL, ELM_GENLIST_ITEM_NONE, setting_font_main_list_sel_cb, ad);
1007
1008                         if (item_data) {
1009                                 item_data->userdata = ad;
1010                                 /*if (!safeStrCmp(ad->font_name, (const char*)font_data)) { */
1011                                 if (!safeStrCmp(ad->font_name, (const char *)item_data->sub_desc)) {
1012                                         matched_font = i;
1013                                 }
1014                         }
1015                         i++;
1016                         ad->font_type_list = eina_list_append(ad->font_type_list, item_data);
1017
1018                         FREE(font_data);
1019                 }
1020         }
1021
1022         /* update check status */
1023         if (matched_font != -1) {
1024                 elm_radio_value_set(rgd, matched_font);
1025                 ad->init_font_type = matched_font;
1026         }
1027
1028         ad->prev_font = matched_font;
1029         G_FREE(default_font_name);
1030
1031
1032         ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME,
1033                                        __font_vconf_change_cb, ad);
1034         if (ret != 0) {
1035                 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
1036         }
1037         ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE,
1038                                        __font_vconf_change_cb, ad);
1039         if (ret != 0) {
1040                 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
1041         }
1042         /*__setting_font_main_genlist_item_create(ad); */
1043
1044         evas_font_reinit();
1045
1046         int w, h;
1047         ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
1048         SETTING_TRACE(" w = %d h = %d <------------------------- ", w, h);
1049
1050         setting_view_font_main.is_create = 1;
1051         return SETTING_RETURN_SUCCESS;
1052 }
1053
1054 static int setting_font_main_destroy(void *cb)
1055 {
1056         SETTING_TRACE_BEGIN;
1057         /* error check */
1058         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1059
1060         SettingFontUG *ad = (SettingFontUG *) cb;
1061         int ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME,
1062                                            __font_vconf_change_cb);
1063         if (ret != 0) {
1064                 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
1065         }
1066         ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE,
1067                                        __font_vconf_change_cb);
1068         if (ret != 0) {
1069                 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
1070         }
1071         if (ad->font_name) {
1072                 G_FREE(ad->font_name);
1073                 ad->font_name = NULL;
1074         }
1075         if (ad->font_size_str) {
1076                 G_FREE(ad->font_size_str);
1077                 ad->font_size_str = NULL;
1078         }
1079         if (ad->font_type_str) {
1080                 G_FREE(ad->font_type_str);
1081                 ad->font_type_str = NULL;
1082         }
1083         if (ad->timer) {
1084                 ecore_timer_del(ad->timer);
1085                 ad->timer = NULL;
1086         }
1087         if (ad->font_size_idler) {
1088                 ecore_timer_del(ad->font_size_idler);
1089                 ad->font_size_idler = NULL;
1090         }
1091         if (ad->font_type_timer) {
1092                 ecore_timer_del(ad->font_type_timer);
1093                 ad->font_type_timer = NULL;
1094         }
1095
1096         if (ad->main_popup) {
1097                 evas_object_del(ad->main_popup);
1098                 ad->main_popup = NULL;
1099         }
1100
1101         if (ad->ly_main != NULL) {
1102                 evas_object_del(ad->ly_main);
1103                 ad->ly_main = NULL;
1104         }
1105         if (ad->navi_it_font != NULL) {
1106                 ad->navi_it_font = NULL;
1107         }
1108         if (ad->font_type_list != NULL) {
1109                 eina_list_free(ad->font_type_list);
1110                 ad->font_type_list = NULL;
1111         }
1112
1113         setting_view_font_main.is_create = 0;
1114         SETTING_TRACE_END;
1115         return SETTING_RETURN_SUCCESS;
1116 }
1117
1118 static int setting_font_main_update(void *cb)
1119 {
1120         SETTING_TRACE_BEGIN;
1121         /* error check */
1122         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1123
1124         SettingFontUG *ad = (SettingFontUG *) cb;
1125
1126         if (ad->ly_main != NULL) {
1127                 evas_object_show(ad->ly_main);
1128
1129                 int value = -1;
1130                 int err = -1;
1131                 int ret = setting_get_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, &value, &err);
1132                 if (ret != 0) {
1133                         SETTING_TRACE_ERROR("get vconf failed");
1134                 }
1135
1136                 if (ad->font_size) {
1137                         G_FREE(ad->font_size->sub_desc);
1138                         ad->font_size->sub_desc = (char *)g_strdup(__get_font_size_str(value));
1139                         elm_object_item_data_set(ad->font_size->item, ad->font_size);
1140                         elm_genlist_item_update(ad->font_size->item);
1141                 }
1142                 /* setting_font_update_vconf_key(ad, SETTING_VCONF_INT_TYPE, INT_SLP_SETTING_LCD_TIMEOUT_NORMAL); */
1143         }
1144         if (ad->font_type) {
1145                 elm_genlist_item_update(ad->font_type->item);
1146         }
1147         return SETTING_RETURN_SUCCESS;
1148 }
1149
1150 static int setting_font_main_cleanup(void *cb)
1151 {
1152         /* error check */
1153         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1154
1155         SettingFontUG *ad = (SettingFontUG *) cb;
1156
1157         if (ad->ly_main != NULL) {
1158                 evas_object_hide(ad->ly_main);
1159         }
1160
1161         return SETTING_RETURN_SUCCESS;
1162 }
1163
1164 /* ***************************************************
1165  *
1166  *call back func
1167  *
1168  ***************************************************/
1169
1170 static Eina_Bool __setting_font_main_click_softkey_back_cb(void *data, Elm_Object_Item *it)
1171 {
1172         SETTING_TRACE_BEGIN;
1173         /* error check */
1174         retv_if(data == NULL, EINA_FALSE);
1175
1176         SettingFontUG *ad = (SettingFontUG *) data;
1177
1178         if (ad->viewmode == FONT_SEL_VIEW_APPCONTROL) {
1179                 app_control_h svc;
1180                 if (app_control_create(&svc)) {
1181                         return EINA_FALSE;
1182                 }
1183
1184                 app_control_add_extra_data(svc, "category", "FontType");
1185                 app_control_add_extra_data(svc, "FontType", ad->font_name);
1186
1187                 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "category", "FontType");
1188                 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "FontType", ad->font_name);
1189
1190
1191                 ug_send_result(ad->ug, svc);
1192                 app_control_destroy(svc);
1193         } else if (ad->viewmode == FONT_SIZE_VIEW_APPCONTROL) {
1194                 app_control_h svc;
1195
1196                 int err;
1197                 int ret = setting_set_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, ad->ret_font_size, &err);
1198                 setting_retvm_if(ret == -1, EINA_FALSE, "Failed to set vconf");
1199
1200                 if (app_control_create(&svc)) {
1201                         return EINA_FALSE;
1202                 }
1203
1204                 char font_size[SETTING_FONT_MAX_LEN] = {0,};
1205                 snprintf(font_size, SETTING_FONT_MAX_LEN, "%d", ad->ret_font_size);
1206
1207                 app_control_add_extra_data(svc, "category", "FontSize");
1208                 app_control_add_extra_data(svc, "FontSize", font_size);
1209
1210                 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "category", "FontSize");
1211                 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "FontSize", font_size);
1212
1213
1214                 ug_send_result(ad->ug, svc);
1215                 app_control_destroy(svc);
1216         }
1217         /* Send destroy request */
1218         ug_destroy_me(ad->ug);
1219         return EINA_FALSE;
1220 }