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>
33 #define PRIVATE_DATA_KEY_CLEAR "p_clr"
34 #define PRIVATE_DATA_KEY_NEXT_ITEM "p_n_it"
35 #define PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING "p_in_mv"
36 #define PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING "p_an_mv"
37 #define PRIVATE_DATA_KEY_ITEM_X "p_it_x"
38 #define PRIVATE_DATA_KEY_ITEM_Y "p_it_y"
39 #define PRIVATE_DATA_KEY_ITEM_W "p_it_w"
40 #define PRIVATE_DATA_KEY_ITEM_H "p_it_h"
41 #define PRIVATE_DATA_KEY_DOWN_X "p_dw_x"
42 #define PRIVATE_DATA_KEY_DOWN_Y "p_dw_y"
43 #define PRIVATE_DATA_KEY_DOWN_TIME "p_dw_t"
44 #define PRIVATE_DATA_KEY_SCROLLED "p_sc"
45 #define PRIVATE_DATA_KEY_PRESSED "p_pre"
46 #define PRIVATE_DATA_KEY_ITEM_MOVED "p_it_mv"
48 #define PRIVATE_MOVE_THRESHOLD 30
49 #define PRIVATE_FLICK_TIME 100
50 #define PRIVATE_ITEM_TERMINATE_THRESHOLD 2.0
51 #define PRIVATE_ITEM_ALPHA 0.8
52 #define PRIVATE_ITEM_ALPHA_MAX 100
56 extern list_type_default_s *item_get_info(Evas_Object *item)
59 list_type_default_s *info = NULL;
61 info = evas_object_data_get(item, DATA_KEY_ITEM_INFO);
68 extern void item_clear_set_disable(Evas_Object *scroller)
70 Evas_Object *clear_item = NULL;
73 clear_item = evas_object_data_get(scroller, PRIVATE_DATA_KEY_CLEAR);
75 elm_layout_signal_emit(main_get_info()->layout, "no,apps,txt,show", "no,apps,txt");
76 elm_layout_signal_emit(clear_item, "no,apps", "clear");
82 static void _clear_all_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
84 Evas_Object *scroller = data;
87 scroller_pop_all_item(scroller, 1);
92 extern Evas_Object *item_clear_all_create(Evas_Object *scroller)
94 retv_if(!scroller, NULL);
96 Evas_Object *clear_item = NULL;
98 clear_item = elm_layout_add(scroller);
99 retv_if(!clear_item, NULL);
101 if (!elm_layout_file_set(clear_item, ITEM_LAYOUT, "clear_item")) {
102 _E("Failed to set the layout");
103 evas_object_del(clear_item);
107 elm_object_part_text_set(clear_item, "name", _("IDS_TASKMGR_BUTTON_CLEAR_ALL"));
109 elm_object_signal_callback_add(clear_item, "click", "clear_item", _clear_all_clicked_cb, scroller);
110 evas_object_data_set(scroller, PRIVATE_DATA_KEY_CLEAR, clear_item);
112 evas_object_size_hint_weight_set(clear_item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
113 evas_object_show(clear_item);
121 extern void item_clear_all_destroy(Evas_Object *scroller)
125 Evas_Object *clear_item = NULL;
127 clear_item = evas_object_data_del(scroller, PRIVATE_DATA_KEY_CLEAR);
128 if (clear_item) evas_object_del(clear_item);
133 static Evas_Object *_content_set_item_inner(Evas_Object *item_outer)
135 Evas_Object *box = NULL;
136 Evas_Object *item_inner = NULL;
137 Evas_Object *next_item = NULL;
139 box = main_get_info()->box;
142 item_inner = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
143 retv_if(!item_inner, NULL);
145 next_item = evas_object_data_del(item_outer, PRIVATE_DATA_KEY_NEXT_ITEM);
147 elm_box_unpack(box, item_outer);
148 elm_object_part_content_set(item_outer, "inner", item_inner);
151 elm_box_pack_end(box, item_outer);
153 elm_box_pack_before(box, item_outer, next_item);
160 static Evas_Object *_content_unset_item_inner(Evas_Object *item_outer)
162 Evas_Object *box = NULL;
163 Evas_Object *item_inner = NULL;
164 Evas_Object *tmp_item = NULL;
165 Eina_List *list = NULL;
166 const Eina_List *l = NULL;
167 const Eina_List *ln = NULL;
170 box = main_get_info()->box;
173 item_inner = elm_object_part_content_unset(item_outer, "inner");
174 retv_if(!item_inner, NULL);
175 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING, item_inner);
177 list = elm_box_children_get(box);
178 retv_if(!list, NULL);
180 EINA_LIST_FOREACH_SAFE(list, l, ln, tmp_item) {
181 if (item_outer != tmp_item) continue;
182 Evas_Object *next_item = eina_list_data_get(ln);
183 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_NEXT_ITEM, next_item);
186 eina_list_free(list);
194 #define ANIM_RATE_SPARE ANIM_RATE - 1
195 static Eina_Bool _anim_move_item(void *data)
197 Evas_Object *scroller = NULL;
198 Evas_Object *item_inner = NULL;
199 Evas_Object *item_outer = NULL;
203 int end_pos, cur_pos;
207 goto_if(!data, ERROR);
209 scroller = main_get_info()->scroller;
210 goto_if(!scroller, ERROR);
212 item_inner = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
213 goto_if(!item_inner, ERROR);
215 evas_object_geometry_get(item_inner, &cur_x, &cur_y, NULL, NULL);
216 evas_object_geometry_get(item_outer, &end_x, &end_y, NULL, NULL);
219 vec_pos = (end_x - cur_x)/ANIM_RATE;
223 if ((end_pos - cur_pos) < 0) { // Move : Right -> Left
224 evas_object_move(item_inner, cur_x, cur_y);
225 int alp = 255 - ((cur_pos - end_pos) * PRIVATE_ITEM_ALPHA) - 1;
226 if (alp < PRIVATE_ITEM_ALPHA_MAX) alp = PRIVATE_ITEM_ALPHA_MAX;
227 evas_object_color_set(item_inner, alp, alp, alp, alp);
229 if (cur_pos - ANIM_RATE_SPARE <= end_pos) {
230 evas_object_move(item_inner, end_x, end_y);
231 goto_if (! _content_set_item_inner(item_outer), ERROR);
232 /* unfreeze the scroller after setting the content */
233 scroller_unfreeze(scroller);
234 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
235 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
236 return ECORE_CALLBACK_CANCEL;
239 else { // Move : Left -> Right
240 evas_object_move(item_inner, cur_x, cur_y);
241 int alp = 255 - ((end_pos - cur_pos) * PRIVATE_ITEM_ALPHA) - 1;
242 if (alp < PRIVATE_ITEM_ALPHA_MAX) alp = PRIVATE_ITEM_ALPHA_MAX;
243 evas_object_color_set(item_inner, alp, alp, alp, alp);
245 if (cur_pos + ANIM_RATE_SPARE >= end_pos) {
246 evas_object_move(item_inner, end_x, end_y);
247 goto_if (NULL == _content_set_item_inner(item_outer), ERROR);
248 /* unfreeze the scroller after setting the content */
249 scroller_unfreeze(scroller);
250 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
251 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
252 return ECORE_CALLBACK_CANCEL;
255 return ECORE_CALLBACK_RENEW;
259 scroller_unfreeze(scroller);
260 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
261 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
263 return ECORE_CALLBACK_CANCEL;
268 #define SLIPPED_LENGTH 40
269 static Eina_Bool _anim_slipped_item(void *data)
271 Evas_Object *scroller = NULL;
272 Evas_Object *item_outer = data;
274 int item_outer_w, item_outer_h;
276 goto_if(!item_outer, ERROR);
278 scroller = main_get_info()->scroller;
279 goto_if(!scroller, ERROR);
281 item_outer_w = (int)evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_W);
282 item_outer_h = (int)evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_H);
284 item_outer_h -= SLIPPED_LENGTH;
285 evas_object_size_hint_min_set(item_outer, item_outer_w, item_outer_h);
286 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_H, (void *)item_outer_h);
288 if (item_outer_h <= 0) {
289 scroller_pop_item(scroller, item_outer, 1);
291 if (scroller_count(scroller) < 2) {
292 item_clear_set_disable(scroller);
297 return ECORE_CALLBACK_RENEW;
301 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_W);
302 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_H);
303 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
305 return ECORE_CALLBACK_CANCEL;
310 #define TERMINATE_LENGTH 60
311 static Eina_Bool _anim_terminate_item(void *data)
313 Evas_Object *item_outer = data;
314 Evas_Object *item_inner = NULL;
316 int item_x, item_y, item_w, item_h, is_boundary = 0;
317 int outer_x, outer_y;
319 goto_if(!item_outer, ERROR);
321 item_inner = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
323 item_inner = elm_object_part_content_unset(item_outer, "inner");
324 retv_if(!item_inner, ECORE_CALLBACK_CANCEL);
325 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING, item_inner);
328 evas_object_geometry_get(item_inner, &item_x, &item_y, &item_w, &item_h);
329 evas_object_geometry_get(item_outer, &outer_x, &outer_y, NULL, NULL);
331 if (item_x >= outer_x) {
332 item_x += TERMINATE_LENGTH;
334 item_x -= TERMINATE_LENGTH;
337 if (item_x >= main_get_info()->root_w || (item_x + item_w) <= 0) {
341 evas_object_move(item_inner, item_x, item_y);
344 Evas_Object *scroller = NULL;
345 Ecore_Animator *anim = NULL;
347 scroller = main_get_info()->scroller;
348 goto_if(!scroller, ERROR);
350 /* unfreeze the scroller after setting the content */
351 scroller_unfreeze(scroller);
352 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
353 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
354 evas_object_color_set(item_inner, 255, 255, 255, 0);
355 elm_object_part_content_set(item_outer, "inner", item_inner);
357 anim = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
359 ecore_animator_del(anim);
361 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
363 anim = ecore_animator_add(_anim_slipped_item, item_outer);
364 goto_if(!anim, ERROR);
365 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING, anim);
366 return ECORE_CALLBACK_CANCEL;
368 return ECORE_CALLBACK_RENEW;
372 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
373 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
375 return ECORE_CALLBACK_CANCEL;
380 static void _down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
382 Evas_Event_Mouse_Down *ei = event_info;
383 Evas_Object *item_outer = data;
384 Evas_Object *item_inner = NULL;
386 int x = ei->output.x;
387 int y = ei->output.y;
388 int down_time = ei->timestamp;
389 int rect_x, rect_y, rect_w, rect_h;
393 _D("Down (%d, %d)", x, y);
395 item_inner = elm_object_part_content_get(item_outer, "inner");
397 item_inner = evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
399 elm_object_part_content_set(item_outer, "inner", item_inner);
402 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_PRESSED, (void *) 1);
403 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_DOWN_X, (void *) x);
404 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_DOWN_Y, (void *) y);
405 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_DOWN_TIME, (void *)down_time);
407 evas_object_geometry_get(item_outer, &rect_x, &rect_y, &rect_w, &rect_h);
408 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_X, (void *) rect_x);
409 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_Y, (void *) rect_y);
410 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_W, (void *) rect_w);
411 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_H, (void *) rect_h);
416 #define LAUNCHING_LENGTH 60
417 #define SCROLLER_THRESHOLD 15
418 static void _move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
420 Evas_Event_Mouse_Move *ei = event_info;
421 Evas_Object *item_outer = data;
423 Evas_Object *layout = NULL;
424 Evas_Object *item_inner = NULL;
425 Evas_Object *scroller = NULL;
426 Ecore_Animator *anim = NULL;
429 int outer_x, outer_y;
430 int cur_x, cur_y, vec_x, vec_y;
433 if (!item_outer) return;
434 if (!evas_object_data_get(item_outer, PRIVATE_DATA_KEY_PRESSED)) return;
436 scroller = main_get_info()->scroller;
438 if (scroller_is_scrolling(scroller)) {
439 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_SCROLLED, (void *)1);
440 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_PRESSED);
445 layout = main_get_info()->layout;
448 anim = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
451 down_x = (int) evas_object_data_get(item_outer, PRIVATE_DATA_KEY_DOWN_X);
452 down_y = (int) evas_object_data_get(item_outer, PRIVATE_DATA_KEY_DOWN_Y);
454 outer_x = (int)evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_X);
455 outer_y = (int)evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_Y);
457 cur_x = ei->cur.output.x;
458 cur_y = ei->cur.output.y;
460 vec_x = cur_x - down_x;
461 vec_y = cur_y - down_y;
465 if (!evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_MOVED)) {
466 if (abs(vec_y) > abs(vec_x) + SCROLLER_THRESHOLD) {
467 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_SCROLLED, (void *)1);
470 if (abs(vec_x) <= PRIVATE_MOVE_THRESHOLD) return;
471 if (abs(vec_y) >= SCROLLER_THRESHOLD) return;
474 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_MOVED, (void *) 1);
475 item_inner = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
477 /* freeze the scroller before unsetting the content */
478 scroller_freeze(scroller);
479 ret_if(!_content_unset_item_inner(item_outer));
482 alpha = 255 -(abs(vec_x) * PRIVATE_ITEM_ALPHA);
483 if (alpha < PRIVATE_ITEM_ALPHA_MAX) {
484 alpha = PRIVATE_ITEM_ALPHA_MAX;
487 evas_object_color_set(item_inner, alpha, alpha, alpha, alpha);
488 evas_object_move(item_inner, outer_x, outer_y);
493 static void _item_terminate_anim(Evas_Object *item_outer)
495 Ecore_Animator *anim = NULL;
497 anim = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
499 ecore_animator_del(anim);
501 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
504 anim = ecore_animator_add(_anim_terminate_item, item_outer);
506 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING, anim);
511 static void _up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
513 Evas_Event_Mouse_Up *ei = event_info;
514 Evas_Object *item_outer = data;
516 Evas_Object *scroller = NULL;
518 int x = ei->output.x;
519 int y = ei->output.y;
520 int up_time = ei->timestamp;
522 int init_pos, item_pos, item_size, tm_threshold;
524 _D("Up (%d, %d)", x, y);
526 ret_if (!item_outer);
528 scroller = main_get_info()->scroller;
531 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_PRESSED);
532 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_DOWN_Y);
533 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_DOWN_X);
534 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_MOVED);
535 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_SCROLLED);
537 down_time = (int) evas_object_data_del(item_outer, PRIVATE_DATA_KEY_DOWN_TIME);
539 /* This means the inner item has not been moved */
540 Evas_Object *item_inner = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_INNER_FOR_MOVING);
541 if (!item_inner) return;
543 init_pos = (int) evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_X);
544 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_Y);
545 evas_object_geometry_get(item_inner, &item_pos, NULL, &item_size, NULL);
546 tm_threshold = item_size * PRIVATE_ITEM_TERMINATE_THRESHOLD;
548 if (abs(item_pos - init_pos) > tm_threshold || (up_time - down_time < PRIVATE_FLICK_TIME && abs(item_pos - init_pos) > 0)) {
549 _item_terminate_anim(item_outer);
551 } else if (item_pos != init_pos) {
552 Ecore_Animator *anim = NULL;
553 anim = evas_object_data_get(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
555 ecore_animator_del(anim);
557 evas_object_data_del(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING);
560 anim = ecore_animator_add(_anim_move_item, item_outer);
561 ret_if(NULL == anim);
562 evas_object_data_set(item_outer, PRIVATE_DATA_KEY_ITEM_ANIM_FOR_MOVING, anim);
568 static void _clicked_cb(void *data, Evas_Object *obj, void *event_info)
573 Evas_Object *item = data;
574 Evas_Object *item_inner = NULL;
576 const char *appid = NULL;
578 list_type_default_s *info = NULL;
580 item_inner = elm_object_part_content_get(item, "inner");
581 if (!item_inner) return;
583 info = item_get_info(item);
589 util_launch_app(appid);
590 //layout_hide_with_timer();
595 extern Evas_Object *item_create(Evas_Object *scroller, list_type_default_s *info)
597 retv_if(NULL == scroller, NULL);
598 retv_if(NULL == info, NULL);
600 Evas_Object *focus = NULL;
601 Evas_Object *icon = NULL;
602 Evas_Object *item = NULL;
603 Evas_Object *item_inner = NULL;
605 item = elm_layout_add(scroller);
606 retv_if(NULL == item, NULL);
607 elm_layout_file_set(item, ITEM_LAYOUT, "item");
608 evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
609 evas_object_show(item);
611 item_inner = elm_layout_add(scroller);
612 goto_if(NULL == item_inner, ERROR);
613 elm_layout_file_set(item_inner, ITEM_LAYOUT, "item_inner");
614 evas_object_size_hint_weight_set(item_inner, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
615 evas_object_show(item_inner);
616 elm_object_part_content_set(item, "inner", item_inner);
617 evas_object_event_callback_add(item_inner, EVAS_CALLBACK_MOUSE_DOWN, _down_cb, item);
618 evas_object_event_callback_add(item_inner, EVAS_CALLBACK_MOUSE_MOVE, _move_cb, item);
619 evas_object_event_callback_add(item_inner, EVAS_CALLBACK_MOUSE_UP, _up_cb, item);
621 icon = evas_object_image_add(main_get_info()->e);
622 goto_if(NULL == icon, ERROR);
623 evas_object_image_file_set(icon, info->icon, NULL);
624 evas_object_image_filled_set(icon, EINA_TRUE);
625 evas_object_show(icon);
626 elm_object_part_content_set(item_inner, "icon", icon);
627 elm_object_part_text_set(item_inner, "name", info->name);
629 focus = elm_button_add(scroller);
630 goto_if(NULL == focus, ERROR);
631 elm_object_style_set(focus, "focus");
632 elm_object_part_content_set(item, "focus", focus);
633 evas_object_smart_callback_add(focus, "clicked", _clicked_cb, item);
635 evas_object_data_set(item, DATA_KEY_ITEM_INFO, info);
646 extern void item_destroy(Evas_Object *item)
650 Evas_Object *focus = NULL;
651 Evas_Object *icon = NULL;
652 Evas_Object *item_inner = NULL;
654 focus = elm_object_part_content_unset(item, "focus");
656 evas_object_del(focus);
659 item_inner = elm_object_part_content_unset(item, "inner");
661 _E("cannot get the object");
662 evas_object_del(item);
666 icon = elm_object_part_content_unset(item_inner, "icon");
668 evas_object_del(icon);
670 _E("cannot get the object");
673 evas_object_data_del(item, DATA_KEY_ITEM_INFO);
675 evas_object_del(item_inner);
676 evas_object_del(item);
681 extern void item_terminate(Evas_Object *item)
685 bool running = false;
688 ret_if(!item_get_info(item));
689 appid = item_get_info(item)->appid;
692 ret = app_manager_is_running(appid, &running);
693 ret_if(APP_MANAGER_ERROR_NONE != ret);
695 _D("Terminate: %s(%d)", appid, running);
697 util_kill_app(appid);
700 if (0 != rua_delete_history_with_pkgname(appid)) {
701 _E("Cannot delete history for package(%s)", appid);