TizenRefApp-8202 [App Shortcut Widget] Implement select application view for application 85/119885/2
authorIgor Olshevskyi <i.olshevskyi@samsung.com>
Fri, 17 Mar 2017 16:37:32 +0000 (18:37 +0200)
committerIgor Olshevskyi <i.olshevskyi@samsung.com>
Mon, 20 Mar 2017 12:55:14 +0000 (14:55 +0200)
Change-Id: I231019d174ef6771df055f761dd837a095d395c5

15 files changed:
apptray-widget-app/CMakeLists.txt
apptray-widget-app/inc/app-widget-app.h [deleted file]
apptray-widget-app/inc/common/home_custom_index.h [deleted file]
apptray-widget-app/inc/common/home_custom_index_info.h [deleted file]
apptray-widget-app/inc/common/home_custom_scroller.h [deleted file]
apptray-widget-app/inc/common/home_custom_scroller_info.h [deleted file]
apptray-widget-app/inc/item_info.h
apptray-widget-app/inc/util.h
apptray-widget-app/org.tizen.apptray-widget.xml
apptray-widget-app/res/edje/add_to_shortcut.edc
apptray-widget-app/res/edje/images/tw_list_number_bg.#.png [new file with mode: 0644]
apptray-widget-app/res/edje/images/tw_list_number_ef.#.png [new file with mode: 0644]
apptray-widget-app/src/app-widget-app.c
apptray-widget-app/src/common/home_custom_index.c [deleted file]
apptray-widget-app/src/common/home_custom_scroller.c [deleted file]

index 9fc0373a65e5d398849c2a5509925a2878c1d49f..36451052afe720fe4fa00a74c1da3d35ef5e1bb7 100755 (executable)
@@ -5,8 +5,6 @@ SET(SRCS
                src/app-widget-app.c
         src/key.c
         src/util.c
-        src/common/home_custom_index.c
-        src/common/home_custom_scroller.c
 )
 
 SET(VENDOR "tizen")
diff --git a/apptray-widget-app/inc/app-widget-app.h b/apptray-widget-app/inc/app-widget-app.h
deleted file mode 100755 (executable)
index 9be1f55..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Samsung API
- * Copyright (c) 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.1 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef __app_widget_app_H__
-#define __app_widget_app_H__
-
-#include <app.h>
-#include <Elementary.h>
-#include <system_settings.h>
-#include <efl_extension.h>
-#include <dlog.h>
-#include <app-widget-app_log.h>
-
-#endif /*__app_widget_app_H__ */
diff --git a/apptray-widget-app/inc/common/home_custom_index.h b/apptray-widget-app/inc/common/home_custom_index.h
deleted file mode 100755 (executable)
index ae387f3..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Samsung API
- * Copyright (c) 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.1 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __W_HOME_CUSTOM_INDEX_H__
-#define __W_HOME_CUSTOM_INDEX_H__
-
-typedef enum {
-       INDEX_BRING_IN_NONE = 0,
-       INDEX_BRING_IN_AFTER,
-} hc_index_bring_in_e;
-
-extern void home_custom_index_bring_in_page(Evas_Object *index, Evas_Object *page);
-
-extern Evas_Object *home_custom_index_create(Evas_Object *layout, Evas_Object *scroller);
-extern void home_custom_index_destroy(Evas_Object *index);
-extern void home_custom_index_update(Evas_Object *index, Evas_Object *scroller, hc_index_bring_in_e after);
-extern void home_custom_index_show(Evas_Object *index, Eina_Bool bAutoHide);
-
-#endif /* __W_HOME_CUSTOM_INDEX_H__ */
diff --git a/apptray-widget-app/inc/common/home_custom_index_info.h b/apptray-widget-app/inc/common/home_custom_index_info.h
deleted file mode 100755 (executable)
index 3edefd1..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Samsung API
- * Copyright (c) 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.1 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __W_HOME_CUSTOM_INDEX_INFO_H__
-#define __W_HOME_CUSTOM_INDEX_INFO_H__
-
-typedef struct {
-       /* innate features; */
-       int count;
-       int current_no;
-
-       /* acquired features */
-       Evas_Object *layout;
-       Evas_Object *scroller;
-       Eina_List *page_index_list;
-} hc_index_info_s;
-
-#endif // __W_HOME_CUSTOM_INDEX_INFO_H__
diff --git a/apptray-widget-app/inc/common/home_custom_scroller.h b/apptray-widget-app/inc/common/home_custom_scroller.h
deleted file mode 100755 (executable)
index b7c99e4..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Samsung API
- * Copyright (c) 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.1 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __HOME_CUSTOM_SCROLLER_H__
-#define __HOME_CUSTOM_SCROLLER_H__
-
-#include <Evas.h>
-#include "common/home_custom_scroller_info.h"
-
-#if !defined(SCROLLAPI)
-#define HCSAPI __attribute__((visibility("hidden")))
-#endif
-
-typedef enum {
-       HOME_CUSTOM_SC_DIRECTION_NONE,
-       HOME_CUSTOM_SC_DIRECTION_LEFT,
-       HOME_CUSTOM_SC_DIRECTION_RIGHT,
-       HOME_CUSTOM_SC_DIRECTION_UP,
-       HOME_CUSTOM_SC_DIRECTION_DOWN,
-} Home_Custom_Sc_Direction;
-
-HCSAPI scroller_info_s *home_custom_scroller_info_create(void);
-
-HCSAPI Evas_Object *home_custom_scroller_add(Evas_Object *parent, scroller_info_s *scroller_info);
-HCSAPI void home_custom_scroller_del(Evas_Object *scroller);
-
-HCSAPI void home_custom_scroller_pause(Evas_Object *scroller);
-HCSAPI void home_custom_scroller_resume(Evas_Object *scroller);
-
-HCSAPI void home_custom_scroller_page_append(Evas_Object *scroller, Evas_Object *page);
-HCSAPI void home_custom_scroller_page_prepend(Evas_Object *scroller, Evas_Object *page);
-HCSAPI void home_custom_scroller_page_remove(Evas_Object *scroller, Evas_Object *page);
-HCSAPI int home_custom_scroller_get_page_count(Evas_Object *scroller);
-
-HCSAPI void home_custom_scroller_list_append(Evas_Object *scroller, Eina_List *page_list);
-HCSAPI void home_custom_scroller_list_remove(Evas_Object *scroller, Eina_List *page_list);
-HCSAPI Eina_List *home_custom_scroller_get_page_list(Evas_Object *scroller);
-
-HCSAPI void home_custom_scroller_edit(Evas_Object *scroller);
-HCSAPI void home_custom_scroller_unedit(Evas_Object *scroller);
-
-HCSAPI void home_custom_scroller_freeze(Evas_Object *scroller, Eina_Bool status);
-HCSAPI Eina_Bool home_custom_scroller_is_freeze(Evas_Object *scroller);
-
-HCSAPI void home_custom_scroller_page_freeze(Evas_Object *scroller, Evas_Object *page, Eina_Bool status);
-HCSAPI Eina_Bool home_custom_scroller_is_page_freeze(Evas_Object *scroller, Evas_Object *page);
-
-HCSAPI void home_custom_scroller_bring_in(Evas_Object *scroller, int page_no);
-HCSAPI void home_custom_scroller_bring_in_page(Evas_Object *scroller, Evas_Object *page);
-HCSAPI void home_custom_scroller_bring_in_direction(Evas_Object *scroller, Home_Custom_Sc_Direction direction);
-HCSAPI Eina_Bool home_custom_scroller_is_scrolling(Evas_Object *scroller);
-
-HCSAPI void home_custom_scroller_region_show(Evas_Object *scroller, int x, int y);
-
-HCSAPI Evas_Object *home_custom_scroller_get_first_page(Evas_Object *scroller);
-HCSAPI Evas_Object *home_custom_scroller_get_last_page(Evas_Object *scroller);
-HCSAPI Evas_Object *home_custom_scroller_get_current_page(Evas_Object *scroller);
-HCSAPI Evas_Object *home_custom_scroller_get_page(Evas_Object *scroller, int index);
-HCSAPI Eina_Bool home_custom_scroller_is_edge(Evas_Object *page);
-
-//index
-HCSAPI Evas_Object *home_custom_scroller_index_add(Evas_Object *parent, Evas_Object *scroller);
-
-#endif //__HOME_CUSTOM_SCROLLER_H__
-
-// End of a file
diff --git a/apptray-widget-app/inc/common/home_custom_scroller_info.h b/apptray-widget-app/inc/common/home_custom_scroller_info.h
deleted file mode 100755 (executable)
index 8376a63..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Samsung API
- * Copyright (c) 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.1 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __HOME_CUSTOM_SCROLLER_INFO_H__
-#define __HOME_CUSTOM_SCROLLER_INFO_H__
-
-#include <Evas.h>
-
-typedef struct {
-       Evas_Object *win;
-
-       Evas_Object *parent;
-       Evas_Object *box_layout;
-       Evas_Object *box;
-       Evas_Object *layout_focus;
-       Evas_Object *top_focus;
-       Evas_Object *bottom_focus;
-
-       Eina_List *list;
-       int list_index;
-
-       int page_width;
-       int page_height;
-
-       int edge_width;
-       int edge_height;
-} scroller_info_s;
-
-#endif //__HOME_CUSTOM_SCROLLER_INFO_H__
-
-// End of a file
index 836c9835f6f79fe88c80d0eab1aef4a8d52fc6da..6110bac6245b2e740199f396c67f9411fb8518cc 100755 (executable)
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #ifndef __APPS_ITEM_INFO_H__
 #define __APPS_ITEM_INFO_H__
 
 #include <Elementary.h>
 #include <Evas.h>
 #include <util.h>
+
 #define APP_TYPE_WGT "wgt"
-#define APP_TYPE_RECENT_APPS "recent"
-#define APP_TYPE_MORE_APPS "more"
 
 typedef struct {
-       /* innate features */
        char *pkgid;
        char *appid;
        char *name;
        char *icon;
        char *type;
-
-       int ordering;
        int open_app;
-       int tts;
        int removable;
-       int uneditable;
-
-       /* acquired features */
-       Evas_Object *win;
-       Evas_Object *layout;
-
-       Evas_Object *scroller;
-       Evas_Object *page;
-
-       Evas_Object *item;
-       Evas_Object *item_inner;
-       Evas_Object *center;
+       Eina_Bool is_selected;
 } item_info_s;
 
-typedef enum {
-       ITEM_INFO_LIST_TYPE_INVALID = 0,
-       ITEM_INFO_LIST_TYPE_ALL,
-       ITEM_INFO_LIST_TYPE_FACTORY_BINARY,
-       ITEM_INFO_LIST_TYPE_XML,
-       ITEM_INFO_LIST_TYPE_MAX,
-} item_info_list_type_e;
-
-HAPI void apps_item_info_destroy(item_info_s *item_info);
 HAPI item_info_s *apps_item_info_create(const char *appid);
-
-HAPI item_info_s *apps_recent_apps_item_info_create();
-HAPI item_info_s *apps_more_apps_item_info_create();
-HAPI item_info_s *apps_item_info_get(Evas_Object *win, const char *appid);
-
-HAPI Eina_List *apps_item_info_list_create(item_info_list_type_e list_type);
-HAPI void apps_item_info_list_destroy(Eina_List *item_info_list);
-
-HAPI Evas_Object *apps_item_info_list_get_item(Eina_List *item_info_list, const char *appid);
-HAPI int apps_item_info_list_get_ordering(Eina_List *item_info_list, const char *appid);
-
-HAPI void apps_item_info_list_change_language(Eina_List *item_info_list);
-
-HAPI int apps_item_info_is_support_tts(const char *appid);
-
-HAPI item_info_s *apps_item_info_dup(item_info_s *item_info);
+HAPI void apps_item_info_destroy(item_info_s *item_info);
 
 #endif // __APPS_ITEM_INFO_H__
index 875928fdc599495582b5be4f94edff009ae77f3f..7dac4bab8775aaf4729411b0e3fb2d729c4bc7d3 100755 (executable)
@@ -241,6 +241,22 @@ enum {
        TUTORIAL_LANGUAGE_GEORGIA,
 };
 
+#undef FREE
+#define FREE(ptr) \
+       do { \
+               free(ptr); \
+               ptr = NULL; \
+       } while (0)
+
+#undef DEL_EVAS_OBJECT
+#define DEL_EVAS_OBJECT(ptr) \
+       do { \
+               if (ptr) { \
+                       evas_object_del(ptr); \
+                       ptr = NULL; \
+               } \
+       } while (0)
+
 #if !defined(_EDJ)
 #define _EDJ(a) elm_layout_edje_get(a)
 #endif
index 1b5e5991f6cd0dababb78803d3487e7261b04d7c..0a5e3519b1c19541d5a4ef1b4f2fb9cbbf0e3c4a 100755 (executable)
@@ -5,6 +5,11 @@
         <label>Apps</label>
         <icon>org.tizen.apptray-widget-app.png</icon>
     </ui-application>
+    <widget-application appid="org.tizen.apptray-widget" exec="apptray-widget" main="true" update-period="0" hw-acceleration="on">
+        <label>apptray-widget</label>
+        <icon>apps_widget_preview.png</icon>
+        <support-size preview="apps_widget_preview.png">2x2</support-size>
+    </widget-application>
     <privileges>
         <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
         <privilege>http://tizen.org/privilege/packagemanager.clearcache</privilege>
         <privilege>http://tizen.org/privilege/message.read</privilege>
         <privilege>http://tizen.org/privilege/contact.read</privilege>
     </privileges>
-    <widget-application appid="org.tizen.apptray-widget" exec="apptray-widget" main="true" update-period="0" hw-acceleration="on">
-        <label>apptray-widget</label>
-        <icon>apps_widget_preview.png</icon>
-        <support-size preview="apps_widget_preview.png">2x2</support-size>
-    </widget-application>
-    <privileges>
-        <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
-    </privileges>
 </manifest>
