Fix prevent issues
[apps/core/preloaded/settings.git] / setting-common / src / setting-common-draw-naviframe.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-common-draw-widget.h>
22 #include <glib.h>
23 #include <utilX.h>
24 #include <Ecore_X.h>
25
26 Evas_Object *setting_create_win_layout(Evas_Object *win_layout,
27                                        Evas_Object *win_obj)
28 {
29         Evas_Object *layout = NULL;
30
31         /*  Base Layout */
32         layout = elm_layout_add(win_obj);
33         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
34         setting_retvm_if(layout == NULL, FALSE, "layout == NULL");
35
36         elm_layout_theme_set(layout, "layout", "application", "default");
37
38         Evas_Object *bg = setting_create_bg(layout, win_obj, "group_list");
39         elm_object_part_content_set(layout, "elm.swallow.bg", bg);
40         evas_object_show(layout);
41
42         return layout;
43 }
44
45 #define HALF_SCREEN_STR_LEN 20
46 #define ONE_THIRD_SCREEN_STR_LEN 13
47 Evas_Object *setting_create_navi_bar(Evas_Object *layout)
48 {
49
50         Evas_Object *navi = NULL;
51         navi = elm_naviframe_add(layout);
52
53         if (navi == NULL) {
54                 SETTING_TRACE(" *** elm_naviframe_add returns NULL *** ");
55                 return NULL;
56         }
57         elm_object_part_content_set(layout, "elm.swallow.content", navi);
58         evas_object_show(navi);
59         return navi;
60 }
61
62 Elm_Object_Item * setting_create_navi_bar_top_buttons(char *title_str,
63                                          char *lbutton_str,
64                                          char *rbutton_str,
65                                          char *mbutton_str,
66                                          setting_call_back_func lbutton_click_cb,
67                                          setting_call_back_func rbutton_click_cb,
68                                          setting_call_back_func mbutton_click_cb,
69                                          void *cb_data, Evas_Object *eo_view,/*any container obj */
70                                          Evas_Object *navigate_bar )
71 {
72         //SETTING_TRACE_BEGIN;
73         Evas_Object *l_button = NULL;
74         Evas_Object *r_button = NULL;
75         Evas_Object *m_button = NULL;
76         Elm_Object_Item *navi_it = NULL;
77
78         /*  create buttons */
79         l_button = setting_create_button(navigate_bar, lbutton_str,
80                                          NULL,
81                                          lbutton_click_cb, cb_data);
82
83         r_button = setting_create_button(navigate_bar, rbutton_str,
84                                          NULL,
85                                          rbutton_click_cb, cb_data);
86         m_button = setting_create_button(navigate_bar, mbutton_str,
87                                          NULL,
88                                          mbutton_click_cb, cb_data);
89
90         navi_it = elm_naviframe_item_push(navigate_bar, title_str,
91                                           NULL, NULL, eo_view,
92                                           NULL);
93         retv_if(!navi_it, NULL);
94
95         /*  arrange buttons into  navi_it*/
96         if (l_button) {
97                 elm_object_item_part_content_set(navi_it, "title_left_btn", l_button);
98         }
99         if (r_button) {
100                 elm_object_item_part_content_set(navi_it, "title_right_btn", r_button);
101         }
102         if (m_button) {
103                 elm_object_item_part_content_set(navi_it, "title_more_btn", m_button);
104         }
105         //remove '<-' button
106         Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
107         if (back_btn) {
108                 elm_object_item_part_content_set(navi_it, "prev_btn", NULL);
109                 if (back_btn) evas_object_del(back_btn);
110         }
111
112         return navi_it;
113 }
114
115 Elm_Object_Item *__create_navi_bar_bottom_buttons(char *title_str, char *lbutton_str, char *rbutton_str,
116                                      char *mbutton_str, setting_call_back_func lbutton_click_cb,
117                                      setting_call_back_func rbutton_click_cb,
118                                      setting_call_back_func mbutton_click_cb,
119                                      void *cb_data, Evas_Object *eo_view,/*any container obj */
120                                      Evas_Object *navigate_bar, /*the specialized navigation bar */
121                                      Evas_Object *titleobj)
122 {
123         SETTING_TRACE_BEGIN;
124         Elm_Object_Item *navi_it = NULL;
125         Evas_Object *mbtn = NULL;
126         Evas_Object *rbtn = NULL;
127         Evas_Object *lbtn = NULL;
128
129         /*  arrange buttons into  controlbar*/
130         if (0 == safeStrCmp(lbutton_str, _("IDS_COM_BODY_BACK"))) {     /*  do special handling */
131                 lbtn = setting_create_button(navigate_bar, lbutton_str,
132                                                  NAVI_BACK_BUTTON_STYLE,
133                                                  lbutton_click_cb, cb_data);
134
135                 navi_it = elm_naviframe_item_push(navigate_bar, title_str, lbtn, NULL, eo_view, NULL);  /* add new button */
136                 elm_object_style_set(lbtn, NAVI_BACK_BUTTON_STYLE);     /* take into effect */
137
138                 if (!rbutton_str && !mbutton_str) {
139                         //do nothing..
140                 } else if (rbutton_str && mbutton_str) {        /* both exist.. */
141                         mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
142                         rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
143                         elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
144                         elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
145                 } else if (rbutton_str) {       /* r_btn exist.. */
146                         rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
147                         elm_object_item_part_content_set(navi_it, "toolbar_button1", rbtn);
148                         elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
149                 } else if (mbutton_str) {       /* m_btn exist.. */
150                         mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
151                         elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
152                         elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
153                 }
154                 return navi_it;
155         }
156         navi_it = elm_naviframe_item_push(navigate_bar, title_str, NULL, NULL, eo_view, NULL);
157         if (lbutton_str && mbutton_str && rbutton_str)
158         {
159                 lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
160                 elm_object_item_part_content_set(navi_it, "toolbar_more_btn", lbtn);
161                 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
162                 elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
163                 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
164                 elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
165         }
166         else
167         {
168                 bool has_btn_flag = FALSE;//first "toolbar_button1", then "toolbar_button2".
169                 if (lbutton_str)
170                 {
171                         lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
172                         elm_object_item_part_content_set(navi_it, "toolbar_button1", lbtn);
173                         has_btn_flag = TRUE;
174                 }
175                 if (mbutton_str)
176                 {
177                         mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
178                         elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", mbtn);
179                         has_btn_flag = TRUE;
180                 }
181                 if (rbutton_str)
182                 {
183                         rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
184                         elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", rbtn);
185                         has_btn_flag = TRUE;
186                 }
187         }
188         return navi_it;
189
190 }
191
192
193 /**
194 * Create buttons on the specialized navigation bar
195 *
196 * @param[in] eo_view    navigation bar's content
197 * @param[in] controlbar   title obj of navigation bar
198 *
199 */
200 void setting_create_navi_bar_buttons(char *title_str, char *lbutton_str, char *rbutton_str,
201                                      char *mbutton_str, setting_call_back_func lbutton_click_cb,
202                                      setting_call_back_func rbutton_click_cb,
203                                      setting_call_back_func mbutton_click_cb,
204                                      void *cb_data, Evas_Object *eo_view,/*any container obj */
205                                      Evas_Object *navigate_bar, /*the specialized navigation bar */
206                                      Evas_Object *titleobj)
207 {                               /* controlbar */
208         __create_navi_bar_bottom_buttons(title_str, lbutton_str,
209                                        rbutton_str, mbutton_str,
210                                        lbutton_click_cb,
211                                        rbutton_click_cb,
212                                        mbutton_click_cb,
213                                        cb_data, eo_view,
214                                        navigate_bar, titleobj);
215         return;
216 }
217
218 /**
219 * The general API to create a layout with navigation bar,
220 *   which contents any evas container object(@param[eo_view]) as its content
221 *
222 * @param[in] eo_view    navigation bar's content
223 * @param[out] titleobj   title obj of navigation bar
224 *
225 * return main layout of UG or App..
226 */
227 Evas_Object *setting_create_layout_navi_bar(Evas_Object *win_layout, Evas_Object *win_obj, char *title_str, char *lbutton_str, char *rbutton_str, char *mbutton_str, setting_call_back_func lbutton_click_cb, setting_call_back_func rbutton_click_cb, setting_call_back_func mbutton_click_cb, void *cb_data, Evas_Object *eo_view,    /*any container obj constructed on any evas obj */
228                                             Evas_Object **navi_bar,
229                                             Evas_Object **titleobj)
230 {
231
232         Evas_Object *layout = setting_create_win_layout(win_layout, win_obj);
233         *navi_bar = setting_create_navi_bar(layout);
234
235         setting_create_navi_bar_buttons(title_str,
236                                         lbutton_str, rbutton_str, mbutton_str,
237                                         lbutton_click_cb, rbutton_click_cb,
238                                         mbutton_click_cb, cb_data, eo_view /*content */ ,
239                                         *navi_bar, NULL);
240         return layout;
241 }
242
243 /**
244 * The API to create a layout with navigation bar,
245 *   which contents a scroller object as its content
246 *
247 * @param[out] scroller   navigation bar's content
248 *
249 * @return a layout with a special navigation bar and at most 2 buttons
250 */
251
252 Evas_Object *setting_create_layout_navi_bar_scroller(Evas_Object *win_layout,
253                                                      Evas_Object *win_obj,
254                                                      char *title_str,
255                                                      char *lbutton_str,
256                                                      char *rbutton_str,
257                                                      setting_call_back_func
258                                                      lbutton_click_cb,
259                                                      setting_call_back_func
260                                                      rbutton_click_cb,
261                                                      void *cb_data,
262                                                      Evas_Object **scroller,
263                                                      Evas_Object **navi_bar)
264 {
265
266         Evas_Object *layout = setting_create_win_layout(win_layout, win_obj);
267         *navi_bar = setting_create_navi_bar(layout);
268
269         /*****/
270         /*  create scroller as CONTENT */
271         Evas_Object *scrl = NULL;
272         /* Evas_Object *ret = NULL; */
273         if (scroller != NULL) {
274                 /* scrl =*scroller = elm_scroller_add(win_layout); */
275                 scrl = *scroller = elm_scroller_add(layout);
276                 retvm_if(*scroller == NULL, NULL,
277                          "Cannot set scroller object as contento of layout");
278                 elm_scroller_bounce_set(*scroller, EINA_FALSE, EINA_TRUE);
279                 elm_scroller_policy_set(*scroller, ELM_SCROLLER_POLICY_OFF,
280                                         ELM_SCROLLER_POLICY_AUTO);
281                 evas_object_show(*scroller);
282         }
283
284         /*****/
285
286         setting_create_navi_bar_buttons(title_str,
287                                         lbutton_str, rbutton_str, NULL,
288                                         lbutton_click_cb, rbutton_click_cb,
289                                         NULL, cb_data, scrl /*content */ ,
290                                         *navi_bar, NULL);
291         return layout;
292 }
293
294 /**
295 * The API to create a layout with navigation bar ,
296 *       which contents a genlist object as its content
297 *
298 * @return a layout with a special navigation bar and at most 2 buttons
299 */
300 Evas_Object *setting_create_layout_navi_bar_genlist(Evas_Object *win_layout,
301                                                     Evas_Object *win_obj,
302                                                     char *title_str,
303                                                     char *lbutton_str,
304                                                     char *rbutton_str,
305                                                     setting_call_back_func
306                                                     lbutton_click_cb,
307                                                     setting_call_back_func
308                                                     rbutton_click_cb,
309                                                     void *cb_data,
310                                                     Evas_Object **genlist,
311                                                     Evas_Object **navi_bar)
312 {
313         /*  win_layout -> layout */
314         Evas_Object *layout = setting_create_win_layout(win_layout, win_obj);
315         *navi_bar = setting_create_navi_bar(layout);
316
317         *genlist = elm_genlist_add(*navi_bar);
318         elm_object_style_set(*genlist, "dialogue");
319         retvm_if(*genlist == NULL, NULL,
320                  "Cannot set scroller object as contento of layout");
321         elm_genlist_clear(*genlist);    /* first to clear list */
322
323         setting_create_navi_bar_buttons(title_str,
324                                         lbutton_str, rbutton_str, NULL,
325                                         lbutton_click_cb, rbutton_click_cb,
326                                         NULL, cb_data, *genlist, *navi_bar,
327                                         NULL);
328         return layout;
329 }
330
331
332 Elm_Object_Item *__push_navi_bar_bottom_buttons(char *title_str,
333                              char *lbutton_str, char *rbutton_str,
334                              char *mbutton_str,
335                              setting_call_back_func lbutton_click_cb,
336                              setting_call_back_func rbutton_click_cb,
337                              setting_call_back_func mbutton_click_cb,
338                              void *cb_data, Evas_Object *eo_view,
339                              Evas_Object *navigate_bar, Evas_Object **titleobj)
340 {
341         Elm_Object_Item *navi_it = NULL;
342         Evas_Object *mbtn = NULL;
343         Evas_Object *rbtn = NULL;
344         Evas_Object *lbtn = NULL;
345
346         /*  arrange buttons into  controlbar*/
347         if (0 == safeStrCmp(lbutton_str, _("IDS_COM_BODY_BACK"))) {
348                 lbtn = setting_create_button(navigate_bar, lbutton_str,
349                                                  NAVI_BACK_BUTTON_STYLE,
350                                                  lbutton_click_cb, cb_data);
351
352                 navi_it = elm_naviframe_item_push(navigate_bar, title_str, lbtn, NULL, eo_view, NULL);
353                 elm_object_style_set(lbtn, NAVI_BACK_BUTTON_STYLE);     /* take into effect */
354                 if (!rbutton_str && !mbutton_str)
355                 {
356                         return navi_it;
357                 }
358
359                 if (rbutton_str && mbutton_str) {
360
361                         mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
362                         rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
363                         elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
364                         elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
365                 } else if (rbutton_str) {
366                         rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
367                         elm_object_item_part_content_set(navi_it, "toolbar_button1", rbtn);
368                         //elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
369                 } else if (mbutton_str) {
370                         mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
371                         elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
372                         //elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
373                 }
374         } else {        /*  no need back button on navi_bar */
375                 navi_it = elm_naviframe_item_push(navigate_bar, title_str, NULL, NULL, eo_view, NULL);
376                 if (!lbutton_str && !rbutton_str && !mbutton_str) {
377                         return navi_it;
378                 }
379
380                 //remove '<-' button, insteadly using controlbar
381                 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
382                 elm_object_item_part_content_set(navi_it, "prev_btn", NULL);
383                 evas_object_del(back_btn);
384
385                 if (lbutton_str && mbutton_str && rbutton_str)
386                 {
387                         lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
388                         elm_object_item_part_content_set(navi_it, "toolbar_more_btn", lbtn);
389                         mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
390                         elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
391                         rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
392                         elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
393                 }
394                 else
395                 {
396                         bool has_btn_flag = FALSE;//first "toolbar_button1", then "toolbar_button2".
397                         if (lbutton_str)
398                         {
399                                 lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
400                                 elm_object_item_part_content_set(navi_it, "toolbar_button1", lbtn);
401                                 has_btn_flag = TRUE;
402                         }
403                         if (mbutton_str)
404                         {
405                                 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
406                                 elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", mbtn);
407                                 has_btn_flag = TRUE;
408                         }
409                         if (rbutton_str)
410                         {
411                                 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
412                                 elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", rbtn);
413                                 has_btn_flag = TRUE;
414                         }
415                 }
416         }
417
418         return navi_it;
419 }
420
421
422 /**
423 * The general API to push any evas object(@param[eo_view]) to the specialized navi_bar,
424 *   which contents at most 3 buttons
425 */
426 Elm_Object_Item *
427 setting_push_layout_navi_bar(char *title_str,
428                              char *lbutton_str, char *rbutton_str,
429                              char *mbutton_str,
430                              setting_call_back_func lbutton_click_cb,
431                              setting_call_back_func rbutton_click_cb,
432                              setting_call_back_func mbutton_click_cb,
433                              void *cb_data, Evas_Object *eo_view,
434                              Evas_Object *navi_bar, Evas_Object **titleobj)
435 {
436         return __push_navi_bar_bottom_buttons(title_str,
437                                      lbutton_str, rbutton_str,mbutton_str,
438                                      lbutton_click_cb,
439                                      rbutton_click_cb,
440                                      mbutton_click_cb,
441                                      cb_data, eo_view, navi_bar, titleobj);
442 }
443
444 /**
445 * The API to push a scroller object(@param[scroller]) to the specialized navi_bar,
446 *   which contents at most 2 buttons
447 */
448
449 void
450 setting_push_layout_navi_bar_scroller(Evas_Object *win_main, char *title_str,
451                                       char *lbutton_str, char *rbutton_str,
452                                       setting_call_back_func lbutton_click_cb,
453                                       setting_call_back_func rbutton_click_cb,
454                                       void *cb_data,
455                                       Evas_Object **scroller,
456                                       Evas_Object *navi_bar)
457 {
458         /*  create scroller */
459         Evas_Object *scrl = NULL;
460         if (scroller != NULL) {
461                 scrl = *scroller = elm_scroller_add(win_main);
462                 retm_if(*scroller == NULL,
463                         "Cannot set scroller as contento of layout");
464                 elm_scroller_bounce_set(*scroller, EINA_FALSE, EINA_TRUE);
465                 elm_scroller_policy_set(*scroller, ELM_SCROLLER_POLICY_OFF,
466                                         ELM_SCROLLER_POLICY_AUTO);
467
468                 evas_object_show(*scroller);
469         }
470
471         setting_push_layout_navi_bar(title_str,
472                                      lbutton_str, rbutton_str, NULL,
473                                      lbutton_click_cb,
474                                      rbutton_click_cb,
475                                      NULL, cb_data, scrl, navi_bar, NULL);
476 }
477
478 /**
479 * @ The API to push a genlist object(@param[genlist]) to the specialized navi_bar,
480 *   which contents at most 2 buttons
481 */
482 void
483 setting_push_layout_navi_bar_genlist(Evas_Object *win_layout,
484                                      Evas_Object *win_obj, char *title_str,
485                                      char *lbutton_str, char *rbutton_str,
486                                      setting_call_back_func lbutton_click_cb,
487                                      setting_call_back_func rbutton_click_cb,
488                                      void *cb_data, Evas_Object **genlist,
489                                      Evas_Object *navi_bar)
490 {
491         /*  create scroller */
492         Evas_Object *gl = NULL;
493         if (genlist != NULL) {
494                 gl = *genlist = elm_genlist_add(win_layout);
495                 elm_object_style_set(*genlist, "dialogue");
496                 retm_if(*genlist == NULL,
497                         "Cannot set scroller object  as contento of layout");
498                 elm_genlist_clear(gl);  /* first to clear list */
499         }
500
501         setting_push_layout_navi_bar(title_str,
502                                      lbutton_str, rbutton_str, NULL,
503                                      lbutton_click_cb,
504                                      rbutton_click_cb,
505                                      NULL, cb_data, gl, navi_bar, NULL);
506 }
507
508 /*
509 * To go to top of list in top view of navibar.
510 * @param[in] navibar
511 */
512 void setting_go_to_navibar_list_top(Evas_Object *navibar)
513 {
514         Elm_Object_Item *navi_it = elm_naviframe_top_item_get(navibar);
515         if (navi_it)
516         {
517                 Evas_Object *content = elm_object_item_part_content_get(navi_it, "default");
518
519                 Elm_Object_Item *first_item = elm_genlist_first_item_get(content);
520                 if (first_item)
521                 {
522                         elm_genlist_item_show(first_item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
523                 }
524         }
525 }
526
527