4 * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
20 #include <Elementary.h>
21 #include <app_manager.h>
32 #define PRIVATE_DATA_KEY_CLEAR "p_clr"
33 #define PRIVATE_DATA_KEY_NEXT_ITEM "p_n_it"
34 #define PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING "p_in_mv"
35 #define PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING "p_an_mv"
36 #define PRIVATE_DATA_KEY_ITEM_X "p_it_x"
37 #define PRIVATE_DATA_KEY_ITEM_Y "p_it_y"
38 #define PRIVATE_DATA_KEY_ITEM_W "p_it_w"
39 #define PRIVATE_DATA_KEY_ITEM_H "p_it_h"
40 #define PRIVATE_DATA_KEY_DOWN_X "p_dw_x"
41 #define PRIVATE_DATA_KEY_DOWN_Y "p_dw_y"
42 #define PRIVATE_DATA_KEY_DOWN_TIME "p_dw_t"
43 #define PRIVATE_DATA_KEY_SCROLLED "p_sc"
44 #define PRIVATE_DATA_KEY_PRESSED "p_pre"
45 #define PRIVATE_DATA_KEY_ITEM_MOVED "p_it_mv"
47 #define PRIVATE_MOVE_THRESHOLD 30
48 #define PRIVATE_FLICK_TIME 100
49 #define PRIVATE_ITEM_TERMINATE_THRESHOLD 2.0
50 #define PRIVATE_ITEM_ALPHA 0.8
51 #define PRIVATE_ITEM_ALPHA_MAX 100
55 list_type_default_s *item_get_info(Evas_Object *item)
58 list_type_default_s *info = NULL;
60 info = evas_object_data_get(item, DATA_KEY_ITEM_INFO);
67 void item_clear_set_disable(Evas_Object *scroller)
69 Evas_Object *clear_item = NULL;
72 clear_item = evas_object_data_get(scroller, PRIVATE_DATA_KEY_CLEAR);
74 elm_layout_signal_emit(main_get_info()->layout, "no,apps,txt,show", "no,apps,txt");
75 elm_layout_signal_emit(clear_item, "no,apps", "clear");
81 static void _clear_all_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
83 Evas_Object *scroller = data;
86 scroller_pop_all_item(scroller, 1);
91 Evas_Object *item_clear_all_create(Evas_Object *scroller)
93 retv_if(!scroller, NULL);
95 Evas_Object *clear_item = NULL;
97 clear_item = elm_layout_add(scroller);
98 retv_if(!clear_item, NULL);
100 if (!elm_layout_file_set(clear_item, util_get_file_path(APP_DIR_RESOURCE, ITEM_LAYOUT_EDJ), "clear_item")) {
101 _E("Failed to set the layout");
102 evas_object_del(clear_item);
106 elm_object_part_text_set(clear_item, "name", _("IDS_TASKMGR_BUTTON_CLEAR_ALL"));
108 elm_object_signal_callback_add(clear_item, "click", "clear_item", _clear_all_clicked_cb, scroller);
109 evas_object_data_set(scroller, PRIVATE_DATA_KEY_CLEAR, clear_item);
111 evas_object_size_hint_weight_set(clear_item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
112 evas_object_show(clear_item);
120 void item_clear_all_destroy(Evas_Object *scroller)
124 Evas_Object *clear_item = NULL;
126 clear_item = evas_object_data_del(scroller, PRIVATE_DATA_KEY_CLEAR);
127 if (clear_item) evas_object_del(clear_item);
132 static Evas_Object *_content_set_item_inner(Evas_Object *item_outer)
134 Evas_Object *box = NULL;
135 Evas_Object *item_inner = NULL;
136 Evas_Object *next_item = NULL;
138 box = main_get_info()->box;
141 item_inner = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
142 retv_if(!item_inner, NULL);
144 next_item = evas_object_data_del(item_outer, PRIVATE_DATA_KEY_NEXT_ITEM);
146 elm_box_unpack(box, item_outer);
147 elm_object_part_content_set(item_outer, "inner", item_inner);
150 elm_box_pack_end(box, item_outer);
152 elm_box_pack_before(box, item_outer, next_item);
159 static Evas_Object *_content_unset_item_inner(Evas_Object *item_outer)
161 Evas_Object *box = NULL;
162 Evas_Object *item_inner = NULL;
163 Evas_Object *tmp_item = NULL;
164 Eina_List *list = NULL;
165 const Eina_List *l = NULL;
166 const Eina_List *ln = NULL;
169 box = main_get_info()->box;
172 item_inner = elm_object_part_content_unset(item_outer, "inner");
173 retv_if(!item_inner, NULL);
174 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING, item_inner);
176 list = elm_box_children_get(box);
177 retv_if(!list, NULL);
179 EINA_LIST_FOREACH_SAFE(list, l, ln, tmp_item) {
180 if (item_outer != tmp_item) continue;
181 Evas_Object *next_item = eina_list_data_get(ln);
182 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_NEXT_ITEM, next_item);
185 eina_list_free(list);
193 #define ANIM_RATE_SPARE ANIM_RATE - 1
194 static Eina_Bool _anim_move_item(void *data)
196 Evas_Object *scroller = NULL;
197 Evas_Object *item_inner = NULL;
198 Evas_Object *item_outer = NULL;
202 int end_pos, cur_pos;
206 goto_if(!data, ERROR);
208 scroller = main_get_info()->scroller;
209 goto_if(!scroller, ERROR);
211 item_inner = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
212 goto_if(!item_inner, ERROR);
214 evas_object_geometry_get(item_inner, &cur_x, &cur_y, NULL, NULL);
215 evas_object_geometry_get(item_outer, &end_x, &end_y, NULL, NULL);
218 vec_pos = (end_x - cur_x)/ANIM_RATE;
222 if ((end_pos - cur_pos) < 0) { // Move : Right -> Left
223 evas_object_move(item_inner, cur_x, cur_y);
224 int alp = 255 - ((cur_pos - end_pos) * PRIVATE_ITEM_ALPHA) - 1;
225 if (alp < PRIVATE_ITEM_ALPHA_MAX) alp = PRIVATE_ITEM_ALPHA_MAX;
226 evas_object_color_set(item_inner, alp, alp, alp, alp);
228 if (cur_pos - ANIM_RATE_SPARE <= end_pos) {
229 evas_object_move(item_inner, end_x, end_y);
230 goto_if (! _content_set_item_inner(item_outer), ERROR);
231 /* unfreeze the scroller after setting the content */
232 scroller_unfreeze(scroller);
233 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
234 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
235 return ECORE_CALLBACK_CANCEL;
238 else { // Move : Left -> Right
239 evas_object_move(item_inner, cur_x, cur_y);
240 int alp = 255 - ((end_pos - cur_pos) * PRIVATE_ITEM_ALPHA) - 1;
241 if (alp < PRIVATE_ITEM_ALPHA_MAX) alp = PRIVATE_ITEM_ALPHA_MAX;
242 evas_object_color_set(item_inner, alp, alp, alp, alp);
244 if (cur_pos + ANIM_RATE_SPARE >= end_pos) {
245 evas_object_move(item_inner, end_x, end_y);
246 goto_if (NULL == _content_set_item_inner(item_outer), ERROR);
247 /* unfreeze the scroller after setting the content */
248 scroller_unfreeze(scroller);
249 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
250 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
251 return ECORE_CALLBACK_CANCEL;
254 return ECORE_CALLBACK_RENEW;
258 scroller_unfreeze(scroller);
259 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
260 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
262 return ECORE_CALLBACK_CANCEL;
267 #define SLIPPED_LENGTH 40
268 static Eina_Bool _anim_slipped_item(void *data)
270 Evas_Object *scroller = NULL;
271 Evas_Object *item_outer = data;
273 int item_outer_w, item_outer_h;
275 goto_if(!item_outer, ERROR);
277 scroller = main_get_info()->scroller;
278 goto_if(!scroller, ERROR);
280 item_outer_w = (int)evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_W);
281 item_outer_h = (int)evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_H);
283 item_outer_h -= SLIPPED_LENGTH;
284 evas_object_size_hint_min_set(item_outer, item_outer_w, item_outer_h);
285 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_H, (void *)item_outer_h);
287 if (item_outer_h <= 0) {
288 scroller_pop_item(scroller, item_outer, 1);
290 if (scroller_count(scroller) < 2) {
291 item_clear_set_disable(scroller);
296 return ECORE_CALLBACK_RENEW;
300 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_W);
301 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_H);
302 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
304 return ECORE_CALLBACK_CANCEL;
309 #define TERMINATE_LENGTH 60
310 static Eina_Bool _anim_terminate_item(void *data)
312 Evas_Object *item_outer = data;
313 Evas_Object *item_inner = NULL;
315 int item_x, item_y, item_w, item_h, is_boundary = 0;
316 int outer_x, outer_y;
318 goto_if(!item_outer, ERROR);
320 item_inner = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
322 item_inner = elm_object_part_content_unset(item_outer, "inner");
323 retv_if(!item_inner, ECORE_CALLBACK_CANCEL);
324 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING, item_inner);
327 evas_object_geometry_get(item_inner, &item_x, &item_y, &item_w, &item_h);
328 evas_object_geometry_get(item_outer, &outer_x, &outer_y, NULL, NULL);
330 if (item_x >= outer_x) {
331 item_x += TERMINATE_LENGTH;
333 item_x -= TERMINATE_LENGTH;
336 if (item_x >= main_get_info()->root_w || (item_x + item_w) <= 0) {
340 evas_object_move(item_inner, item_x, item_y);
343 Evas_Object *scroller = NULL;
344 Ecore_Animator *anim = NULL;
346 scroller = main_get_info()->scroller;
347 goto_if(!scroller, ERROR);
349 /* unfreeze the scroller after setting the content */
350 scroller_unfreeze(scroller);
351 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
352 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
353 evas_object_color_set(item_inner, 255, 255, 255, 0);
354 elm_object_part_content_set(item_outer, "inner", item_inner);
356 anim = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
358 ecore_animator_del(anim);
360 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
362 anim = ecore_animator_add(_anim_slipped_item, item_outer);
363 goto_if(!anim, ERROR);
364 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING, anim);
365 return ECORE_CALLBACK_CANCEL;
367 return ECORE_CALLBACK_RENEW;
371 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
372 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
374 return ECORE_CALLBACK_CANCEL;
379 static void _down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
381 Evas_Event_Mouse_Down *ei = event_info;
382 Evas_Object *item_outer = data;
383 Evas_Object *item_inner = NULL;
385 int x = ei->output.x;
386 int y = ei->output.y;
387 int down_time = ei->timestamp;
388 int rect_x, rect_y, rect_w, rect_h;
392 _D("Down (%d, %d)", x, y);
394 item_inner = elm_object_part_content_get(item_outer, "inner");
396 item_inner = evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
398 elm_object_part_content_set(item_outer, "inner", item_inner);
401 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_PRESSED, (void *) 1);
402 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_DOWN_X, (void *) x);
403 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_DOWN_Y, (void *) y);
404 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_DOWN_TIME, (void *)down_time);
406 evas_object_geometry_get(item_outer, &rect_x, &rect_y, &rect_w, &rect_h);
407 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_X, (void *) rect_x);
408 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_Y, (void *) rect_y);
409 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_W, (void *) rect_w);
410 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_H, (void *) rect_h);
415 #define LAUNCHING_LENGTH 60
416 #define SCROLLER_THRESHOLD 15
417 static void _move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
419 Evas_Event_Mouse_Move *ei = event_info;
420 Evas_Object *item_outer = data;
422 Evas_Object *layout = NULL;
423 Evas_Object *item_inner = NULL;
424 Evas_Object *scroller = NULL;
425 Ecore_Animator *anim = NULL;
428 int outer_x, outer_y;
429 int cur_x, cur_y, vec_x, vec_y;
432 if (!item_outer) return;
433 if (!evas_object_data_get(item_outer, PRIVATE_DATA_KEY_PRESSED)) return;
435 scroller = main_get_info()->scroller;
437 if (scroller_is_scrolling(scroller)) {
438 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_SCROLLED, (void *)1);
439 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_PRESSED);
444 layout = main_get_info()->layout;
447 anim = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
450 down_x = (int) evas_object_data_get(item_outer, PRIVATE_DATA_KEY_DOWN_X);
451 down_y = (int) evas_object_data_get(item_outer, PRIVATE_DATA_KEY_DOWN_Y);
453 outer_x = (int)evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_X);
454 outer_y = (int)evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_Y);
456 cur_x = ei->cur.output.x;
457 cur_y = ei->cur.output.y;
459 vec_x = cur_x - down_x;
460 vec_y = cur_y - down_y;
464 if (!evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_MOVED)) {
465 if (abs(vec_y) > abs(vec_x) + SCROLLER_THRESHOLD) {
466 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_SCROLLED, (void *)1);
469 if (abs(vec_x) <= PRIVATE_MOVE_THRESHOLD) return;
470 if (abs(vec_y) >= SCROLLER_THRESHOLD) return;
473 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_MOVED, (void *) 1);
474 item_inner = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
476 /* freeze the scroller before unsetting the content */
477 scroller_freeze(scroller);
478 ret_if(!_content_unset_item_inner(item_outer));
481 alpha = 255 -(abs(vec_x) * PRIVATE_ITEM_ALPHA);
482 if (alpha < PRIVATE_ITEM_ALPHA_MAX) {
483 alpha = PRIVATE_ITEM_ALPHA_MAX;
486 evas_object_color_set(item_inner, alpha, alpha, alpha, alpha);
487 evas_object_move(item_inner, outer_x, outer_y);
492 static void _item_terminate_anim(Evas_Object *item_outer)
494 Ecore_Animator *anim = NULL;
496 anim = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
498 ecore_animator_del(anim);
500 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
503 anim = ecore_animator_add(_anim_terminate_item, item_outer);
505 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING, anim);
510 static void _up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
512 Evas_Event_Mouse_Up *ei = event_info;
513 Evas_Object *item_outer = data;
515 Evas_Object *scroller = NULL;
517 int x = ei->output.x;
518 int y = ei->output.y;
519 int up_time = ei->timestamp;
521 int init_pos, item_pos, item_size, tm_threshold;
523 _D("Up (%d, %d)", x, y);
525 ret_if (!item_outer);
527 scroller = main_get_info()->scroller;
530 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_PRESSED);
531 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_DOWN_Y);
532 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_DOWN_X);
533 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_MOVED);
534 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_SCROLLED);
536 down_time = (int) evas_object_data_del(item_outer, PRIVATE_DATA_KEY_DOWN_TIME);
538 /* This means the inner item has not been moved */
539 Evas_Object *item_inner = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
540 if (!item_inner) return;
542 init_pos = (int) evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_X);
543 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_Y);
544 evas_object_geometry_get(item_inner, &item_pos, NULL, &item_size, NULL);
545 tm_threshold = item_size * PRIVATE_ITEM_TERMINATE_THRESHOLD;
547 if (abs(item_pos - init_pos) > tm_threshold || (up_time - down_time < PRIVATE_FLICK_TIME && abs(item_pos - init_pos) > 0)) {
548 _item_terminate_anim(item_outer);
550 } else if (item_pos != init_pos) {
551 Ecore_Animator *anim = NULL;
552 anim = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
554 ecore_animator_del(anim);
556 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
559 anim = ecore_animator_add(_anim_move_item, item_outer);
560 ret_if(NULL == anim);
561 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING, anim);
567 static void _clicked_cb(void *data, Evas_Object *obj, void *event_info)
572 Evas_Object *item = data;
573 Evas_Object *item_inner = NULL;
575 const char *appid = NULL;
577 list_type_default_s *info = NULL;
579 item_inner = elm_object_part_content_get(item, "inner");
580 if (!item_inner) return;
582 info = item_get_info(item);
588 util_launch_app(appid);
589 //layout_hide_with_timer();
594 Evas_Object *item_create(Evas_Object *scroller, list_type_default_s *info)
596 retv_if(NULL == scroller, NULL);
597 retv_if(NULL == info, NULL);
599 Evas_Object *focus = NULL;
600 Evas_Object *icon = NULL;
601 Evas_Object *item = NULL;
602 Evas_Object *item_inner = NULL;
604 item = elm_layout_add(scroller);
605 retv_if(NULL == item, NULL);
606 elm_layout_file_set(item, util_get_file_path(APP_DIR_RESOURCE, ITEM_LAYOUT_EDJ), "item");
607 evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
608 evas_object_show(item);
610 item_inner = elm_layout_add(scroller);
611 goto_if(NULL == item_inner, ERROR);
612 elm_layout_file_set(item_inner, util_get_file_path(APP_DIR_RESOURCE, ITEM_LAYOUT_EDJ), "item_inner");
613 evas_object_size_hint_weight_set(item_inner, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
614 evas_object_show(item_inner);
615 elm_object_part_content_set(item, "inner", item_inner);
616 evas_object_event_callback_add(item_inner, EVAS_CALLBACK_MOUSE_DOWN, _down_cb, item);
617 evas_object_event_callback_add(item_inner, EVAS_CALLBACK_MOUSE_MOVE, _move_cb, item);
618 evas_object_event_callback_add(item_inner, EVAS_CALLBACK_MOUSE_UP, _up_cb, item);
620 icon = evas_object_image_add(main_get_info()->e);
621 goto_if(NULL == icon, ERROR);
622 evas_object_image_file_set(icon, info->icon, NULL);
623 evas_object_image_filled_set(icon, EINA_TRUE);
624 evas_object_show(icon);
625 elm_object_part_content_set(item_inner, "icon", icon);
626 elm_object_part_text_set(item_inner, "name", info->name);
628 focus = elm_button_add(scroller);
629 goto_if(NULL == focus, ERROR);
630 elm_object_style_set(focus, "focus");
631 elm_object_part_content_set(item, "focus", focus);
632 evas_object_smart_callback_add(focus, "clicked", _clicked_cb, item);
634 evas_object_data_set(item, DATA_KEY_ITEM_INFO, info);
645 void item_destroy(Evas_Object *item)
649 Evas_Object *focus = NULL;
650 Evas_Object *icon = NULL;
651 Evas_Object *item_inner = NULL;
653 focus = elm_object_part_content_unset(item, "focus");
655 evas_object_del(focus);
658 item_inner = elm_object_part_content_unset(item, "inner");
660 _E("cannot get the object");
661 evas_object_del(item);
665 icon = elm_object_part_content_unset(item_inner, "icon");
667 evas_object_del(icon);
669 _E("cannot get the object");
672 evas_object_data_del(item, DATA_KEY_ITEM_INFO);
674 evas_object_del(item_inner);
675 evas_object_del(item);
680 void item_terminate(Evas_Object *item)
684 bool running = false;
687 ret_if(!item_get_info(item));
688 appid = item_get_info(item)->appid;
691 ret = app_manager_is_running(appid, &running);
692 ret_if(APP_MANAGER_ERROR_NONE != ret);
694 _D("Terminate: %s(%d)", appid, running);
696 util_kill_app(appid);