2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.1 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <Elementary.h>
19 #include <package_manager.h>
20 #include <package_info.h>
21 #include <app_control.h>
23 #include "homescreen-efl.h"
27 #include "folder_panel.h"
28 #include "option_menu.h"
29 #include "folder_panel.h"
32 #include "data_model.h"
34 #define MAX_BADGE_COUNT_STR_LEN 32
35 #define MAX_BADGE_DISPLAY_COUNT 999
36 #define ABOVE_MAX_BADGE_APPENDIX "+"
39 Evas_Object *icon_layout;
40 Evas_Object *icon_image;
47 .runned_app_id = NULL,
48 .click_ignore = false,
51 static void __app_icon_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
52 static void __app_icon_pressed_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
53 static void __app_icon_launch_request_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *data);
54 static bool __app_icon_check_removeable_state(Evas_Object *icon);
55 static void __app_icon_check_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
56 static void __app_icon_uncheck_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
57 static Evas_Object *__app_icon_load(Evas_Object *parent, const char *icon_path);
58 static void __app_icon_uninstall_button_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
60 static void __app_icon_uninstall(void *data);
61 static void __app_icon_highlight_folder_icon_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
62 static void __app_icon_unhighlight_folder_icon_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
63 static void __app_icon_higlight_impossible_folder_icon_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
65 /*=========================================PUBLIC FUNCTIONS IMPLEMENTATION===========================================*/
66 HAPI Evas_Object *app_icon_create(Tree_node_t *tree_data, app_icon_type_t type)
68 Evas_Object *icon_image = NULL, *icon_layout = NULL, *folder_icon_layout = NULL;
69 Evas_Object *parent = home_screen_get_win();
70 app_item_t *item = NULL;
72 if (!parent || !tree_data) {
73 LOGE("[INVALID_PARAM][parent='%p'][item='%p']", parent, tree_data);
77 item = tree_data->data;
79 LOGE("[FAILED][item='%p']", item);
83 if (type == APP_ICON_TYPE_APP || type == APP_ICON_TYPE_FOLDER) {
84 icon_layout = util_create_edje_layout(parent, EDJE_DIR"/icon.edj", GROUP_ICON_LY);
86 LOGE("Failed to create icon layout");
90 elm_object_signal_callback_add(icon_layout, SIGNAL_CHECKBOX_CHECKED, SIGNAL_SOURCE, __app_icon_check_cb, tree_data);
91 elm_object_signal_callback_add(icon_layout, SIGNAL_CHECKBOX_UNCHECKED, SIGNAL_SOURCE, __app_icon_uncheck_cb, tree_data);
92 elm_object_signal_callback_add(icon_layout, SIGNAL_UNINSTALL_BUTTON_CLICKED, SIGNAL_SOURCE, __app_icon_uninstall_button_clicked_cb, tree_data);
94 elm_object_signal_callback_add(icon_layout, "mouse,down,1", SIGNAL_PRESS_SOURCE, __app_icon_pressed_cb, (void *)item->type);
96 home_screen_mvc_set_ly_scale(icon_layout);
99 if (type == APP_ICON_TYPE_APP) {
100 icon_image = __app_icon_load(icon_layout, item->icon);
102 LOGE("Failed to create icon layout");
103 evas_object_del(icon_layout);
107 elm_object_part_content_set(icon_layout, PART_ICON_CONTENT, icon_image);
108 elm_object_signal_callback_add(icon_layout, SIGNAL_ICON_CLICKED, SIGNAL_SOURCE, __app_icon_clicked_cb, (void *)item->appid);
110 app_icon_set_label(icon_layout, item->label);
112 evas_object_show(icon_image);
113 } else if (type == APP_ICON_TYPE_FOLDER) {
114 folder_icon_layout = elm_layout_add(parent);
115 if (!folder_icon_layout) {
116 LOGE("Failed to create icon layout");
117 evas_object_del(icon_layout);
121 if (!elm_layout_file_set(folder_icon_layout, EDJE_DIR"/folder.edj", GROUP_FOLDER_ICON_LAYOUT)) {
122 LOGE("Failed to load edje file for layout");
123 evas_object_del(folder_icon_layout);
124 evas_object_del(icon_layout);
128 elm_object_part_content_set(icon_layout, PART_ICON_CONTENT, folder_icon_layout);
129 elm_object_signal_callback_add(icon_layout, SIGNAL_HIGHLIGHT_FOLDER, SIGNAL_SOURCE, __app_icon_highlight_folder_icon_cb, item);
130 elm_object_signal_callback_add(icon_layout, SIGNAL_HIGHLIGHT_IMPOSSIBLE_FOLDER, SIGNAL_SOURCE, __app_icon_higlight_impossible_folder_icon_cb, item);
131 elm_object_signal_callback_add(icon_layout, SIGNAL_UNHIGHLIGHT_FOLDER, SIGNAL_SOURCE, __app_icon_unhighlight_folder_icon_cb, item);
132 app_icon_set_label(icon_layout, item->label);
133 evas_object_show(folder_icon_layout);
135 /*create miniatures*/
137 icon_layout = __app_icon_load(parent, item->icon);
139 LOGE("Failed to create icon layout");
145 evas_object_size_hint_align_set(icon_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
146 evas_object_size_hint_weight_set(icon_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
147 evas_object_show(icon_layout);
149 evas_object_data_set(icon_layout, KEY_ICON_DATA, tree_data);
150 evas_object_data_set(icon_layout, KEY_IS_REPOSITIONABLE, (void *)true);
155 HAPI void app_icon_update_folder_icon(Tree_node_t *folder_node)
158 Evas_Object *miniatures_list_item = NULL;
159 Evas_Object *folder_icon = NULL;
160 Evas_Object *item = NULL;
161 Eina_List *it = NULL;
163 folder_data_t *folder_data = NULL;
164 app_item_t *tree_item = NULL;
166 char part_buf[BUF_SIZE];
167 char signal_buf[BUF_SIZE];
170 int miniatures_iterator = 0;
172 if (!folder_node || !folder_node->data || !folder_node->data->layout || !folder_node->data->data) {
173 LOGE("[INVALID_PARAMS]");
177 folder_icon = elm_object_part_content_get(folder_node->data->layout, PART_ICON_CONTENT);
179 LOGE("Failed to get folder icon");
183 folder_data = (folder_data_t *)folder_node->data->data;
186 LOGE("Failed to get folder_data");
190 EINA_LIST_FOREACH(folder_data->miniatures, it, miniatures_list_item) {
191 snprintf(part_buf, sizeof(part_buf), "miniature_%d", miniatures_iterator++);
192 elm_object_part_content_unset(folder_icon, part_buf);
193 evas_object_del(miniatures_list_item);
195 folder_data->miniatures = eina_list_free(folder_data->miniatures);
196 folder_data->miniatures = NULL;
198 if (!folder_node->first || !(miniatures = folder_node->first->count)) {
199 elm_object_signal_emit(folder_icon, SIGNAL_EMPTY_BG_SHOW, SIGNAL_SOURCE);
203 if (miniatures >= 3) {
207 miniatures_iterator = 0;
208 TREE_NODE_FOREACH(folder_node->first, it2)
210 tree_item = it2->data;
213 if (miniatures_iterator >= FOLDER_ICON_MAX_MINIATURES)
215 LOGI("label %s", tree_item->label);
216 item = app_icon_create(it2, APP_ICON_TYPE_MINIATURE);
221 folder_data->miniatures = eina_list_append(folder_data->miniatures, item);
222 if (!folder_data->miniatures) {
223 app_icon_destroy(item);
227 snprintf(part_buf, sizeof(part_buf), "miniature_%d", miniatures_iterator++);
228 elm_object_part_content_set(folder_icon, part_buf, item);
232 snprintf(signal_buf, sizeof(signal_buf), "set,miniatures,%d", miniatures);
233 elm_object_signal_emit(folder_icon, signal_buf, SIGNAL_SOURCE);
236 HAPI void app_icon_highlight_folder_icon(Evas_Object *folder_icon_layout, folder_icon_frame_type_t frame_type)
238 Evas_Object *icon = NULL;
239 Tree_node_t *node = NULL;
241 if (!folder_icon_layout) {
242 LOGE("Invalid parameter");
246 icon = elm_object_part_content_get(folder_icon_layout, PART_ICON_CONTENT);
248 LOGE("Failed to get icon");
252 node = evas_object_data_get(folder_icon_layout, KEY_ICON_DATA);
254 LOGE("[FAILED][node=NULL]");
258 LOGI("count %d ", node->count);
260 if (frame_type == FOLDER_ICON_FRAME_POSSIBLE) {
261 elm_object_signal_emit(icon, SIGNAL_FRAME_POSSIBLE_SHOW, SIGNAL_SOURCE);
262 } else if (frame_type == FOLDER_ICON_FRAME_IMPOSSIBLE) {
263 elm_object_signal_emit(icon, SIGNAL_FRAME_IMPOSSIBLE_SHOW, SIGNAL_SOURCE);
265 elm_object_signal_emit(icon, SIGNAL_FRAME_HIDE, SIGNAL_SOURCE);
269 HAPI void app_icon_set_click_ignore(bool ignore)
271 s_info.click_ignore = ignore;
272 folder_panel_set_click_ignore_state(ignore);
275 HAPI bool app_icon_set_view_mode(Evas_Object *icon, homescreen_view_t view, bool in_folder)
278 case HOMESCREEN_VIEW_ALL_APPS:
279 in_folder ? elm_object_signal_emit(icon, SIGNAL_EDIT_MODE_BLACK_OFF, SIGNAL_SOURCE) :
280 elm_object_signal_emit(icon, SIGNAL_EDIT_MODE_OFF, SIGNAL_SOURCE);
281 elm_object_signal_emit(icon, SIGNAL_UNINSTALL_BUTTON_HIDE, SIGNAL_SOURCE);
282 elm_object_signal_emit(icon, SIGNAL_CHECKBOX_HIDE, SIGNAL_SOURCE);
283 app_icon_set_click_ignore(false);
285 case HOMESCREEN_VIEW_ALL_APPS_EDIT:
286 in_folder ? elm_object_signal_emit(icon, SIGNAL_EDIT_MODE_BLACK_ON, SIGNAL_SOURCE) :
287 elm_object_signal_emit(icon, SIGNAL_EDIT_MODE_ON, SIGNAL_SOURCE);
288 if (__app_icon_check_removeable_state(icon))
289 elm_object_signal_emit(icon, SIGNAL_UNINSTALL_BUTTON_SHOW, SIGNAL_SOURCE);
290 app_icon_set_click_ignore(true);
292 case HOMESCREEN_VIEW_ALL_APPS_CHOOSE:
293 in_folder ? elm_object_signal_emit(icon, SIGNAL_EDIT_MODE_BLACK_ON, SIGNAL_SOURCE) :
294 elm_object_signal_emit(icon, SIGNAL_EDIT_MODE_ON, SIGNAL_SOURCE);
295 elm_object_signal_emit(icon, SIGNAL_UNINSTALL_BUTTON_HIDE, SIGNAL_SOURCE);
296 elm_object_signal_emit(icon, SIGNAL_CHECKBOX_SHOW_UNCHECKED, SIGNAL_SOURCE);
297 app_icon_set_click_ignore(true);
299 case HOMESCREEN_VIEW_HOME:
300 case HOMESCREEN_VIEW_HOME_EDIT:
301 case HOMESCREEN_VIEW_HOME_ALL_PAGES:
303 app_icon_set_click_ignore(true);
310 HAPI void app_icon_set_label(Evas_Object *icon_layout, const char* label)
312 if (!icon_layout || !label) {
313 LOGE("Invalid parameter");
317 elm_object_part_text_set(icon_layout, PART_ICON_NAME, label);
320 HAPI void app_icon_set_label_black(Evas_Object *icon_layout)
322 if (home_screen_get_view_type() == HOMESCREEN_VIEW_ALL_APPS_EDIT) {
323 elm_object_signal_emit(icon_layout, SIGNAL_EDIT_MODE_BLACK_ON, SIGNAL_SOURCE);
325 elm_object_signal_emit(icon_layout, SIGNAL_BLACK_TEXT, SIGNAL_SOURCE);
329 HAPI void app_icon_set_color(Evas_Object *icon_layout, int r, int g, int b, int a)
332 LOGE("Failed to get folder icon layout");
336 evas_object_color_set(icon_layout, r, g, b, a);
339 HAPI void app_icon_destroy(Evas_Object *icon_layout)
342 LOGE("Invalid parameter : icon_layout is NULL");
346 evas_object_del(icon_layout);
350 HAPI void app_icon_show_badge(Evas_Object *app_icon_layout, const unsigned int number)
352 char number_str[MAX_BADGE_COUNT_STR_LEN];
354 if (!app_icon_layout) {
355 LOGE("Invalid state of the application - icon_layout is NULL");
360 app_icon_hide_badge(app_icon_layout);
364 if (number > MAX_BADGE_DISPLAY_COUNT) {
365 eina_convert_itoa(MAX_BADGE_DISPLAY_COUNT, number_str);
366 strncat(number_str, ABOVE_MAX_BADGE_APPENDIX, MAX_BADGE_COUNT_STR_LEN);
368 eina_convert_itoa(number, number_str);
371 elm_layout_text_set(app_icon_layout, "icon_badge_text", number_str);
373 elm_object_signal_emit(app_icon_layout, SIGNAL_BADGE_SHOW, SIGNAL_SOURCE);
376 HAPI void app_icon_hide_badge(Evas_Object *app_icon_layout)
378 if (!app_icon_layout) {
379 LOGE("Invalid state of the application - icon_layout is NULL");
383 elm_object_signal_emit(app_icon_layout, SIGNAL_BADGE_HIDE, SIGNAL_SOURCE);
386 HAPI void app_icon_show_label(Evas_Object *app_icon_layout)
388 Evas_Object *icon = NULL;
390 if (app_icon_layout) {
391 icon = elm_object_part_content_get(app_icon_layout, PART_ICON_CONTENT);
393 elm_object_signal_emit(icon, SIGNAL_LABEL_SHOW, SIGNAL_SOURCE);
397 HAPI void app_icon_hide_label(Evas_Object *app_icon_layout)
399 Evas_Object *icon = NULL;
401 if (app_icon_layout) {
402 icon = elm_object_part_content_get(app_icon_layout, PART_ICON_CONTENT);
404 elm_object_signal_emit(icon, SIGNAL_LABEL_HIDE, SIGNAL_SOURCE);
408 HAPI void app_icon_remove(Evas_Object *icon_layout)
411 LOGE("[INVALID_PARAM]");
415 evas_object_data_del(icon_layout, KEY_ICON_DATA);
416 evas_object_del(icon_layout);
420 /*=========================================PRIVATE FUNCTIONS IMPLEMENTATION======================================*/
421 static void __app_icon_launch_request_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *data)
423 LOGD("[__app_icon_launch_request_cb]");
425 case APP_CONTROL_RESULT_CANCELED:
426 LOGD("[APP_CONTROL_RESULT_CANCELED]");
427 s_info.runned_app_id = NULL;
429 case APP_CONTROL_RESULT_FAILED:
430 LOGD("[APP_CONTROL_RESULT_FAILED]");
431 s_info.runned_app_id = NULL;
433 case APP_CONTROL_RESULT_SUCCEEDED:
434 LOGD("[APP_CONTROL_RESULT_SUCCEEDED]");
437 LOGD("UNKNOWN ERROR");
438 s_info.runned_app_id = NULL;
443 static void __app_icon_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
445 char *appid = (char *) data;
446 app_control_h app_control_handle = NULL;
449 LOGE("Failed to obtain pgk_id of clicked application");
453 if (s_info.click_ignore == false) {
454 if (!s_info.runned_app_id) {
455 folder_panel_close_folder();
457 if (app_control_create(&app_control_handle) != APP_CONTROL_ERROR_NONE) {
458 LOGE("[FAILED][app_control_create]");
462 if (app_control_set_app_id(app_control_handle, appid) != APP_CONTROL_ERROR_NONE) {
463 LOGE("[FAILED][app_control_set_app_id]");
464 app_control_destroy(app_control_handle);
468 if (app_control_send_launch_request(app_control_handle, __app_icon_launch_request_cb, NULL) != APP_CONTROL_ERROR_NONE) {
469 LOGE("[FAILED][app_control_send_launch_request]");
470 app_control_destroy(app_control_handle);
473 app_control_destroy(app_control_handle);
479 static void __app_icon_pressed_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
481 app_item_type_t type = (app_item_type_t)data;
483 if (type == APP_ITEM_FOLDER ||
484 home_screen_get_view_type() == HOMESCREEN_VIEW_ALL_APPS)
485 elm_object_signal_emit(obj, SIGNAL_ICON_PRESS, SIGNAL_PRESS_SOURCE);
488 static bool __app_icon_check_removeable_state(Evas_Object *icon)
490 Tree_node_t *item = NULL;
492 LOGE("[INVALID_PARAM][icon='%p']", icon);
496 item = evas_object_data_get(icon, KEY_ICON_DATA);
498 LOGE("[FAILED][evas_object_data_get]");
503 LOGE("[FAILED][item->data='%p']", item->data);
507 return item->data->removable;
510 static void __app_icon_check_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
512 Tree_node_t *node = (Tree_node_t *)data;
513 app_item_t *item = node->data;
515 char trbuf[PATH_MAX] = {0, };
517 if (item->type == APP_ITEM_ICON) {
518 item->is_checked = true;
519 if (node->parent->parent->data->type == APP_ITEM_FOLDER && folder_panel_set_content_checked(node->parent->parent))
520 elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_SHOW_CHECKED, SIGNAL_SOURCE);
521 } else if (item->type == APP_ITEM_FOLDER) {
522 data_model_check_all_apps(node, true);
524 option_menu_update_on_item_selected();
526 count = data_model_get_app_check_state();
527 if (count > FOLDER_MAX_ITEMS) {
528 __app_icon_uncheck_cb(data, obj, SIGNAL_CHECKBOX_UNCHECKED, SIGNAL_SOURCE);
529 elm_object_signal_emit(node->data->layout, SIGNAL_CHECKBOX_SHOW_UNCHECKED, SIGNAL_SOURCE);
531 popup_data_t *p_data = popup_create_data();
533 LOGE("[FAILED][failed to create popup data]");
537 snprintf(trbuf, sizeof(trbuf), _("IDS_HS_TPOP_MAXIMUM_NUMBER_OF_APPLICATIONS_IN_FOLDER_HPD_REACHED"),
540 p_data->type = POPUP_INFO;
541 p_data->popup_title_text = NULL;
542 p_data->popup_content_text = strdup(trbuf);
543 p_data->popup_confirm_text = NULL;
544 p_data->popup_cancel_text = NULL;
545 p_data->orientation = ELM_POPUP_ORIENT_CENTER;
546 p_data->visible_time = 2.0;
548 popup_show(p_data, NULL, NULL, NULL);
552 static void __app_icon_uncheck_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
554 Tree_node_t *node = (Tree_node_t *)data;
555 app_item_t *item = node->data;
556 if (item->type == APP_ITEM_ICON) {
557 item->is_checked = false;
558 if (node->parent->parent->data->type == APP_ITEM_FOLDER && !folder_panel_set_content_checked(node->parent->parent))
559 elm_object_signal_emit(node->parent->parent->data->layout, SIGNAL_CHECKBOX_SHOW_UNCHECKED, SIGNAL_SOURCE);
560 } else if (item->type == APP_ITEM_FOLDER) {
561 data_model_check_all_apps(node, false);
563 option_menu_update_on_item_selected();
566 Evas_Object *__app_icon_load(Evas_Object *parent, const char *icon_path)
568 Evas_Object *icon_image = NULL;
570 if (!parent || !icon_path) {
571 LOGE("Invalid parameter");
575 icon_image = elm_image_add(parent);
577 LOGE("Failed to create an icon.");
581 if ((strncmp("", icon_path, strlen(icon_path)) && elm_image_file_set(icon_image, icon_path, NULL)) || elm_image_file_set(icon_image, DEFAULT_APP_ICON, NULL))
584 evas_object_del(icon_image);
588 static void __app_icon_uninstall_button_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
590 LOGI("__app_icon_uninstall_button_clicked_cb");
591 Tree_node_t *app_node = NULL;
592 char buf[BUF_SIZE] = {0, };
594 app_node = (Tree_node_t *) data;
596 LOGE("[FAILED][evas_object_data_get]");
600 if (!app_node->data || !app_node->data->label) {
601 LOGE("[INVALID][invalid node data]");
605 popup_data_t *p_data = popup_create_data();
607 LOGE("[FAILED][failed to create popup data]");
611 if ((app_node->data->type == APP_ITEM_FOLDER) && (folder_panel_get_items_count(app_node) > 0)) {
612 p_data->type = POPUP_TWO_BUTTONS;
613 p_data->popup_title_text = strdup(_("IDS_HS_HEADER_REMOVE_FOLDER_ABB"));
614 p_data->popup_content_text = strdup(_("IDS_HS_BODY_FOLDER_WILL_BE_REMOVED_APPLICATIONS_IN_THIS_FOLDER_WILL_NOT_BE_UNINSTALLED"));
615 p_data->popup_confirm_text = strdup(_("IDS_ST_BUTTON_REMOVE_ABB2"));
616 p_data->popup_cancel_text = strdup(_("IDS_CAM_SK_CANCEL"));
617 p_data->orientation = ELM_POPUP_ORIENT_CENTER;
618 popup_show(p_data, __app_icon_uninstall, NULL, (void *) obj);
619 } else if (app_node->data->type == APP_ITEM_ICON) {
620 snprintf(buf, sizeof(buf), _("IDS_HS_POP_PS_WILL_BE_UNINSTALLED"), app_node->data->label);
621 p_data->type = POPUP_TWO_BUTTONS;
622 p_data->popup_title_text = strdup(_("IDS_AT_BODY_UNINSTALL"));
623 p_data->popup_content_text = strdup(buf);
624 p_data->popup_confirm_text = strdup(_("IDS_AT_BODY_UNINSTALL"));
625 p_data->popup_cancel_text = strdup(_("IDS_CAM_SK_CANCEL"));
626 p_data->orientation = ELM_POPUP_ORIENT_CENTER;
627 popup_show(p_data, __app_icon_uninstall, NULL, (void *) obj);
629 __app_icon_uninstall((void *) obj);
630 popup_data_free(p_data);
634 static void __app_icon_uninstall(void *data)
636 Tree_node_t *app_node = NULL;
637 Evas_Object *icon = NULL;
639 icon = (Evas_Object *) data;
641 LOGE("[INVALID_PARAM][data='%p']", data);
645 LOGI("[%s]", evas_object_type_get(icon));
647 app_node = evas_object_data_get(icon, KEY_ICON_DATA);
648 if (!app_node || !app_node->data) {
649 LOGE("[FAILED][evas_object_data_get]");
653 all_apps_detach_from_grid(app_node->data->grid_item);
654 app_node->data->grid_item = NULL;
655 app_icon_remove(icon);
656 app_node->data->layout = NULL;
658 home_screen_mvc_item_uninstall_cb(app_node);
661 static void __app_icon_highlight_folder_icon_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
663 Evas_Object *icon = elm_object_part_content_get(obj, PART_ICON_CONTENT);
664 elm_object_signal_emit(icon, SIGNAL_FRAME_POSSIBLE_SHOW, SIGNAL_SOURCE);
667 static void __app_icon_unhighlight_folder_icon_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
669 Evas_Object *icon = elm_object_part_content_get(obj, PART_ICON_CONTENT);
670 elm_object_signal_emit(icon, SIGNAL_FRAME_HIDE, SIGNAL_SOURCE);
673 static void __app_icon_higlight_impossible_folder_icon_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
675 Evas_Object *icon = elm_object_part_content_get(obj, PART_ICON_CONTENT);
676 elm_object_signal_emit(icon, SIGNAL_FRAME_IMPOSSIBLE_SHOW, SIGNAL_SOURCE);
678 /*===============================================================================================================*/