index dbf1e7fa40f47f287fbb8367676b3d353cceefec..f1debea99933abfad5c29c189700f5f9c25901a6 100755 (executable)
@@ -16,6 +16,10 @@ styles {
                name: "name_style";
                base: "font=TIZEN:style=Light text_class=AT0315 font_size="24" align=middle color=#FFFFFF color_class=AT0315 ellipsis=1 wrap=mixed";
        }
+       style {
+               name: "select_indicator";
+               base: "font=Tizen:weight=SemiBold:width=Condensed:style=Bold font_size=32 align=center color=#fafafaff ellipsis=1.0 wrap=mixed text_class=tizen";
+       }
 }
 
 images {
@@ -32,8 +36,90 @@ images {
        image : "apps_edit_icon_select_ef_sv.png" COMP;
 }
 
+#define SELECT_INDICATOR_MIN_SIZE_INC 100 75
+#define SELECT_INDICATOR_MAX_SIZE_INC 180 75
+#define SELECT_INDICATOR_PADDING_LT_SIZE_INC 10 11
+#define SELECT_INDICATOR_PADDING_RB_SIZE_INC 10 11
+#define SELECT_INDICATOR_TEXT_MIN_SIZE_INC 80 42
+#define SELECT_INDICATOR_TEXT_MAX_SIZE_INC 160 42
+
 collections {
        base_scale: 1.3;
+
+       group { "select_indicator";
+               images{
+                       image: "tw_list_number_bg.#.png" COMP;
+                       image: "tw_list_number_ef.#.png" COMP;
+               }
+               parts {
+                       part { name: "base";
+                               type: SPACER;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: SELECT_INDICATOR_MIN_SIZE_INC;
+                                       max: SELECT_INDICATOR_MAX_SIZE_INC;
+                               }
+                       }
+                       part { name: "padding_top_left";
+                               type: SPACER;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       rel1 { relative: 0.0 0.0; to: "base"; }
+                                       rel2 { relative: 0.0 0.0; to: "base"; }
+                                       min: SELECT_INDICATOR_PADDING_LT_SIZE_INC;
+                                       fixed: 1 1;
+                               }
+                       }
+                       part { name: "padding_bottom_right";
+                               type: SPACER;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       align: 1.0 1.0;
+                                       rel1 { relative: 1.0 1.0; to: "base"; }
+                                       rel2 { relative: 1.0 1.0; to: "base"; }
+                                       min: SELECT_INDICATOR_PADDING_RB_SIZE_INC;
+                                       fixed: 1 1;
+                               }
+                       }
+                       part { name: "bg";
+                               type: IMAGE;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       image.normal: "tw_list_number_bg.#.png";
+                                       rel1.to: "base";
+                                       rel2.to: "base";
+                                       color: 0 53 74 255;
+                               }
+                       }
+                       part { name: "ef";
+                               type: IMAGE;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       image.normal: "tw_list_number_ef.#.png";
+                                       rel1.to: "base";
+                                       rel2.to: "base";
+                                       color: 0 0 0 255;
+                               }
+                       }
+                       part { name: "elm.text";
+                               type: TEXTBLOCK;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: SELECT_INDICATOR_TEXT_MIN_SIZE_INC;
+                                       max: SELECT_INDICATOR_TEXT_MAX_SIZE_INC;
+                                       rel1 { relative: 1.0 1.0; to: "padding_top_left"; }
+                                       rel2 { relative: 0.0 0.0; to: "padding_bottom_right"; }
+                                       text {
+                                               min: 1 0;
+                                               style: "select_indicator";
+                                       }
+                                       fixed: 0 1;
+                               }
+                       }
+               }
+       }
+
        group {
                name: "layout";
                parts {
diff --git a/apptray-widget-app/res/edje/images/tw_list_number_bg.#.png b/apptray-widget-app/res/edje/images/tw_list_number_bg.#.png
new file mode 100644 (file)
index 0000000..a053ab2
Binary files /dev/null and b/apptray-widget-app/res/edje/images/tw_list_number_bg.#.png differ
diff --git a/apptray-widget-app/res/edje/images/tw_list_number_ef.#.png b/apptray-widget-app/res/edje/images/tw_list_number_ef.#.png
new file mode 100644 (file)
index 0000000..13f9f4e
Binary files /dev/null and b/apptray-widget-app/res/edje/images/tw_list_number_ef.#.png differ
index ac8305ebe6d13fbaf6fa2b822e245af78a3ef38f..53f3acff362db4bcf308f8d43d358075292f3a73 100755 (executable)
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include "app-widget-app.h"
-
-#undef TIZEN_SDK
 
 #include <app.h>
-#include <Evas.h>
 #include <Elementary.h>
 #include <widget_service.h>
 #include <widget_errno.h>
 #include <package-manager.h>
 #include <bundle.h>
 #include <app_preference.h>
+#include <efl_extension.h>
+#include <system_settings.h>
+
+#include "app-widget-app_log.h"
 #include "key.h"
 #include "util.h"
-#include "common/home_custom_scroller.h"
 #include "item_info.h"
-#include "elm_layout_legacy.h"
 
 #define IDS_IDLE_BODY_APPS "Apps"
 #define EDJE_FILE "edje/add_to_shortcut.edj"
-#define SCHEDULE_ICON_ARABIC "res/schedule_arabic_%s.png"
-#define LANGUAGE_ARABIC "ar"
-#define  PACKAGE_MANAGER_PKGINFO_PROP_NODISPALY  "PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING"
 #define APP_WIDGET_PKGID "org.tizen.app-widget"
 #define DEFAULT_APP_ORDER "org.tizen.apptray-widget-app org.tizen.watch-setting empty empty"
 #define APPS_PKG "org.tizen.apptray-widget-app"
 #define BUNDLE_KEY_WIDGET_INSTANCE_ID  "instance_id"
 
 #define APP_SLOTS_MAX_COUNT 4
+#define GENLIST_ITEM_ICON_DIMENTION 76
+
+#define SELECT_COUNT_BUF_SIZE 10
+
+static Elm_Genlist_Item_Class header_itc = { ELM_GEN_ITEM_CLASS_HEADER, 0 };
+static bool header_itc_inited = false;
+
+static Elm_Genlist_Item_Class content_itc = { ELM_GEN_ITEM_CLASS_HEADER, 0 };
+static bool content_itc_inited = false;
+
+static Elm_Genlist_Item_Class empty_itc = { ELM_GEN_ITEM_CLASS_HEADER, 0 };
+static bool empty_itc_inited = false;
 
 typedef enum {
        APPTRAY_WGT_APP_LAUNCH_TYPE_UNDEFINED = 0,
@@ -95,20 +102,25 @@ static _apptray_wgt_app_slot_convertor _input_slot_conv[5] = {
 
 typedef struct appdata {
        Evas_Object *edit_win;
+       Evas_Object *edit_layout;
+
        Evas_Object *select_win;
+       Evas_Object *select_conform;
+       Eext_Circle_Surface *select_circle_surf;
        Evas_Object *select_layout;
-       Evas_Object *edit_layout;
+       Evas_Object *select_count_btn;
+       int select_count;
+
        Evas_Object *scroller;
        Evas_Object *title;
        char *widget_instance_id;
        _apptray_wgt_launch_type_e launch_type;
-       char *index;
-       Ecore_Event_Handler *press_handler;
        Ecore_Event_Handler *release_handler;
-       Eina_List *app_list;
-       Eina_List *item_list;
+       Eina_List *all_app_list;
        char *appid_list[APP_SLOTS_MAX_COUNT];
        char *applabel_list[APP_SLOTS_MAX_COUNT];
+
+       Evas_Object *toast_popup;
 } appdata_s;
 
 char *widget_id = NULL;
@@ -116,37 +128,111 @@ int slot_index = 0;
 int pressed_index = 0;
 int dst_index = 0;
 Evas_Object *transit_obj = NULL;
-Eina_Bool hide_flag = EINA_FALSE;
 Eina_Bool longpress_flag = EINA_FALSE;
 Eina_Bool launch_flag = EINA_TRUE;
 Eina_Bool transit_go = EINA_FALSE;
-Eina_List *font_theme;
-Elm_Theme *theme;
 Ecore_Timer *longpress_timer;
 int empty_count = 0;
 
 static appdata_s *g_info = NULL;
 
-static appdata_s *_get_info(void){
-       return g_info;
-}
-
+static char *strdup_s(const char *val);
+static void _update_appid_list_with_selected_items();
+static void _update_content(void);
+static Eina_Bool _key_release_cb(void *data, int type, void *event);
 static void _terminate_add_to_shortcut(void);
-Evas_Object *_set_app_slot(const char *appid, int pos);
-item_info_s *apps_apps_info_create(const char *appid);
-item_info_s *apps_recent_info_create(const char *appid);
-static void _move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static Evas_Object *_create_win(appdata_s *info, const char *name, const char *title);
+static Eina_Bool _longpress_timer_cb(void *data);
+static void _render_post_cb(void *data, Evas *e , void *event_info);
+
+static void _plus_mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+static void _del_mouse_down_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+static void _del_mouse_up_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+static void _del_mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source);
 static void _down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _transit_del_cb(void *data, Elm_Transit *transit);
+static void _anim_switch_item(Evas_Object *item, int src, int dst);
+static void _move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
 static void _up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _create_edit_layout(appdata_s *info);
+static char *_title_item_get_txt_cb(void *data, Evas_Object *obj, const char *part);
+static Elm_Genlist_Item_Class *_get_gl_itc_header();
+static char *_cont_item_get_txt_cb(void *data, Evas_Object *obj, const char *part);
+static void _toast_popup_hide_cb(void *data, Evas_Object *obj, void *event_info);
+static void _toast_popup_dismiss_cb(void *data, Evas_Object *obj, void *event_info);
+static void _create_toast_popup(const char *text);
+static void _gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void _cont_item_del_cb(void *data, Evas_Object *obj);
+static Elm_Genlist_Item_Class *_get_gl_itc_content();
+static Elm_Genlist_Item_Class *_get_gl_itc_empty();
+static void _set_select_genlist_content(Evas_Object *genlist, appdata_s *info);
+static Evas_Object *_create_simple_genlist(Evas_Object *parent, appdata_s *info);
+static void _gl_add_header_item(Evas_Object *gl);
+static bool _check_already_added_apps(const char *appid);
+static void _gl_item_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void _gl_add_apps_items(Evas_Object *gl, appdata_s *info);
+static void _gl_add_empty_item(Evas_Object *gl);
+static Evas_Object *_create_bottom_btn_ly(appdata_s *info);
+static void _bottom_btn_click_cb(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *_create_bottom_btn(Evas_Object *parent, appdata_s *info);
+static Evas_Object *_create_genlist_ly(Evas_Object *parent, appdata_s *info);
+static Evas_Object *_create_pick_genlist(Evas_Object *parent, appdata_s *info);
+static Evas_Object *_create_select_count_btn(Evas_Object *parent, appdata_s *info);
+static void _create_select_view(appdata_s *info);
+Evas_Object *_set_app_slot(const char *appid, int pos);
 
+static int _apps_sort_cb(const void *d1, const void *d2);
+static int _apps_all_cb(pkgmgrinfo_appinfo_h handle, void *user_data);
+static Eina_List *_read_all_apps(Eina_List **list);
+static Eina_Bool _load_list(void* data);
 static void _process_pick_operation(appdata_s *info, app_control_h service);
 static void _process_main_operation(appdata_s *info, app_control_h service, const char *app_list);
+static bool _create_edit_window(appdata_s *info, const char *name, const char *title);
+static Evas_Object *_create_conformant_without_indicator(Evas_Object *win);
+static bool _create_select_window(appdata_s *info, const char *name, const char *title);
+
+static bool _app_create(void *data);
+static void _app_terminate(void *data);
+static void _app_pause(void *data);
+static void _app_resume(void *data);
+static void _app_control(app_control_h service, void *data);
+static void _app_lang_changed(app_event_info_h event_info, void *user_data);
+static void _app_region_changed(app_event_info_h event_info, void *user_data);
 
 static char *strdup_s(const char *val)
 {
        return (val ? strdup(val) : NULL);
 }
 
+static void _update_appid_list_with_selected_items()
+{
+       item_info_s *item_info = NULL;
+       Eina_List *l = NULL;
+       Eina_List *n = NULL;
+       int selected_app_count = 0;
+       int i = 0;
+
+       EINA_LIST_FOREACH_SAFE(g_info->all_app_list, l, n, item_info) {
+               if (item_info->is_selected && item_info->appid) {
+                       ++selected_app_count;
+               }
+       }
+
+       EINA_LIST_FOREACH_SAFE(g_info->all_app_list, l, n, item_info) {
+               if (item_info->is_selected && item_info->appid) {
+                       free(g_info->appid_list[_input_slot_conv[selected_app_count].slot_seq_arr[i]]);
+                       g_info->appid_list[_input_slot_conv[selected_app_count].slot_seq_arr[i]] = strdup(item_info->appid);
+                       i++;
+               }
+       }
+
+       for (i = 0; i < APP_SLOTS_MAX_COUNT; i++) {
+               if (!g_info->appid_list[i]) {
+                       g_info->appid_list[i] = strdup("empty");
+               }
+       }
+}
+
 static void _update_content(void)
 {
        _ENTER;
@@ -180,6 +266,7 @@ static void _update_content(void)
                _E("bundle_create failed");
                return;
        }
+
        bundle_add_str(b_tmp, BUNDLE_KEY_SHORTCUT_LIST, content);
        res = widget_service_trigger_update(APP_WIDGET_CONTENT_KEY, g_info->widget_instance_id, b_tmp, 1);
        if (res != WIDGET_ERROR_NONE) {
@@ -187,40 +274,7 @@ static void _update_content(void)
        }
        bundle_free(b_tmp);
 
-}
-
-char *_get_date(void)
-{
-       _ENTER;
-       struct tm st;
-       time_t tt = time(NULL);
-       localtime_r(&tt, &st);
-
-       char str_date[5] = {0,};
-       char *date = NULL;
-
-       snprintf(str_date, sizeof(str_date), "%d", st.tm_mday);
-
-       date = strdup(str_date);
-
-       return date;
-
-}
-
-static void _init_theme(void)
-{
-       _ENTER;
-       theme = elm_theme_new();
-}
-
-static void _fini_theme(void)
-{
-       _ENTER;
-       elm_theme_free(theme);
-       theme = NULL;
-       if (font_theme) {
-               font_theme = NULL;
-       }
+       _EXIT;
 }
 
 static Eina_Bool _key_release_cb(void *data, int type, void *event)
@@ -231,13 +285,19 @@ static Eina_Bool _key_release_cb(void *data, int type, void *event)
 
        _D("%s", ev->keyname);
 
-       if (!strcmp(ev->keyname, /*KEY_BACK*/"XF86Back") || !strcmp(ev->keyname, /*KEY_POWER*/"XF86PowerOff")) {
-               _D("back or home key cb");
-               if(evas_object_visible_get(g_info->select_win) == EINA_TRUE
+       if (g_info->toast_popup) {
+               return ECORE_CALLBACK_PASS_ON;
+       }
+
+       if (!strcmp(ev->keyname, "XF86Back") || !strcmp(ev->keyname, "XF86PowerOff")) {
+               if(evas_object_visible_get(g_info->select_win)
                                && g_info->launch_type != APPTRAY_WGT_APP_LAUNCH_TYPE_PICK) {
                        evas_object_hide(g_info->select_win);
                        evas_object_show(g_info->edit_win);
-               } else{
+               } else {
+                       if (g_info->launch_type == APPTRAY_WGT_APP_LAUNCH_TYPE_PICK) {
+                               _update_appid_list_with_selected_items();
+                       }
                        _terminate_add_to_shortcut();
                }
        }
@@ -248,22 +308,31 @@ static void _terminate_add_to_shortcut(void)
 {
        _ENTER;
 
-       appdata_s *info = _get_info();
+       int i = 0;
 
        _update_content();
 
-       evas_object_del(info->edit_win);
-       info->edit_win = NULL;
+       DEL_EVAS_OBJECT(g_info->edit_win);
 
-       evas_object_del(info->select_win);
-       info->select_win = NULL;
+       DEL_EVAS_OBJECT(g_info->select_win);
 
-       free(info->widget_instance_id);
+       FREE(g_info->widget_instance_id);
+
+       eina_list_free(g_info->all_app_list);
+       g_info->all_app_list = NULL;
+
+       for (; i < APP_SLOTS_MAX_COUNT; i++) {
+               FREE(g_info->appid_list[i]);
+               FREE(g_info->applabel_list[i]);
+       }
 
        if (g_info->release_handler) {
                ecore_event_handler_del(g_info->release_handler);
+               g_info->release_handler = NULL;
        }
 
+       g_info = NULL;
+
        elm_exit();
 }
 
@@ -284,7 +353,8 @@ static Evas_Object *_create_win(appdata_s *info, const char *name, const char *t
        return eo;
 }
 
-static Eina_Bool _longpress_timer_cb(void *data){
+static Eina_Bool _longpress_timer_cb(void *data)
+{
        _ENTER;
        Evas_Object *item = NULL;
        char index[10] = {0};
@@ -298,7 +368,8 @@ static Eina_Bool _longpress_timer_cb(void *data){
        return ECORE_CALLBACK_CANCEL;
 }
 
-static void _render_post_cb(void *data, Evas *e , void *event_info){
+static void _render_post_cb(void *data, Evas *e , void *event_info)
+{
        _ENTER;
        _D("render finished");
        Evas_Object *slot = (Evas_Object *)data;
@@ -307,42 +378,8 @@ static void _render_post_cb(void *data, Evas *e , void *event_info){
        elm_object_signal_emit(slot, "show_vi", "slot");
 }
 
-static void _mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source){
-       _ENTER;
-
-       _D("icon clicked");
-
-       item_info_s *item_info = evas_object_data_get((Evas_Object *)data, "p_i_n");
-
-       if(!item_info)
-               return;
-
-       g_info->appid_list[slot_index] = strdup(item_info->appid);
-
-       Evas_Object *slot = _set_app_slot(item_info->appid, slot_index);
-       elm_object_signal_emit(slot, "hide_icon", "slot");
-       empty_count--;
-       evas_object_hide(g_info->select_win);
-       evas_object_show(g_info->edit_win);
-       evas_event_callback_add(evas_object_evas_get(g_info->edit_layout), EVAS_CALLBACK_RENDER_POST, _render_post_cb, (void *)slot);
-       _update_content();
-}
-
-static void _mouse_down_cb(void *data, Evas_Object *o, const char *emission, const char *source){
-       _D("icon mouse down");
-       _ENTER;
-       Evas_Object *icon = elm_object_part_content_get((Evas_Object *)data, "icon");
-       evas_object_color_set(icon, 255, 255, 255, 127);
-}
-
-static void _mouse_up_cb(void *data, Evas_Object *o, const char *emission, const char *source){
-       _D("icon mouse up");
-       _ENTER;
-       Evas_Object *icon = elm_object_part_content_get((Evas_Object *)data, "icon");
-       evas_object_color_set(icon, 255, 255, 255, 255);
-}
-
-static void _plus_mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source){
+static void _plus_mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+{
        _D("plus clicked");
        _ENTER;
        if(launch_flag == EINA_FALSE){
@@ -354,26 +391,29 @@ static void _plus_mouse_clicked_cb(void *data, Evas_Object *o, const char *emiss
        evas_object_show(g_info->select_win);
 }
 
-static void _del_mouse_down_cb(void *data, Evas_Object *o, const char *emission, const char *source){
+static void _del_mouse_down_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+{
        _ENTER;
        _D("del mouse down");
        elm_object_signal_emit((Evas_Object *)data, "pressed", "slot");
 }
 
-static void _del_mouse_up_cb(void *data, Evas_Object *o, const char *emission, const char *source){
+static void _del_mouse_up_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+{
        _ENTER;
        _D("del mouse up");
        elm_object_signal_emit((Evas_Object *)data, "released", "slot");
 }
 
-static void _del_mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source){
+static void _del_mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+{
        _ENTER;
        _D("del mouse clicked");
 
        char index[10] = {0};
        Evas_Object *slot = NULL;
        int ret = 0;
-       Evas_Coord x,y,w,h;
+       Evas_Coord x, y, w, h;
        int pos = 0;
 
        if(transit_go){
@@ -465,7 +505,8 @@ static void _down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
        longpress_timer = ecore_timer_add(0.5, _longpress_timer_cb, obj);
 }
 
-static void _transit_del_cb(void *data, Elm_Transit *transit){
+static void _transit_del_cb(void *data, Elm_Transit *transit)
+{
        _ENTER;
        _D("transit end");
        char index[10] = {0};
@@ -477,7 +518,8 @@ static void _transit_del_cb(void *data, Elm_Transit *transit){
        transit_obj = NULL;
 }
 
-static void _anim_switch_item(Evas_Object *item, int src, int dst){
+static void _anim_switch_item(Evas_Object *item, int src, int dst)
+{
        _ENTER;
        if(transit_go == EINA_TRUE) return;
        transit_go = EINA_TRUE;
@@ -616,79 +658,8 @@ static void _up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
        _update_content();
 }
 
-static Evas_Object *_create_item(Evas_Object *scroller, item_info_s *item_info)
+Evas_Object *_set_app_slot(const char *appid, int pos)
 {
-       _ENTER;
-       Evas_Object *page = NULL;
-       Evas_Object *page_rect = NULL;
-       Evas_Object *icon = NULL;
-       page = elm_layout_add(scroller);
-       retv_if(!page, NULL);
-       char full_path[PATH_MAX] = { 0, };
-       apptray_wgt_app_utils_get_resource(EDJE_FILE, full_path, sizeof(full_path));
-       _D("full_path:%s",full_path);
-       int ret = elm_layout_file_set(page, full_path, "item");
-       _D("ret:%d",ret);
-
-       evas_object_size_hint_weight_set(page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(page, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       evas_object_show(page);
-
-       page_rect = evas_object_rectangle_add(evas_object_evas_get(page));
-       evas_object_size_hint_min_set(page_rect, (160), (360));
-       evas_object_color_set(page_rect, 0, 0, 0, 0);
-       evas_object_show(page_rect);
-       elm_object_part_content_set(page, "bg", page_rect);
-
-       icon = evas_object_image_add(evas_object_evas_get(page));
-       evas_object_repeat_events_set(icon, EINA_TRUE);
-       _D("icon:%s ,name:%s",item_info->icon,item_info->name);
-       evas_object_image_file_set(icon, item_info->icon, NULL);
-       evas_object_image_filled_set(icon, EINA_TRUE);
-       evas_object_show(icon);
-       elm_object_part_content_set(page, "icon", icon);
-       elm_object_part_text_set(page, "name", item_info->name);
-
-       elm_object_signal_callback_add(page, "mouse_clicked", "*", _mouse_clicked_cb, page);
-       elm_object_signal_callback_add(page, "mouse_down", "*", _mouse_down_cb, page);
-       elm_object_signal_callback_add(page, "mouse_up", "*", _mouse_up_cb, page);
-
-       home_custom_scroller_page_append(scroller, page);
-       evas_object_data_set(page, "p_i_n", item_info);
-       _EXIT;
-       return page;
-}
-
-void app_shortcut_show_name(Evas_Object *page){
-       _ENTER;
-       appdata_s *info = _get_info();
-       item_info_s *item_info = NULL;
-       item_info = evas_object_data_get(page, "p_i_n");
-
-       page = home_custom_scroller_get_current_page(info->scroller);
-
-       if(item_info){
-               _D("get item info from the page. %s", item_info->name);
-               elm_object_part_text_set(info->select_layout, "name", item_info->name);
-               elm_object_signal_emit(info->select_layout, "show_name", "name");
-               edje_object_message_signal_process(info->select_layout);
-               hide_flag = EINA_FALSE;
-       }
-
-}
-
-void app_shortcut_hide_name(){
-       _ENTER;
-       appdata_s *info = _get_info();
-       if(hide_flag == EINA_FALSE){
-               _D("hide app name");
-               elm_object_signal_emit(info->select_layout, "hide_name", "name");
-               hide_flag = EINA_TRUE;
-       }
-
-}
-
-Evas_Object *_set_app_slot(const char *appid, int pos){
        _ENTER;
        pkgmgrinfo_appinfo_h appinfo_h = NULL;
        _D("%s", appid);
@@ -790,273 +761,406 @@ Evas_Object *_set_app_slot(const char *appid, int pos){
        return slot;
 }
 
-static void _create_edit_layout(appdata_s *info){
+static void _create_edit_layout(appdata_s *info)
+{
        _ENTER;
-       int ret = 0;
+
        Evas_Object *layout = NULL;
-       layout = elm_layout_add(info->edit_win);
        char full_path[PATH_MAX] = { 0, };
-       apptray_wgt_app_utils_get_resource(EDJE_FILE, full_path, sizeof(full_path));
-       _D("full_path:%s",full_path);
-       ret = elm_layout_file_set(layout, full_path, "edit_layout");
-       if(ret == EINA_FALSE){
-               _E("failed to set layout");
-               return;
-       }
-       info->edit_layout = layout;
 
+       layout = elm_layout_add(info->edit_win);
+       apptray_wgt_app_utils_get_resource(EDJE_FILE, full_path, sizeof(full_path));
+       elm_layout_file_set(layout, full_path, "edit_layout");
        evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
        evas_object_resize(layout, 360, 360);
        evas_object_show(layout);
+
+       info->edit_layout = layout;
 }
 
+static char *_title_item_get_txt_cb(void *data, Evas_Object *obj, const char *part)
+{
+       return strdup("Select application");
+}
 
-static void _create_layout(appdata_s *info){
-       _ENTER;
-       Evas_Object *layout = NULL;
-       int ret = 0;
-       Eina_List *item_info_list = NULL;
-       item_info_s *item_info = NULL;
-       layout = elm_layout_add(info->select_win);
-       char full_path[PATH_MAX] = { 0, };
-       apptray_wgt_app_utils_get_resource(EDJE_FILE, full_path, sizeof(full_path));
-       _D("full_path:%s",full_path);
-       ret = elm_layout_file_set(layout, full_path, "layout");
-       if(ret == EINA_FALSE){
-               _E("failed to set layout");
-               return;
+static Elm_Genlist_Item_Class *_get_gl_itc_header()
+{
+       if (!header_itc_inited) {
+               header_itc.item_style = "title";
+               header_itc.decorate_item_style = NULL;
+               header_itc.decorate_all_item_style = NULL;
+               header_itc.func.text_get = _title_item_get_txt_cb;
+               header_itc.func.content_get = NULL;
+               header_itc.func.state_get = NULL;
+               header_itc.func.del = NULL;
+               header_itc_inited = true;
        }
-       info->select_layout = layout;
+       return &header_itc;
+}
 
-       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_resize(layout, 360, 360);
-       evas_object_show(layout);
-       _D("layout create done");
-       /* scroller */
-       scroller_info_s *scroller_info = home_custom_scroller_info_create();
+static char *_cont_item_get_txt_cb(void *data, Evas_Object *obj, const char *part)
+{
+       _D();
+       if (!strcmp(part, "elm.text")) {
+               _D();
+               item_info_s *item_info = data;
+               retv_if(!item_info, NULL);
+               _D("Name created");
+               return strdup(item_info->name);
+       }
+       return NULL;
+}
 
-       scroller_info->page_width = 160;
-       scroller_info->page_height = 360;
+static void _toast_popup_hide_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       ret_if(!obj);
+       elm_popup_dismiss(obj);
+}
 
-       scroller_info->edge_width = 100;//76;
-       scroller_info->edge_height = 360;//165;
+static void _toast_popup_dismiss_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       ret_if(!obj);
+       evas_object_del(obj);
+       g_info->toast_popup = NULL;
+}
 
-       Evas_Object *scroller = home_custom_scroller_add(layout, scroller_info);
-       if(!scroller){
-               _E("scroller is NULL");
-               free(scroller_info);
-               return;
-       }
-       info->scroller = scroller;
-       elm_object_part_content_set(layout, "scroller", scroller);
-
-
-       evas_object_show(scroller);
-       _D("scroller create done");
-       /* get apps list */
-       item_info_list = g_info->app_list;
-
-       //Handle AppsUI case
-       item_info_s *apps_item_info = NULL;
-       Evas_Object *apps_item = NULL;
-       g_info->item_list = NULL;
-       apps_item_info = apps_item_info_create(APPS_PKG);
-       if(NULL == apps_item_info){
-               _E("failed to create item info");
+static void _create_toast_popup(const char *text)
+{
+       Evas_Object *popup = NULL;
+
+       if (g_info->toast_popup) {
+               evas_object_del(g_info->toast_popup);
        }
-       else{
-               free(apps_item_info->name);
-               apps_item_info->name = strdup(IDS_IDLE_BODY_APPS);
-               _D("%s,%s,%s", apps_item_info->appid, apps_item_info->icon, apps_item_info->name);
-               apps_item = _create_item(scroller, apps_item_info);
-               g_info->item_list = eina_list_append(g_info->item_list, apps_item);
+
+       popup = elm_popup_add(g_info->select_win);
+       elm_object_style_set(popup, "toast/circle");
+       elm_popup_orient_set(popup, ELM_POPUP_ORIENT_BOTTOM);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, _toast_popup_hide_cb, NULL);
+       evas_object_smart_callback_add(popup, "dismissed", _toast_popup_dismiss_cb, NULL);
+       elm_object_part_text_set(popup, "elm.text", text);
+       evas_object_smart_callback_add(popup, "block,clicked", _toast_popup_hide_cb, NULL);
+       elm_popup_timeout_set(popup, 2.0);
+       evas_object_smart_callback_add(popup, "timeout", _toast_popup_hide_cb, NULL);
+
+       evas_object_show(popup);
+
+       g_info->toast_popup = popup;
+}
+
+static void _gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       item_info_s *item_info = data;
+       char buf[SELECT_COUNT_BUF_SIZE] = { 0 };
+
+       if (g_info->select_count >= 4) {
+               if (item_info->is_selected) {
+                       item_info->is_selected = false;
+                       elm_check_state_set(obj, EINA_FALSE);
+                       _create_toast_popup("You can only add up to 4 apps");
+                       return;
+               }
        }
 
-       Eina_List *l = NULL;
-       Eina_List *n = NULL;
-       EINA_LIST_FOREACH_SAFE(item_info_list, l, n, item_info) {
-               Evas_Object *page_item = NULL;
-               _D("create item for each pkg pkgid:%s",item_info->pkgid);
-               page_item = _create_item(scroller, item_info);
-               g_info->item_list = eina_list_append(g_info->item_list, page_item);
+       g_info->select_count += (item_info->is_selected)? 1 : -1;
+       snprintf(buf, sizeof(buf), "%d/4", g_info->select_count);
+       elm_object_text_set(g_info->select_count_btn, buf);
+}
+
+static Evas_Object *_cont_item_get_content_cb(void *data, Evas_Object *obj, const char *part)
+{
+       item_info_s *item_info = data;
+       retv_if(!item_info, NULL);
+
+       if (!strcmp(part, "elm.icon")) {
+               Evas_Object *image = NULL;
+
+               image = elm_image_add(obj);
+               elm_image_file_set(image, item_info->icon, NULL);
+               elm_image_aspect_fixed_set(image, EINA_TRUE);
+               evas_object_repeat_events_set(image, EINA_TRUE);
+               evas_object_size_hint_min_set(image,
+                               ELM_SCALE_SIZE(GENLIST_ITEM_ICON_DIMENTION),
+                               ELM_SCALE_SIZE(GENLIST_ITEM_ICON_DIMENTION));
+               evas_object_show(image);
+               return image;
+       } else if (g_info->launch_type == APPTRAY_WGT_APP_LAUNCH_TYPE_PICK && !strcmp(part, "elm.swallow.center_check")) {
+               Evas_Object *check = elm_check_add(obj);
+               elm_object_style_set(check, "genlist/select_mode");
+               elm_check_state_set(check, EINA_FALSE);
+               evas_object_smart_callback_add(check, "changed", _gl_check_clicked_cb, data);
+               elm_check_state_pointer_set(check, &item_info->is_selected);
+               evas_object_repeat_events_set(check, EINA_FALSE);
+               evas_object_propagate_events_set(check, EINA_FALSE);
+               evas_object_show(check);
+
+               return check;
        }
-       eina_list_free(item_info_list);
-       Evas_Object *index = home_custom_scroller_index_add(layout, scroller);
-       if(!index) return;
+       return NULL;
+}
 
-       elm_object_part_content_set(layout, "index", index);
+static void _cont_item_del_cb(void *data, Evas_Object *obj)
+{
+       apps_item_info_destroy(data);
+}
 
-       _D("create layout success");
-       return;
+static Elm_Genlist_Item_Class *_get_gl_itc_content()
+{
+       if (!content_itc_inited) {
+               content_itc.item_style = "1text.1icon";
+               content_itc.decorate_item_style = NULL;
+               content_itc.decorate_all_item_style = NULL;
+               content_itc.func.text_get = _cont_item_get_txt_cb;
+               content_itc.func.content_get = _cont_item_get_content_cb;
+               content_itc.func.state_get = NULL;
+               content_itc.func.del = _cont_item_del_cb;
+               content_itc_inited = true;
+       }
+       return &content_itc;
 }
 
-void apps_item_info_destroy(item_info_s *item_info)
+static Elm_Genlist_Item_Class *_get_gl_itc_empty()
 {
-       _ENTER;
-       ret_if(!item_info);
+       if (!empty_itc_inited) {
+               empty_itc.item_style = "1text.1icon";
+               empty_itc.decorate_item_style = NULL;
+               empty_itc.decorate_all_item_style = NULL;
+               empty_itc.func.text_get = NULL;
+               empty_itc.func.content_get = NULL;
+               empty_itc.func.state_get = NULL;
+               empty_itc.func.del = NULL;
+               empty_itc_inited = true;
+       }
+       return &empty_itc;
+}
 
-       if (item_info->pkgid) free(item_info->pkgid);
-       if (item_info->appid) free(item_info->appid);
-       if (item_info->name) free(item_info->name);
-       if (item_info->icon) free(item_info->icon);
-       if (item_info->type) free(item_info->type);
-       if (item_info) free(item_info);
+static void _set_select_genlist_content(Evas_Object *genlist, appdata_s *info)
+{
+       if (info->launch_type == APPTRAY_WGT_APP_LAUNCH_TYPE_PICK) {
+               _gl_add_empty_item(genlist);
+       } else {
+               _gl_add_header_item(genlist);
+       }
+       _gl_add_apps_items(genlist, info);
+       _gl_add_empty_item(genlist);
 }
 
-item_info_s *apps_apps_info_create(const char *appid)
+static Evas_Object *_create_simple_genlist(Evas_Object *parent, appdata_s *info)
 {
-       _ENTER;
-       item_info_s *item_info = NULL;
-       pkgmgrinfo_appinfo_h appinfo_h = NULL;
-       pkgmgrinfo_pkginfo_h pkghandle = NULL;
-       char *pkgid = NULL;
+       Evas_Object *eo = elm_genlist_add(parent);
+       retv_if(!eo, NULL);
+       evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_genlist_mode_set(eo, ELM_LIST_COMPRESS);
+       elm_genlist_homogeneous_set(eo, EINA_TRUE);
 
-       char *icon = NULL;
-       char *type = NULL;
-       bool removable = false;
+       Evas_Object *circle_genlist = eext_circle_object_genlist_add(eo, info->select_circle_surf);
+       eext_circle_object_genlist_scroller_policy_set(circle_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       eext_rotary_object_event_activated_set(circle_genlist, EINA_TRUE);
 
+       evas_object_show(eo);
+       return eo;
+}
 
-       retv_if(!appid, NULL);
+static void _gl_add_header_item(Evas_Object *gl)
+{
+       elm_genlist_item_append(gl, _get_gl_itc_header(), NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+}
 
-       item_info = calloc(1, sizeof(item_info_s));
-       if (NULL == item_info) {
-               return NULL;
+static bool _check_already_added_apps(const char *appid)
+{
+       int i = 0;
+
+       for (; i < APP_SLOTS_MAX_COUNT; i++) {
+               if (!strcmp(g_info->appid_list[i], appid)) {
+                       return true;
+               }
        }
-       goto_if(0 > pkgmgrinfo_appinfo_get_appinfo(appid, &appinfo_h), ERROR);
-       goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_icon(appinfo_h, &icon), ERROR);
-       do {
-               break_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_pkgid(appinfo_h, &pkgid));
-               break_if(NULL == pkgid);
+       return false;
+}
 
-               break_if(0 > pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pkghandle));
-               break_if(NULL == pkghandle);
-       } while (0);
+static void _gl_item_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       item_info_s *item_info = data;
+       ret_if(!item_info);
 
-       goto_if(PMINFO_R_OK != pkgmgrinfo_pkginfo_get_type(pkghandle, &type), ERROR);
-       if (pkgid) {
-               item_info->pkgid = strdup(pkgid);
-               goto_if(NULL == item_info->pkgid, ERROR);
+       Elm_Object_Item *it = (Elm_Object_Item *)event_info;
+       elm_genlist_item_selected_set(it, EINA_FALSE);
+
+       if (g_info->launch_type == APPTRAY_WGT_APP_LAUNCH_TYPE_PICK) {
+               return;
        }
 
-       item_info->appid = strdup(appid);
-       goto_if(NULL == item_info->appid, ERROR);
+       if (_check_already_added_apps(item_info->appid)) {
+               /* TODO: Need translation */
+               _create_toast_popup("App already added.");
+               return;
+       }
 
-       item_info->name = strdup(_("IDS_IDLE_BODY_APPS"));
+       g_info->appid_list[slot_index] = strdup(item_info->appid);
 
-       if (type) {
-               item_info->type = strdup(type);
-               goto_if(NULL == item_info->type, ERROR);
-               if (!strncmp(item_info->type, APP_TYPE_WGT, strlen(APP_TYPE_WGT))) {
-                       item_info->open_app = 1;
-               } else {
-                       item_info->open_app = 0;
-               }
-       }
+       Evas_Object *slot = _set_app_slot(item_info->appid, slot_index);
+       elm_object_signal_emit(slot, "hide_icon", "slot");
+       empty_count--;
 
-       if (icon) {
-               if (strlen(icon) > 0) {
-                       item_info->icon = strdup(icon);
-                       goto_if(NULL == item_info->icon, ERROR);
-               } else {
-                       item_info->icon = strdup(DEFAULT_ICON);
-                       goto_if(NULL == item_info->icon, ERROR);
+       evas_object_hide(g_info->select_win);
+       evas_object_show(g_info->edit_win);
+
+       evas_event_callback_add(evas_object_evas_get(g_info->edit_layout),
+                       EVAS_CALLBACK_RENDER_POST, _render_post_cb, (void *)slot);
+
+       _update_content();
+}
+
+static void _gl_add_apps_items(Evas_Object *gl, appdata_s *info)
+{
+       item_info_s *item_info = NULL;
+       Eina_List *item_info_list = g_info->all_app_list;
+       Elm_Object_Item *item = NULL;
+       Eina_List *l = NULL;
+       Eina_List *n = NULL;
+
+       EINA_LIST_FOREACH_SAFE(item_info_list, l, n, item_info) {
+               item = elm_genlist_item_append(gl, _get_gl_itc_content(), item_info, NULL,
+                               ELM_GENLIST_ITEM_NONE, _gl_item_clicked_cb, item_info);
+               if (!item) {
+                       _E("Failed to append genlist item");
                }
-       } else {
-               item_info->icon = strdup(DEFAULT_ICON);
-               goto_if(NULL == item_info->icon, ERROR);
        }
+}
 
-       item_info->removable = removable;
+static void _gl_add_empty_item(Evas_Object *gl)
+{
+       elm_genlist_item_append(gl, _get_gl_itc_empty(), NULL, NULL,
+                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+}
 
-       pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
-       if (pkghandle) pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle);
+static Evas_Object *_create_bottom_btn_ly(appdata_s *info)
+{
+       Evas_Object *eo = elm_layout_add(info->select_conform);
+       retv_if(!eo, NULL);
+       elm_layout_theme_set(eo, "layout", "bottom_button", "default");
+       evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(eo);
 
-       return item_info;
+       return eo;
+}
 
-ERROR:
-       apps_item_info_destroy(item_info);
-       pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
-       if (pkghandle) pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle);
-       return NULL;
+static void _bottom_btn_click_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       _update_appid_list_with_selected_items();
+       _terminate_add_to_shortcut();
 }
 
-item_info_s *apps_recent_info_create(const char *appid)
+static Evas_Object *_create_bottom_btn(Evas_Object *parent, appdata_s *info)
 {
-       _ENTER;
-       item_info_s *item_info = NULL;
-       pkgmgrinfo_appinfo_h appinfo_h = NULL;
-       pkgmgrinfo_pkginfo_h pkghandle = NULL;
-       char *pkgid = NULL;
-       char *icon = NULL;
-       char *type = NULL;
-       char *name = NULL;
-       bool removable = false;
+       Evas_Object *eo = elm_button_add(parent);
+       retv_if(!eo, NULL);
+       elm_object_style_set(eo, "bottom");
+       /* TODO: Need translation */
+       elm_object_text_set(eo, "COMPLETE");
+       evas_object_smart_callback_add(eo, "clicked", _bottom_btn_click_cb, NULL);
+       evas_object_show(eo);
 
+       elm_object_part_content_set(parent, "elm.swallow.button", eo);
 
-       retv_if(!appid, NULL);
+       return eo;
+}
 
-       item_info = calloc(1, sizeof(item_info_s));
-       if (NULL == item_info) {
-               return NULL;
-       }
+static Evas_Object *_create_genlist_ly(Evas_Object *parent, appdata_s *info)
+{
+       Evas_Object *eo = elm_layout_add(parent);
+       retv_if(!eo, NULL);
+       elm_layout_theme_set(eo, "layout", "select_mode", "default");
+       evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(eo);
 
-       goto_if(0 > pkgmgrinfo_appinfo_get_appinfo(appid, &appinfo_h), ERROR);
-       goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_label(appinfo_h, &name), ERROR);
-       goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_icon(appinfo_h, &icon), ERROR);
-       do {
-               break_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_pkgid(appinfo_h, &pkgid));
-               break_if(NULL == pkgid);
+       elm_layout_content_set(parent, "elm.swallow.content", eo);
 
-               break_if(0 > pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pkghandle));
-               break_if(NULL == pkghandle);
-       } while (0);
-       goto_if(PMINFO_R_OK != pkgmgrinfo_pkginfo_get_type(pkghandle, &type), ERROR);
-       if (pkgid) {
-               item_info->pkgid = strdup(pkgid);
-               goto_if(NULL == item_info->pkgid, ERROR);
-       }
-       item_info->appid = strdup(appid);
-       goto_if(NULL == item_info->appid, ERROR);
+       return eo;
+}
 
-       if(name){
-               item_info->name = strdup(name);
-               goto_if(NULL == item_info->name, ERROR);
-       }
+static Evas_Object *_create_pick_genlist(Evas_Object *parent, appdata_s *info)
+{
+       Evas_Object *eo = _create_simple_genlist(parent, info);
+       retv_if(!eo, NULL);
+       elm_object_style_set(eo, "focus_bg");
+       _set_select_genlist_content(eo, info);
+       elm_layout_content_set(parent, "elm.swallow.content", eo);
 
-       if (type) {
-               item_info->type = strdup(type);
-               goto_if(NULL == item_info->type, ERROR);
-               if (!strncmp(item_info->type, APP_TYPE_WGT, strlen(APP_TYPE_WGT))) {
-                       item_info->open_app = 1;
-               } else {
-                       item_info->open_app = 0;
-               }
-       }
+       return eo;
+}
 
-       if (icon) {
-               if (strlen(icon) > 0) {
-                       item_info->icon = strdup(icon);
-                       goto_if(NULL == item_info->icon, ERROR);
-               } else {
-                       item_info->icon = strdup(DEFAULT_ICON);
-                       goto_if(NULL == item_info->icon, ERROR);
-               }
+static Evas_Object *_create_select_count_btn(Evas_Object *parent, appdata_s *info)
+{
+       char buf[SELECT_COUNT_BUF_SIZE] = { 0 };
+       char full_path[PATH_MAX] = { 0, };
+
+       Evas_Object *eo = elm_layout_add(parent);
+       apptray_wgt_app_utils_get_resource(EDJE_FILE, full_path, sizeof(full_path));
+       elm_layout_file_set(eo, full_path, "select_indicator");
+       snprintf(buf, sizeof(buf), "%d/4", info->select_count);
+       elm_object_text_set(eo, buf);
+       elm_layout_content_set(parent, "elm.swallow.icon", eo);
+
+       elm_object_signal_emit(eo, "select_mode,button,show", "elm");
+
+       return eo;
+}
+
+static void _create_select_view(appdata_s *info)
+{
+       _ENTER;
+
+       if (info->launch_type != APPTRAY_WGT_APP_LAUNCH_TYPE_PICK) {
+               Evas_Object *genlist = _create_simple_genlist(info->select_conform, info);
+               ret_if(!genlist);
+               _set_select_genlist_content(genlist, info);
+               elm_object_content_set(info->select_conform, genlist);
        } else {
-               item_info->icon = strdup(DEFAULT_ICON);
-               goto_if(NULL == item_info->icon, ERROR);
-       }
+               Evas_Object *bottom_btn_ly = NULL;
+               Evas_Object *bottom_btn = NULL;
+               Evas_Object *genlist_layout = NULL;
+               Evas_Object *genlist = NULL;
 
-       item_info->removable = removable;
-       pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
-       if (pkghandle) pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle);
-       return item_info;
+               bottom_btn_ly = _create_bottom_btn_ly(info);
+               ret_if(!bottom_btn_ly);
 
-ERROR:
-       apps_item_info_destroy(item_info);
+               bottom_btn = _create_bottom_btn(bottom_btn_ly, info);
+               ret_if(!bottom_btn);
 
-       pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
-       if (pkghandle) pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle);
-       return NULL;
+               genlist_layout = _create_genlist_ly(bottom_btn_ly, info);
+               ret_if(!genlist_layout);
+
+               genlist = _create_pick_genlist(genlist_layout, info);
+               ret_if(!genlist);
+
+               info->select_count_btn = _create_select_count_btn(genlist_layout, info);
+               ret_if(!info->select_count_btn);
+
+               elm_object_signal_emit(genlist_layout, "select_mode,button,show", "");
+
+               elm_object_content_set(info->select_conform, bottom_btn_ly);
+       }
+}
+
+void apps_item_info_destroy(item_info_s *item_info)
+{
+       _ENTER;
+       ret_if(!item_info);
+
+       if (item_info->pkgid)
+               free(item_info->pkgid);
+       if (item_info->appid)
+               free(item_info->appid);
+       if (item_info->name)
+               free(item_info->name);
+       if (item_info->icon)
+               free(item_info->icon);
+       if (item_info->type)
+               free(item_info->type);
+       if (item_info)
+               free(item_info);
 }
 
 item_info_s *apps_item_info_create(const char *appid)
@@ -1072,7 +1176,6 @@ item_info_s *apps_item_info_create(const char *appid)
        bool nodisplay = false;
        bool enabled = false;
        bool removable = false;
-       //int support_mode = 0;
 
        retv_if(!appid, NULL);
 
@@ -1119,7 +1222,8 @@ item_info_s *apps_item_info_create(const char *appid)
 
        if (name) {
                if(!strncmp(appid, APPS_PKG, strlen(APPS_PKG))) {
-                       item_info->name = strdup(_("IDS_IDLE_BODY_APPS"));
+                       /* TODO: Need translation */
+                       item_info->name = strdup(IDS_IDLE_BODY_APPS);
                        goto_if(NULL == item_info->name, ERROR);
                }
                else{
@@ -1138,32 +1242,34 @@ item_info_s *apps_item_info_create(const char *appid)
                }
        }
 
-
-               if (icon) {
-                       if (strlen(icon) > 0) {
-                               item_info->icon = strdup(icon);
-                               goto_if(NULL == item_info->icon, ERROR);
-                       } else {
-                               item_info->icon = strdup(DEFAULT_ICON);
-                               goto_if(NULL == item_info->icon, ERROR);
-                       }
+       if (icon) {
+               if (strlen(icon) > 0) {
+                       item_info->icon = strdup(icon);
+                       goto_if(NULL == item_info->icon, ERROR);
                } else {
                        item_info->icon = strdup(DEFAULT_ICON);
                        goto_if(NULL == item_info->icon, ERROR);
                }
+       } else {
+               item_info->icon = strdup(DEFAULT_ICON);
+               goto_if(NULL == item_info->icon, ERROR);
+       }
 
 
        item_info->removable = removable;
 
        pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
-       if (pkghandle) pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle);
+       if (pkghandle)
+               pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle);
 
        return item_info;
 
 ERROR:
        apps_item_info_destroy(item_info);
-       if (appinfo_h) pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
-       if (pkghandle) pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle);
+       if (appinfo_h)
+               pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
+       if (pkghandle)
+               pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle);
 
        return NULL;
 }
@@ -1215,8 +1321,10 @@ static Eina_List *_read_all_apps(Eina_List **list)
        goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, _apps_all_cb, list), ERROR);
        *list = eina_list_sort(*list, eina_list_count(*list), _apps_sort_cb);
 
+       *list = eina_list_prepend(*list, apps_item_info_create(APPS_PKG));
 ERROR:
-       if (handle) pkgmgrinfo_appinfo_filter_destroy(handle);
+       if (handle)
+               pkgmgrinfo_appinfo_filter_destroy(handle);
 
        return *list;
 }
@@ -1224,42 +1332,16 @@ ERROR:
 static Eina_Bool _load_list(void* data)
 {
        Eina_List *pkgmgr_list = NULL;
-       g_info->app_list = _read_all_apps(&pkgmgr_list);
-       _create_layout(g_info);
+       g_info->all_app_list = _read_all_apps(&pkgmgr_list);
+       _create_select_view(g_info);
        return ECORE_CALLBACK_CANCEL;
 }
 
 static void _process_pick_operation(appdata_s *info, app_control_h service)
 {
        _ENTER;
-        /* TODO: This is stub to leave application on peek operation
-               Need to implement in further according UI
-       */
-
-       char *content = NULL;
-       char *save = NULL;
-       int i = 0;
-
-       _create_edit_layout(info);
-       evas_object_show(info->edit_win);
 
-       content = strdup_s("empty empty empty empty");
-
-       if (!content) {
-               _D("Content is NULL. Set default applist");
-               content = strdup(DEFAULT_APP_ORDER);
-       }
-       _D("Content [%s]", content);
-
-       for (i = 0 ; i < APP_SLOTS_MAX_COUNT ; i++) {
-               if (i == 0) {
-                       _set_app_slot(strtok_r(content, " ",&save), i);
-               } else {
-                       _set_app_slot(strtok_r(NULL, " ",&save), i);
-               }
-       }
-
-       free(content);
+       evas_object_show(info->select_win);
 
        ecore_idler_add(_load_list, NULL);
 }
@@ -1313,20 +1395,54 @@ static void _process_main_operation(appdata_s *info, app_control_h service, cons
        ecore_idler_add(_load_list, NULL);
 }
 
+static bool _create_edit_window(appdata_s *info, const char *name, const char *title)
+{
+       info->edit_win = _create_win(info, name, title);
+       retv_if(!info->edit_win, false);
+
+       return true;
+}
+
+static Evas_Object *_create_conformant_without_indicator(Evas_Object *win)
+{
+       Evas_Object *conform = NULL;
+
+       retv_if(!win, NULL);
+
+       conform = elm_conformant_add(win);
+       evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(win, conform);
+       evas_object_show(conform);
+
+       return conform;
+}
+
+static bool _create_select_window(appdata_s *info, const char *name, const char *title)
+{
+       info->select_win = _create_win(info, name, title);
+       retv_if(!info->select_win, false);
+
+       info->select_conform = _create_conformant_without_indicator(info->select_win);
+       retv_if(!info->select_conform, false);
+
+       info->select_circle_surf = eext_circle_surface_conformant_add(info->select_conform);
+       retv_if(!info->select_circle_surf, false);
+
+       return true;
+}
+
 static bool _app_create(void *data)
 {
        _ENTER;
-       _D("check");
+
        appdata_s *info = data;
+       retv_if(!info, false);
 
        g_info = info;
 
-       info->edit_win = _create_win(info, "__ADD_TO_SHORTCUT__", "__ADD_TO_SHORTCUT__");
-       retv_if(!info->edit_win, false);
-       info->select_win = _create_win(info, "__SELECT_LIST__", "_SELECT_LIST__");
-       retv_if(!info->select_win, false);
+       retv_if(!_create_edit_window(info, "__ADD_TO_SHORTCUT__", "__ADD_TO_SHORTCUT__"), false);
+       retv_if(!_create_select_window(info, "__SELECT_LIST__", "__SELECT_LIST__"), false);
 
-       _init_theme();
        feedback_initialize();
 
        g_info->release_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _key_release_cb, NULL);
@@ -1336,8 +1452,11 @@ static bool _app_create(void *data)
 static void _app_terminate(void *data)
 {
        _ENTER;
-       _D("check");
-       _fini_theme();
+
+       if (longpress_timer) {
+               ecore_timer_del(longpress_timer);
+       }
+
        feedback_deinitialize();
 }
 
@@ -1390,7 +1509,7 @@ static void _app_control(app_control_h service, void *data)
 static void _app_lang_changed(app_event_info_h event_info, void *user_data)
 {
        _ENTER;
-       /*APP_EVENT_LANGUAGE_CHANGED*/
+
        char *locale = NULL;
        system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &locale);
        elm_language_set(locale);
diff --git a/apptray-widget-app/src/common/home_custom_index.c b/apptray-widget-app/src/common/home_custom_index.c
deleted file mode 100755 (executable)
index 7631af8..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * Samsung API
- * Copyright (c) 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.1 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <Elementary.h>
-
-#include <bundle.h>
-#include <util.h>
-
-
-#include "common/home_custom_index_info.h"
-#include "common/home_custom_index.h"
-#include "common/home_custom_scroller.h"
-#include "app-widget-app_log.h"
-
-#define PRIVATE_DATA_KEY_INDEX_TIMER "p_in_timer"
-
-typedef struct {
-       Evas_Object *page;
-       int index;
-} page_index_s;
-
-
-#define INDEX_EVEN_ITEM_NUM 20
-#define INDEX_ODD_ITEM_NUM 19
-static const char *_index_style_get(int index, int even)
-{
-       static const char g_it_style_odd[INDEX_ODD_ITEM_NUM][20] = {
-               "item/odd_1",
-               "item/odd_2",
-               "item/odd_3",
-               "item/odd_4",
-               "item/odd_5",
-               "item/odd_6",
-               "item/odd_7",
-               "item/odd_8",
-               "item/odd_9",
-               "item/odd_10",
-               "item/odd_11",
-               "item/odd_12",
-               "item/odd_13",
-               "item/odd_14",
-               "item/odd_15",
-               "item/odd_16",
-               "item/odd_17",
-               "item/odd_18",
-               "item/odd_19",
-       };
-       static const char g_it_style_even[INDEX_EVEN_ITEM_NUM][20] = {
-               "item/even_1",
-               "item/even_2",
-               "item/even_3",
-               "item/even_4",
-               "item/even_5",
-               "item/even_6",
-               "item/even_7",
-               "item/even_8",
-               "item/even_9",
-               "item/even_10",
-               "item/even_11",
-               "item/even_12",
-               "item/even_13",
-               "item/even_14",
-               "item/even_15",
-               "item/even_16",
-               "item/even_17",
-               "item/even_18",
-               "item/even_19",
-               "item/even_20",
-       };
-
-       index = (index < 0) ? 0 : index;
-       if (even) {
-               index = (index >= INDEX_EVEN_ITEM_NUM) ? INDEX_EVEN_ITEM_NUM - 1 : index;
-
-               return g_it_style_even[index];
-       } else {
-               index = (index >= INDEX_ODD_ITEM_NUM) ? INDEX_ODD_ITEM_NUM - 1 : index;
-
-               return g_it_style_odd[index];
-       }
-}
-
-
-HAPI void home_custom_index_bring_in_page(Evas_Object *index, Evas_Object *page)
-{
-       _ENTER;
-       Elm_Object_Item *idx_it = NULL;
-       const Eina_List *l = NULL;
-       hc_index_info_s *index_info = NULL;
-       page_index_s *page_index = NULL;
-       int idx = 0;
-       int found = 0;
-
-       ret_if(!index);
-       ret_if(!page);
-
-       index_info = evas_object_data_get(index, DATA_KEY_INDEX_INFO);
-       ret_if(!index_info);
-       ret_if(!index_info->page_index_list);
-
-       EINA_LIST_FOREACH(index_info->page_index_list, l, page_index) {
-               if (page_index->page == page) {
-                       idx = page_index->index;
-                       found = 1;
-                       break;
-               }
-       }
-
-       if (!found) {
-               _E("Cannot find a page(%p)", page);
-               return;
-       }
-
-       idx_it = elm_index_item_find(index, (void *) idx);
-       if (idx_it) {
-               elm_index_item_selected_set(idx_it, EINA_TRUE);
-       } else {
-               _E("Critical, the index(%p) cannot find the page(%p:%d)", index, page, idx);
-       }
-}
-
-
-
-HAPI Evas_Object *home_custom_index_create(Evas_Object *parent, Evas_Object *scroller)
-{
-       _ENTER;
-       Evas_Object *index = NULL;
-       hc_index_info_s *index_info = NULL;
-
-       retv_if(!parent, NULL);
-       retv_if(!scroller, NULL);
-
-       index = elm_index_add(parent);
-       retv_if(!index, NULL);
-       elm_object_style_set(index, "circle");
-
-       index_info = calloc(1, sizeof(hc_index_info_s));
-       if (!index_info) {
-               _E("Cannot calloc for index_info");
-               evas_object_del(index);
-               return NULL;
-       }
-       evas_object_data_set(index, DATA_KEY_INDEX_INFO, index_info);
-
-       evas_object_size_hint_weight_set(index, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(index, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       elm_index_horizontal_set(index, EINA_TRUE);
-       elm_index_autohide_disabled_set(index, EINA_TRUE);
-       elm_index_level_go(index, 0);
-       evas_object_show(index);
-
-       index_info->layout = parent;
-       index_info->scroller = scroller;
-
-       return index;
-}
-
-
-
-HAPI void home_custom_index_destroy(Evas_Object *index)
-{
-       _ENTER;
-       hc_index_info_s *index_info = NULL;
-       page_index_s *page_index = NULL;
-
-       ret_if(!index);
-
-       index_info = evas_object_data_del(index, DATA_KEY_INDEX_INFO);
-       ret_if(!index_info);
-
-       if (index_info->page_index_list) {
-               EINA_LIST_FREE(index_info->page_index_list, page_index) {
-                       free(page_index);
-               }
-               index_info->page_index_list = NULL;
-       }
-
-       free(index_info);
-       elm_index_item_clear(index);
-       evas_object_del(index);
-}
-
-
-
-#define MAX_INDEX_NUMBER 20
-static void _update_index(Evas_Object *scroller, Evas_Object *index, const Eina_List *list)
-{
-       _ENTER;
-       Evas_Object *page = NULL;
-       Elm_Object_Item *idx_it = NULL;
-       const Eina_List *l = NULL;
-
-       hc_index_info_s *index_info = NULL;
-       page_index_s *page_index = NULL;
-
-       int extra_idx = 0, page_index_inserting = 0;
-       int cur_inserted = 0;
-       int index_number = 0;
-       int cur_start_idx = 0, cur_mid_idx = 0;
-       int total_count = 0, total_inserted = 0;
-
-       ret_if(!index);
-       ret_if(!list);
-
-       index_info = evas_object_data_get(index, DATA_KEY_INDEX_INFO);
-       ret_if(!index_info);
-
-       /* 0. Remove an old page_index_list */
-       if (index_info->page_index_list) {
-               EINA_LIST_FREE(index_info->page_index_list, page_index) {
-                       free(page_index);
-               }
-               index_info->page_index_list = NULL;
-       }
-
-       /* 1. Make indexes (cur/center/other) */
-       total_count = home_custom_scroller_get_page_count(scroller);
-
-       total_inserted = total_count;
-       if (total_inserted > MAX_INDEX_NUMBER) {
-               total_inserted = MAX_INDEX_NUMBER;
-       }
-
-       int style_even = 0;
-       int style_base = 0;
-       if (!(total_inserted % 2)) {
-               style_even = 1;
-               style_base = (MAX_INDEX_NUMBER/2) - (total_inserted / 2);
-       } else {
-               style_base = (MAX_INDEX_NUMBER/2) - (total_inserted / 2) - 1;
-       }
-       _D("style even:%d,style base:%d",style_even,style_base);
-
-       EINA_LIST_FOREACH(list, l, page) {
-               if (index_number < total_inserted) {
-                       if (!cur_inserted) {
-                               cur_start_idx = index_number;
-                       }
-                       cur_inserted++;
-                       idx_it = elm_index_item_append(index, NULL, NULL, (void *) index_number);
-                       elm_object_item_style_set(idx_it, _index_style_get(style_base + index_number, style_even));
-                       index_number++;
-               }
-       }
-
-       cur_mid_idx = (cur_start_idx + cur_inserted - 1) / 2;
-       extra_idx = total_count - cur_inserted;
-
-       /* 2. Make a new page_index_list */
-       page_index_inserting = -1;
-       EINA_LIST_FOREACH(list, l, page) {
-               page_index = calloc(1, sizeof(page_index_s));
-               continue_if(!page_index);
-
-               if (page_index_inserting == cur_mid_idx && extra_idx > 0) {
-                       extra_idx--;
-               } else {
-                       page_index_inserting++;
-               }
-
-               page_index->page = page;
-               page_index->index = page_index_inserting;
-
-               index_info->page_index_list = eina_list_append(index_info->page_index_list, page_index);
-       }
-}
-
-
-
-HAPI void home_custom_index_update(Evas_Object *index, Evas_Object *scroller, hc_index_bring_in_e after)
-{
-       _ENTER;
-       Evas_Object *page_current = NULL;
-       Eina_List *page_list = NULL;
-
-       hc_index_info_s *index_info = NULL;
-
-       ret_if(!index);
-       ret_if(!scroller);
-
-       _D("Index(%p) is clear", index);
-       elm_index_item_clear(index);
-
-       index_info = evas_object_data_get(index, DATA_KEY_INDEX_INFO);
-       ret_if(!index_info);
-
-       page_list = home_custom_scroller_get_page_list(scroller);
-       ret_if(!page_list);
-
-       elm_object_style_set(index, "circle");
-
-       _update_index(scroller, index, page_list);
-
-       eina_list_free(page_list);
-
-       elm_index_level_go(index, 0);
-
-       if (INDEX_BRING_IN_AFTER == after) {
-               page_current = home_custom_scroller_get_current_page(scroller);
-               ret_if(!page_current);
-               home_custom_index_bring_in_page(index, page_current);
-       }
-}
-
-
-static Eina_Bool _index_hide_timer_cb(void *data)
-{
-       _ENTER;
-       Evas_Object *index = (Evas_Object*)data;
-       retv_if(!index, ECORE_CALLBACK_CANCEL);
-
-       Elm_Transit *transit = elm_transit_add();
-       retv_if(!transit, ECORE_CALLBACK_CANCEL);
-
-       elm_transit_effect_color_add(transit, 255, 255, 255, 255, 0, 0, 0, 0);
-       elm_transit_object_add(transit, index);
-       elm_transit_duration_set(transit, 0.5);
-       elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_DECELERATE);
-       elm_transit_objects_final_state_keep_set(transit, EINA_TRUE);
-       elm_transit_go(transit);
-
-       evas_object_data_del(index, PRIVATE_DATA_KEY_INDEX_TIMER);
-
-       return ECORE_CALLBACK_CANCEL;
-}
-
-
-HAPI void home_custom_index_show(Evas_Object *index, Eina_Bool bAutoHide)
-{
-       _ENTER;
-       Ecore_Timer *timer = NULL;
-
-       ret_if(!index);
-
-       evas_object_color_set(index, 255, 255, 255, 255);
-       evas_object_show(index);
-
-       if(bAutoHide) {
-               timer = evas_object_data_get(index, PRIVATE_DATA_KEY_INDEX_TIMER);
-               if(timer) {
-                       ecore_timer_del(timer);
-               }
-
-               timer = ecore_timer_add(2.0, _index_hide_timer_cb, index);
-               ret_if(!timer);
-
-               evas_object_data_set(index, PRIVATE_DATA_KEY_INDEX_TIMER, timer);
-       }
-}
-
-
- // End of file
-
diff --git a/apptray-widget-app/src/common/home_custom_scroller.c b/apptray-widget-app/src/common/home_custom_scroller.c
deleted file mode 100755 (executable)
index 2c39309..0000000
+++ /dev/null
@@ -1,967 +0,0 @@
-/*
- * Samsung API
- * Copyright (c) 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.1 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Elementary.h>
-#include <app_control.h>
-#include <efl_extension.h>
-#include "common/home_custom_scroller.h"
-#include "common/home_custom_scroller_info.h"
-#include "common/home_custom_index.h"
-#include "app-widget-app.h"
-#include "util.h"
-
-
-#define SCROLLER_LAYOUT_EDJE "edje/home_custom_layout.edj"
-#define SCROLLER_LAYOUT_GROUP_NAME "layout"
-#define SCROLLER_BOX_PART_NAME "box"
-
-#define PRIVATE_DATA_KEY_SCROLLER_MOUSE_DOWN "p_sc_m_dn"
-#define PRIVATE_DATA_KEY_SCROLLER_DRAG "p_sc_dr"
-#define PRIVATE_DATA_KEY_IS_SCROLLING "p_is_scr"
-#define PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER "p_sc_tmer"
-#define PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ITH "p_sc_ith"
-#define PRIVATE_DATA_KEY_SCROLLER_INFO "p_sc_if"
-
-#define PRIVATE_DATA_KEY_SCROLLER_PAGE_MOUSE_DOWN "p_sc_pg_m_dn"
-
-#define PRIVATE_DATA_KEY_INDEX "p_id"
-#define PRIVATE_DATA_KEY_START_EDGE_RECT "p_s_er"
-#define PRIVATE_DATA_KEY_END_EDGE_RECT "p_e_er"
-#define PRIVATE_DATA_KEY_EDGE_RECT "p_e_r"
-
-Eina_Bool scroll_transit_go = EINA_FALSE;
-#define PRIVATE_DATA_KEY_SCROLLER_ANIM_START_FN "p_sc_anim_start_fn"
-#define PRIVATE_DATA_KEY_SCROLLER_ANIM_STOP_FN "p_sc_anim_stop_fn"
-#define PRIVATE_DATA_KEY_SCROLLER_DRAG_START_FN "p_sc_drag_start_fn"
-#define PRIVATE_DATA_KEY_SCROLLER_DRAG_STOP_FN "p_sc_drag_start_fn"
-#define PRIVATE_DATA_KEY_SCROLLER_SCROLL_FN "p_sc_scroll_fn"
-
-int home_custom_scroller_get_current_page_no(Evas_Object *scroller);
-
-static void _scroller_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
-       _ENTER;
-       Evas_Event_Mouse_Down *ei = event_info;
-       ret_if(!ei);
-
-       _D("Mouse is down [%d,%d]", ei->output.x, ei->output.y);
-       evas_object_data_set(obj, PRIVATE_DATA_KEY_SCROLLER_MOUSE_DOWN, (void *) 1);
-}
-
-
-
-static void _scroller_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
-       _ENTER;
-       Evas_Event_Mouse_Up *ei = event_info;
-       ret_if(!ei);
-
-       _D("Mouse is up [%d,%d]", ei->output.x, ei->output.y);
-       evas_object_data_del(obj, PRIVATE_DATA_KEY_SCROLLER_MOUSE_DOWN);
-
-       if (evas_object_data_get(obj, PRIVATE_DATA_KEY_SCROLLER_DRAG)) return;
-       evas_object_data_del(obj, PRIVATE_DATA_KEY_IS_SCROLLING);
-}
-
-
-
-static void _default_anim_start_cb(void *data, Evas_Object *scroller, void *event_info)
-{
-       _ENTER;
-       _D("start the scroller animation");
-       evas_object_data_set(scroller, PRIVATE_DATA_KEY_IS_SCROLLING, (void *)1);
-
-       void *(*_anim_start_cb)(void *, Evas_Object *, void *);
-       _anim_start_cb = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_START_FN);
-       if(_anim_start_cb) _anim_start_cb(data, scroller, event_info);
-
-       Evas_Object *page = home_custom_scroller_get_current_page(scroller);
-       ret_if(!page);
-}
-
-
-
-static void _default_anim_stop_cb(void *data, Evas_Object *scroller, void *event_info)
-{
-       _ENTER;
-       _D("stop the scroller animation");
-
-       void *(*_anim_stop_cb)(void *, Evas_Object *, void *);
-       _anim_stop_cb = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_STOP_FN);
-       if(_anim_stop_cb) _anim_stop_cb(data, scroller, event_info);
-
-       if (evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_MOUSE_DOWN)) return;
-       evas_object_data_del(scroller, PRIVATE_DATA_KEY_IS_SCROLLING);
-
-       scroll_transit_go = EINA_FALSE;
-
-       Evas_Object *page = home_custom_scroller_get_current_page(scroller);
-       ret_if(!page);
-       Evas_Object *index = evas_object_data_get(scroller, PRIVATE_DATA_KEY_INDEX);
-       if(index) home_custom_index_bring_in_page(index, page);
-}
-
-
-
-static void _default_drag_start_cb(void *data, Evas_Object *scroller, void *event_info)
-{
-       _ENTER;
-       ret_if(!scroller);
-
-       _D("start to drag the scroller animation");
-
-       evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG, (void *) 1);
-
-       void *(*_drag_start_cb)(void *, Evas_Object *, void *);
-       _drag_start_cb = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG_START_FN);
-       if(_drag_start_cb) _drag_start_cb(data, scroller, event_info);
-
-       /* _drag_start_cb is called even if the scroller is not moved. */
-       Evas_Object *page = home_custom_scroller_get_current_page(scroller);
-       ret_if(!page);
-       scroll_transit_go = EINA_TRUE;
-}
-
-
-
-static void _default_drag_stop_cb(void *data, Evas_Object *scroller, void *event_info)
-{
-       _ENTER;
-       ret_if(!scroller);
-
-       _D("stop to drag the scroller animation");
-
-       void *(*_drag_stop_cb)(void *, Evas_Object *, void *);
-       _drag_stop_cb = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG_STOP_FN);
-       if(_drag_stop_cb) _drag_stop_cb(data, scroller, event_info);
-
-       evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG);
-}
-
-
-
-static void _default_scroll_cb(void *data, Evas_Object *scroller, void *event_info)
-{
-       _ENTER;
-       ret_if(!scroller);
-
-       evas_object_data_set(scroller, PRIVATE_DATA_KEY_IS_SCROLLING, (void *)1);
-
-       void *(*_scroll_cb)(void *, Evas_Object *, void *);
-       _scroll_cb = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_SCROLL_FN);
-       if(_scroll_cb) _scroll_cb(data, scroller, event_info);
-
-       Evas_Object *page = home_custom_scroller_get_current_page(scroller);
-       ret_if(!page);
-
-       Evas_Object *index = evas_object_data_get(scroller, PRIVATE_DATA_KEY_INDEX);
-       if(index) home_custom_index_bring_in_page(index, page);
-}
-
-
-static void _init_rotary(Evas_Object *scroller)
-{
-       _ENTER;
-       _D("Initialize the rotary event");
-}
-
-
-
-static void _destroy_rotary(Evas_Object *scroller)
-{
-       _ENTER;
-       _D("Finish the rotary event");
-}
-
-scroller_info_s *home_custom_scroller_info_create(void)
-{
-       _ENTER;
-       scroller_info_s *scroller_info = NULL;
-
-       scroller_info = calloc(1, sizeof(scroller_info_s));
-       retv_if(!scroller_info, NULL);
-
-       return scroller_info;
-}
-
-
-void home_custom_scroller_register_cb(Evas_Object *scroller,
-                                                                       void _anim_start_cb(void *, Evas_Object *, void *),
-                                                                       void _anim_stop_cb(void *, Evas_Object *, void *),
-                                                                       void _drag_start_cb(void *, Evas_Object *, void *),
-                                                                       void _drag_stop_cb(void *, Evas_Object *, void *),
-                                                                       void _scroll_cb(void *, Evas_Object *, void *))
-{
-       _ENTER;
-       ret_if(!scroller);
-
-       evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_START_FN, _anim_start_cb);
-       evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_STOP_FN, _anim_stop_cb);
-       evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG_START_FN, _drag_start_cb);
-       evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG_START_FN, _drag_start_cb);
-       evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_SCROLL_FN, _scroll_cb);
-}
-
-
-void home_custom_scroller_deregister_cb(Evas_Object *scroller)
-{
-       _ENTER;
-       ret_if(!scroller);
-
-       evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_START_FN);
-       evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_STOP_FN);
-       evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG_START_FN);
-       evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG_START_FN);
-       evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_SCROLL_FN);
-}
-
-Evas_Object *home_custom_scroller_add(Evas_Object *parent, scroller_info_s *scroller_info)
-{
-       _ENTER;
-       Evas_Object *scroller = NULL;
-       Evas_Object *box_layout = NULL;
-       Evas_Object *box = NULL;
-       scroller = elm_scroller_add(parent);
-       retv_if(!scroller, NULL);
-       _D("scroller is added");
-       elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
-       evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       elm_scroller_page_size_set(scroller, scroller_info->page_width, scroller_info->page_height);
-       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
-       elm_scroller_page_scroll_limit_set(scroller, 1, 0);
-       elm_object_scroll_lock_y_set(scroller, EINA_TRUE);
-
-       Evas_Object *circle_scroller = eext_circle_object_scroller_add(scroller, NULL);
-       eext_circle_object_scroller_policy_set(circle_scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
-       eext_rotary_object_event_activated_set(circle_scroller, EINA_TRUE);
-
-       elm_object_style_set(scroller, "effect");
-
-       evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_DOWN, _scroller_mouse_down_cb, NULL);
-       evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP, _scroller_mouse_up_cb, NULL);
-       evas_object_smart_callback_add(scroller, "scroll,anim,start", _default_anim_start_cb, NULL);
-       evas_object_smart_callback_add(scroller, "scroll,anim,stop", _default_anim_stop_cb, NULL);
-       evas_object_smart_callback_add(scroller, "scroll,drag,start", _default_drag_start_cb, NULL);
-       evas_object_smart_callback_add(scroller, "scroll,drag,stop", _default_drag_stop_cb, NULL);
-       evas_object_smart_callback_add(scroller, "scroll", _default_scroll_cb, NULL);
-
-       /* Use the layout between box and scroller because of alignment of a page in the box. */
-       box_layout = elm_layout_add(scroller);
-       goto_if(!box_layout, ERROR);
-       _D("box layout is created for scroller");
-       char full_path[PATH_MAX] = { 0, };
-       apptray_wgt_app_utils_get_resource(SCROLLER_LAYOUT_EDJE, full_path, sizeof(full_path));
-       _D("full_path:%s",full_path);
-       elm_layout_file_set(box_layout, full_path, SCROLLER_LAYOUT_GROUP_NAME);
-       evas_object_show(box_layout);
-       elm_object_content_set(scroller, box_layout);
-       _D("scroller content is set as box layout");
-       /* Create Box */
-       box = elm_box_add(box_layout);
-       goto_if(!box, ERROR);
-       _D("box is added to boxlayout");
-       elm_box_horizontal_set(box, EINA_TRUE);
-       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_show(box);
-       elm_object_part_content_set(box_layout, SCROLLER_BOX_PART_NAME, box);
-
-       Evas_Object *start_rect = evas_object_rectangle_add(evas_object_evas_get(box));
-       evas_object_size_hint_min_set(start_rect, (scroller_info->edge_width), (scroller_info->edge_height));
-       evas_object_data_set(start_rect, PRIVATE_DATA_KEY_EDGE_RECT, (void*)1);
-       elm_box_pack_end(box, start_rect);
-
-       Evas_Object *end_rect = evas_object_rectangle_add(evas_object_evas_get(box));
-       evas_object_size_hint_min_set(end_rect, (scroller_info->edge_width), (scroller_info->edge_height));
-       evas_object_data_set(end_rect, PRIVATE_DATA_KEY_EDGE_RECT, (void*)1);
-       elm_box_pack_end(box, end_rect);
-
-       evas_object_data_set(scroller, PRIVATE_DATA_KEY_START_EDGE_RECT, start_rect);
-       evas_object_data_set(scroller, PRIVATE_DATA_KEY_END_EDGE_RECT, end_rect);
-
-       scroller_info->parent = parent;
-       scroller_info->box_layout = box_layout;
-       scroller_info->box = box;
-
-       evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO, scroller_info);
-       _init_rotary(scroller);
-       _D("scroller created success");
-       return scroller;
-
-ERROR:
-       home_custom_scroller_del(scroller);
-       return NULL;
-}
-
-
-void home_custom_scroller_del(Evas_Object *scroller)
-{
-       _ENTER;
-       Evas_Object *page = NULL;
-       Eina_List *box_list = NULL;
-       scroller_info_s *scroller_info = NULL;
-
-       ret_if(!scroller);
-
-       scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
-       ret_if(!scroller_info);
-
-       home_custom_scroller_deregister_cb(scroller);
-       _destroy_rotary(scroller);
-
-       box_list = elm_box_children_get(scroller_info->box);
-
-       /* FIXME : We don't need to remove items? */
-       EINA_LIST_FREE(box_list, page) {
-               if (!page) break;
-               evas_object_del(page);
-       }
-
-       evas_object_del(scroller_info->box);
-       evas_object_del(scroller_info->box_layout);
-
-       evas_object_event_callback_del(scroller, EVAS_CALLBACK_MOUSE_DOWN, _scroller_mouse_down_cb);
-       evas_object_event_callback_del(scroller, EVAS_CALLBACK_MOUSE_UP, _scroller_mouse_up_cb);
-       evas_object_smart_callback_del(scroller, "scroll,anim,start", _default_anim_start_cb);
-       evas_object_smart_callback_del(scroller, "scroll,anim,stop", _default_anim_stop_cb);
-       evas_object_smart_callback_del(scroller, "scroll,drag,start", _default_drag_start_cb);
-       evas_object_smart_callback_del(scroller, "scroll,drag,stop", _default_drag_stop_cb);
-       evas_object_smart_callback_del(scroller, "scroll", _default_scroll_cb);
-
-       free(scroller_info);
-       evas_object_del(scroller);
-}
-
-
-void home_custom_scroller_pause(Evas_Object *scroller)
-{
-       _ENTER;
-       _D("");
-}
-
-
-void home_custom_scroller_resume(Evas_Object *scroller)
-{
-       _ENTER;
-       eext_rotary_object_event_activated_set(scroller, EINA_TRUE);
-
-       Evas_Object *index = (Evas_Object*)evas_object_data_get(scroller, PRIVATE_DATA_KEY_INDEX);
-       if(index)
-               home_custom_index_show(index, EINA_FALSE);
-}
-
-
-static void _page_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
-       _ENTER;
-       Evas_Event_Mouse_Down *ei = event_info;
-       ret_if(!ei);
-
-       _D("Mouse is down [%d,%d]", ei->output.x, ei->output.y);
-       evas_object_data_set(obj, PRIVATE_DATA_KEY_SCROLLER_PAGE_MOUSE_DOWN, (void *) 1);
-}
-
-
-static void _page_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
-       _ENTER;
-       Evas_Event_Mouse_Up *ei = event_info;
-       ret_if(!ei);
-
-       _D("Mouse is up [%d,%d]", ei->output.x, ei->output.y);
-       evas_object_data_del(obj, PRIVATE_DATA_KEY_SCROLLER_PAGE_MOUSE_DOWN);
-}
-
-
-void home_custom_scroller_page_append(Evas_Object *scroller, Evas_Object *page)
-{
-       _ENTER;
-       scroller_info_s *scroller_info = NULL;
-
-       ret_if(!scroller);
-       ret_if(!page);
-
-       scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
-       ret_if(!scroller_info);
-       _D("before adding mouse events");
-       evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_DOWN, _page_mouse_down_cb, NULL);
-       evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_UP, _page_mouse_up_cb, NULL);
-
-       Evas_Object *end_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_END_EDGE_RECT);
-       if(end_rect) {
-               elm_box_pack_before(scroller_info->box, page, end_rect);
-       }
-       else {
-               elm_box_pack_end(scroller_info->box, page);
-       }
-}
-
-
-void home_custom_scroller_page_prepend(Evas_Object *scroller, Evas_Object *page)
-{
-       _ENTER;
-       scroller_info_s *scroller_info = NULL;
-
-       ret_if(!scroller);
-       ret_if(!page);
-
-       scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
-       ret_if(!scroller_info);
-
-       evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_DOWN, _page_mouse_down_cb, NULL);
-       evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_UP, _page_mouse_up_cb, NULL);
-
-       Evas_Object *start_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_END_EDGE_RECT);
-       if(start_rect) {
-               elm_box_pack_after(scroller_info->box, page, start_rect);
-       }
-       else {
-               elm_box_pack_start(scroller_info->box, page);
-       }
-}
-
-
-void home_custom_scroller_page_remove(Evas_Object *scroller, Evas_Object *page)
-{
-       _ENTER;
-       scroller_info_s *scroller_info = NULL;
-
-       ret_if(!scroller);
-       ret_if(!page);
-
-       scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
-       ret_if(!scroller_info);
-
-       evas_object_event_callback_del(page, EVAS_CALLBACK_MOUSE_DOWN, _page_mouse_down_cb);
-       evas_object_event_callback_del(page, EVAS_CALLBACK_MOUSE_UP, _page_mouse_up_cb);
-
-       elm_box_unpack(scroller_info->box, page);
-
-       int nTotalCount = home_custom_scroller_get_page_count(scroller);
-       int nPageNo = home_custom_scroller_get_current_page_no(scroller);
-
-       if(nPageNo >= nTotalCount) {
-               home_custom_scroller_region_show(scroller, nTotalCount-1, 0);
-       }
-}
-
-
-int home_custom_scroller_get_page_count(Evas_Object *scroller)
-{
-       _ENTER;
-       int count = 0;
-       Eina_List *page_list = NULL;
-       scroller_info_s *scroller_info = NULL;
-
-       retv_if(!scroller, 0);
-
-       scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
-       retv_if(!scroller_info, 0);
-
-       page_list = elm_box_children_get(scroller_info->box);
-       retv_if(!page_list, 0);
-
-       count = eina_list_count(page_list);
-       count = count - 2;
-
-       eina_list_free(page_list);
-
-       return count;
-}
-
-
-void home_custom_scroller_list_append(Evas_Object *scroller, Eina_List *page_list)
-{
-       _ENTER;
-       scroller_info_s *scroller_info = NULL;
-       Eina_List *l = NULL;
-       Eina_List *n = NULL;
-       Evas_Object *page = NULL;
-
-       ret_if(!scroller);
-       ret_if(!page_list);
-
-       scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
-       ret_if(!scroller_info);
-
-       EINA_LIST_FOREACH_SAFE(page_list, l, n, page) {
-
-               evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_DOWN, _page_mouse_down_cb, NULL);
-               evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_UP, _page_mouse_up_cb, NULL);
-
-               Evas_Object *end_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_END_EDGE_RECT);
-               if(end_rect) {
-                       elm_box_pack_before(scroller_info->box, page, end_rect);
-               }
-               else {
-                       elm_box_pack_end(scroller_info->box, page);
-               }
-       }
-}
-
-
-void home_custom_scroller_list_remove(Evas_Object *scroller, Eina_List *page_list)
-{
-       _ENTER;
-       scroller_info_s *scroller_info = NULL;
-       Eina_List *l = NULL;
-       Eina_List *n = NULL;
-       Evas_Object *page = NULL;
-
-       ret_if(!scroller);
-       ret_if(!page_list);
-
-       scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
-       ret_if(!scroller_info);
-
-       EINA_LIST_FOREACH_SAFE(page_list, l, n, page) {
-
-               evas_object_event_callback_del(page, EVAS_CALLBACK_MOUSE_DOWN, _page_mouse_down_cb);
-               evas_object_event_callback_del(page, EVAS_CALLBACK_MOUSE_UP, _page_mouse_up_cb);
-
-               elm_box_unpack(scroller_info->box, page);
-       }
-}
-
-
-Eina_List *home_custom_scroller_get_page_list(Evas_Object *scroller)
-{
-       _ENTER;
-       scroller_info_s *scroller_info = NULL;
-       Eina_List *page_list = NULL;
-
-       retv_if(!scroller, NULL);
-
-       scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
-       retv_if(!scroller_info, NULL);
-
-       page_list = elm_box_children_get(scroller_info->box);
-       retv_if(!page_list, NULL);
-
-       Evas_Object *start_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_START_EDGE_RECT);
-       if(start_rect) {
-               page_list = eina_list_remove(page_list, start_rect);
-       }
-
-       Evas_Object *end_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_END_EDGE_RECT);
-       if(end_rect) {
-               page_list = eina_list_remove(page_list, end_rect);
-       }
-
-       return eina_list_clone(page_list);
-}
-
-
-void home_custom_scroller_edit(Evas_Object *scroller)
-{
-#if 0
-       scroller_info_s *scroller_info = NULL;
-
-       _D("home_custom_scroller_edit");
-
-       ret_if(!scroller);
-
-       scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
-       ret_if(!scroller_info);
-
-       elm_object_signal_emit(scroller_info->box_layout, "show,zoom", "scroller");
-#endif
-}
-
-
-void home_custom_scroller_unedit(Evas_Object *scroller)
-{
-#if 0
-       scroller_info_s *scroller_info = NULL;
-
-       _D("home_custom_scroller_unedit");
-
-       ret_if(!scroller);
-
-       scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
-       ret_if(!scroller_info);
-
-       elm_object_signal_emit(scroller_info->box_layout, "reset,zoom", "scroller");
-#endif
-       Evas_Object *page = home_custom_scroller_get_current_page(scroller);
-       ret_if(!page);
-
-       Evas_Object *index = evas_object_data_get(scroller, PRIVATE_DATA_KEY_INDEX);
-       if(index) home_custom_index_bring_in_page(index, page);
-}
-
-
-void home_custom_scroller_freeze(Evas_Object *scroller, Eina_Bool status)
-{
-       _ENTER;
-       scroller_info_s *scroller_info = NULL;
-
-       ret_if(!scroller);
-
-       scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
-       ret_if(!scroller_info);
-
-       if(status) {
-               elm_object_scroll_freeze_push(scroller_info->box);
-       }
-       else {
-               while (elm_object_scroll_freeze_get(scroller_info->box))
-                       elm_object_scroll_freeze_pop(scroller_info->box);
-       }
-}
-
-
-Eina_Bool home_custom_scroller_is_freeze(Evas_Object *scroller)
-{
-       _ENTER;
-       scroller_info_s *scroller_info = NULL;
-
-       retv_if(!scroller, EINA_FALSE);
-
-       scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
-       retv_if(!scroller_info, EINA_FALSE);
-
-       return elm_object_scroll_freeze_get(scroller_info->box);
-}
-
-
-void home_custom_scroller_page_freeze(Evas_Object *scroller, Evas_Object *page, Eina_Bool status)
-{
-       _ENTER;
-}
-
-
-Eina_Bool home_custom_scroller_is_page_freeze(Evas_Object *scroller, Evas_Object *page)
-{
-       _ENTER;
-       return EINA_FALSE;
-}
-
-
-static Eina_Bool _bring_in_timer_cb(void *data)
-{
-       _ENTER;
-       int i = 0;
-       Evas_Object *scroller = data;
-
-       i = (int) evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ITH);
-       _D("bring in to index:[%d]", i);
-
-       Eina_Bool bStatus = home_custom_scroller_is_freeze(scroller);
-       if(bStatus) {
-               home_custom_scroller_freeze(scroller, EINA_FALSE);
-       }
-
-       elm_scroller_page_bring_in(scroller, i, 0);
-
-       home_custom_scroller_freeze(scroller, bStatus);
-
-       evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER);
-
-       Evas_Object *page = home_custom_scroller_get_current_page(scroller);
-       retv_if(!page, ECORE_CALLBACK_CANCEL);
-
-       Evas_Object *index = evas_object_data_get(scroller, PRIVATE_DATA_KEY_INDEX);
-       if(index) home_custom_index_bring_in_page(index, page);
-
-       return ECORE_CALLBACK_CANCEL;
-}
-
-
-void home_custom_scroller_bring_in(Evas_Object *scroller, int page_no)
-{
-       _ENTER;
-       Ecore_Timer *timer = NULL;
-
-       ret_if(!scroller);
-
-       /* 1. Remove the old timer */
-       timer = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER);
-       if (timer) ecore_timer_del(timer);
-
-       /* 2. Append the new timer */
-       timer = ecore_timer_add(0.01f, _bring_in_timer_cb, scroller);
-       evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER, timer);
-       evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ITH, (void *)page_no);
-}
-
-
-void home_custom_scroller_bring_in_page(Evas_Object *scroller, Evas_Object *page)
-{
-       _ENTER;
-       Evas_Object *tmp = NULL;
-       Eina_List *page_list = NULL;
-       Ecore_Timer *timer = NULL;
-       scroller_info_s *scroller_info = NULL;
-       const Eina_List *l;
-       const Eina_List *n;
-       int i = -1;
-
-       ret_if(!scroller);
-       ret_if(!page);
-
-       scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
-       ret_if(!scroller_info);
-
-       page_list = elm_box_children_get(scroller_info->box);
-       ret_if(!page_list);
-
-       EINA_LIST_FOREACH_SAFE(page_list, l, n, tmp) {
-               i++;
-               break_if(!tmp);
-               if (tmp != page) continue;
-
-               /* 1. Remove the old timer */
-               timer = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER);
-               if (timer) ecore_timer_del(timer);
-
-               /* 2. Append the new timer */
-               timer = ecore_timer_add(0.01f, _bring_in_timer_cb, scroller);
-               evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER, timer);
-               evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ITH, (void *) i);
-
-               break;
-       }
-       eina_list_free(page_list);
-}
-
-
-void home_custom_scroller_bring_in_direction(Evas_Object *scroller, Home_Custom_Sc_Direction direction)
-{
-       _ENTER;
-       int hPageNo = 0;
-       int vPageNo = 0;
-       int nPageCount = 0;
-
-       elm_scroller_current_page_get(scroller, &hPageNo, &vPageNo);
-
-       nPageCount = home_custom_scroller_get_page_count(scroller);
-
-       switch(direction)
-       {
-               case HOME_CUSTOM_SC_DIRECTION_LEFT:
-                       if(hPageNo > 0) {
-                               home_custom_scroller_bring_in(scroller, hPageNo - 1);
-                       }
-                       else {
-                               _W("pageNo:[%d,%d]", hPageNo, vPageNo);
-                       }
-                       break;
-               case HOME_CUSTOM_SC_DIRECTION_RIGHT:
-                       if(hPageNo < nPageCount) {
-                               home_custom_scroller_bring_in(scroller, hPageNo + 1);
-                       }
-                       else {
-                               _W("Total Page Count:[%d], pageNo:[%d,%d]", nPageCount, hPageNo, vPageNo);
-                       }
-                       break;
-               default:
-                       _E("Wrong direction: [%d]", direction);
-                       break;
-       }
-}
-
-
-Eina_Bool home_custom_scroller_is_scrolling(Evas_Object *scroller)
-{
-       _ENTER;
-       retv_if(!scroller, EINA_FALSE);
-
-       return evas_object_data_get(scroller, PRIVATE_DATA_KEY_IS_SCROLLING) ? EINA_TRUE:EINA_FALSE;
-}
-
-
-void home_custom_scroller_region_show(Evas_Object *scroller, int hPageNo, int vPageNo)
-{
-       _ENTER;
-       elm_scroller_page_show(scroller, hPageNo, vPageNo);
-
-       evas_object_data_del(scroller, PRIVATE_DATA_KEY_IS_SCROLLING);
-
-       Evas_Object *page = home_custom_scroller_get_current_page(scroller);
-       ret_if(!page);
-
-       Evas_Object *index = evas_object_data_get(scroller, PRIVATE_DATA_KEY_INDEX);
-       if(index) home_custom_index_bring_in_page(index, page);
-}
-
-
-Evas_Object *home_custom_scroller_get_first_page(Evas_Object *scroller)
-{
-       _ENTER;
-       Eina_List *page_list = NULL;
-       scroller_info_s *scroller_info = NULL;
-       Evas_Object *page = NULL;
-
-       retv_if(!scroller, NULL);
-
-       scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
-       retv_if(!scroller_info, NULL);
-
-       page_list = elm_box_children_get(scroller_info->box);
-       retv_if(!page_list, NULL);
-
-       Evas_Object *start_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_START_EDGE_RECT);
-       if(start_rect) {
-               page_list = eina_list_remove(page_list, start_rect);
-       }
-
-       Evas_Object *end_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_END_EDGE_RECT);
-       if(end_rect) {
-               page_list = eina_list_remove(page_list, end_rect);
-       }
-
-       page = eina_list_nth(page_list, 0);
-
-       eina_list_free(page_list);
-
-       return page;
-}
-
-
-Evas_Object *home_custom_scroller_get_last_page(Evas_Object *scroller)
-{
-       _ENTER;
-       int count = 0;
-       Eina_List *page_list = NULL;
-       scroller_info_s *scroller_info = NULL;
-       Evas_Object *page = NULL;
-
-       retv_if(!scroller, NULL);
-
-       scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
-       retv_if(!scroller_info, NULL);
-
-       page_list = elm_box_children_get(scroller_info->box);
-       retv_if(!page_list, NULL);
-
-       Evas_Object *start_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_START_EDGE_RECT);
-       if(start_rect) {
-               page_list = eina_list_remove(page_list, start_rect);
-       }
-
-       Evas_Object *end_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_END_EDGE_RECT);
-       if(end_rect) {
-               page_list = eina_list_remove(page_list, end_rect);
-       }
-
-       count = eina_list_count(page_list);
-
-       page = eina_list_nth(page_list, count-1);
-
-       eina_list_free(page_list);
-
-       return page;
-}
-
-
-Evas_Object *home_custom_scroller_get_current_page(Evas_Object *scroller)
-{
-       _ENTER;
-       int hPageNo = 0;
-       int vPageNo = 0;
-
-       elm_scroller_current_page_get(scroller, &hPageNo, &vPageNo);
-       _D("hpageno:%d, vpageno:%d",hPageNo,vPageNo);
-
-       return home_custom_scroller_get_page(scroller, hPageNo);
-}
-
-
-int home_custom_scroller_get_current_page_no(Evas_Object *scroller)
-{
-       _ENTER;
-       int hPageNo = 0;
-       int vPageNo = 0;
-
-       elm_scroller_current_page_get(scroller, &hPageNo, &vPageNo);
-
-       return hPageNo;
-}
-
-
-
-Evas_Object *home_custom_scroller_get_page(Evas_Object *scroller, int index)
-{
-       _ENTER;
-       Eina_List *page_list = NULL;
-       scroller_info_s *scroller_info = NULL;
-       Evas_Object *page = NULL;
-
-       retv_if(!scroller, NULL);
-
-       scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
-       retv_if(!scroller_info, NULL);
-
-       page_list = elm_box_children_get(scroller_info->box);
-       retv_if(!page_list, NULL);
-
-       Evas_Object *start_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_START_EDGE_RECT);
-       if(start_rect) {
-               page_list = eina_list_remove(page_list, start_rect);
-       }
-
-       Evas_Object *end_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_END_EDGE_RECT);
-       if(end_rect) {
-               page_list = eina_list_remove(page_list, end_rect);
-       }
-
-       page = eina_list_nth(page_list, index);
-
-       eina_list_free(page_list);
-
-       return page;
-}
-
-
-Eina_Bool home_custom_scroller_is_edge(Evas_Object *page)
-{
-       _ENTER;
-       retv_if(!page, EINA_FALSE);
-
-       return evas_object_data_get(page, PRIVATE_DATA_KEY_EDGE_RECT) ? EINA_TRUE:EINA_FALSE;
-}
-
-/* scroller index */
-Evas_Object *home_custom_scroller_index_add(Evas_Object *parent, Evas_Object *scroller)
-{
-       _ENTER;
-       retv_if(!parent, NULL);
-       retv_if(!scroller, NULL);
-
-       Evas_Object *index = home_custom_index_create(parent, scroller);
-       retv_if(!index, NULL);
-
-       evas_object_data_set(scroller, PRIVATE_DATA_KEY_INDEX, index);
-
-       home_custom_index_update(index, scroller, INDEX_BRING_IN_AFTER);
-
-       return index;
-}
-
-void home_custom_scroller_index_update(Evas_Object *scroller)
-{
-       _ENTER;
-       ret_if(!scroller);
-
-       Evas_Object *index = evas_object_data_get(scroller, PRIVATE_DATA_KEY_INDEX);
-       if(index) home_custom_index_update(index, scroller, INDEX_BRING_IN_AFTER);
-}
-
-// End of this file
-