1 #include "e_mod_move_shared_types.h"
2 #include "e_mod_move_debug.h"
3 #include "e_mod_move_atoms.h"
4 #include "e_mod_move.h"
6 struct _E_Move_Mini_Apptray_Animation_Data
15 Ecore_Animator *animator;
18 /* local subsystem functions */
19 static Eina_Bool _e_mod_move_mini_apptray_cb_motion_start(void *data, void *event_info);
20 static Eina_Bool _e_mod_move_mini_apptray_cb_motion_move(void *data, void *event_info);
21 static Eina_Bool _e_mod_move_mini_apptray_cb_motion_end(void *data, void *event_info);
22 static Eina_Bool _e_mod_move_mini_apptray_objs_position_set(E_Move_Border *mb, int x, int y);
23 static Eina_Bool _e_mod_move_mini_apptray_objs_position_get(E_Move_Border *mb, int *x, int *y);
24 static Eina_Bool _e_mod_move_mini_apptray_objs_animation_frame(void *data, double pos);
25 static Eina_Bool _e_mod_move_mini_apptray_flick_process(E_Move_Border *mb, int angle, Eina_Bool state);
26 static Eina_Bool _e_mod_move_mini_apptray_dim_objs_apply(E_Move_Border *mb, int x, int y);
27 static Eina_Bool _e_mod_move_mini_apptray_ctl_event_send_policy_check(E_Move_Border *mb, Evas_Point pos);
29 /* local subsystem functions */
31 _e_mod_move_mini_apptray_cb_motion_start(void *data,
34 E_Move_Border *mb = (E_Move_Border *)data;
35 E_Move_Event_Motion_Info *info;
36 E_Move_Control_Object *mco = NULL;
37 Evas_Event_Mouse_Down *mouse_down_event = NULL;
38 Eina_Bool clicked = EINA_FALSE;
42 info = (E_Move_Event_Motion_Info *)event_info;
43 if (!mb || !info) return EINA_FALSE;
45 mouse_down_event = info->event_info;
46 E_CHECK_RETURN(mouse_down_event, EINA_FALSE);
47 if (mouse_down_event->button != 1)
50 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
53 clicked = e_mod_move_event_click_get(mco->event);
59 "[MOVE] ev:%15.15s w:0x%08x %s()\n",
60 "EVAS_OBJ", mb->bd->win, __func__);
62 if (e_mod_move_mini_apptray_objs_animation_state_get(mb)) goto error_cleanup;
64 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
67 angle = e_mod_move_event_angle_get(mco->event);
71 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
74 e_mod_move_event_click_set(mco->event, EINA_TRUE);
77 E_CHECK_GOTO(mb->visible, error_cleanup);
78 if (!REGION_INSIDE_ZONE(mb, mb->bd->zone))
81 E_CHECK_GOTO(e_mod_move_flick_data_new(mb), error_cleanup);
82 e_mod_move_flick_data_init(mb, info->coord.x, info->coord.y);
84 e_mod_move_mini_apptray_objs_add(mb);
86 // send mini_apptray to "move start message".
87 e_mod_move_mini_apptray_anim_state_send(mb, EINA_TRUE);
91 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
94 e_mod_move_event_click_set(mco->event, EINA_FALSE);
100 _e_mod_move_mini_apptray_cb_motion_move(void *data,
103 E_Move_Border *mb = (E_Move_Border *)data;
104 E_Move_Event_Motion_Info *info;
105 E_Move_Control_Object *mco = NULL;
108 Eina_Bool click = EINA_FALSE;
112 Eina_Bool contents_region = EINA_FALSE;
114 info = (E_Move_Event_Motion_Info *)event_info;
115 if (!mb || !info) return EINA_FALSE;
118 "[MOVE] ev:%15.15s w:0x%08x ,angle:%d, (%d,%d) %s()\n",
119 "EVAS_OBJ", mb->bd->win, mb->angle, info->coord.x, info->coord.y,
125 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
128 click = e_mod_move_event_click_get(mco->event);
130 E_CHECK_RETURN(click, EINA_FALSE);
132 if (_e_mod_move_mini_apptray_ctl_event_send_policy_check(mb, info->coord))
134 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
137 e_mod_move_event_propagate_type_set(mco->event, E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY);
142 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
145 e_mod_move_event_propagate_type_set(mco->event, E_MOVE_EVENT_PROPAGATE_TYPE_NONE);
149 contents_region = e_mod_move_border_contents_rect_get(mb, &cx, &cy ,&cw, &ch);
154 if (info->coord.y > (zone->h - mb->h))
158 if (info->coord.y > cy) y = info->coord.y - cy;
167 if (info->coord.x > (zone->w - mb->w))
171 if (info->coord.x > cx) x = info->coord.x - cx;
180 if (info->coord.y < mb->h)
184 if (info->coord.y < ch) y = info->coord.y - ch;
188 y = info->coord.y - mb->h;
193 if (info->coord.x < mb->w)
197 if (info->coord.x < cw) x = info->coord.x - cw;
201 x = info->coord.x - mb->w;
209 e_mod_move_mini_apptray_objs_move(mb, x, y);
215 _e_mod_move_mini_apptray_cb_motion_end(void *data,
218 E_Move_Border *mb = (E_Move_Border *)data;
219 E_Move_Event_Motion_Info *info;
220 E_Move_Control_Object *mco = NULL;
224 Eina_Bool click = EINA_FALSE;
225 Eina_Bool flick_state = EINA_FALSE;
226 Evas_Event_Mouse_Up *mouse_up_event;
227 int check_w, check_h;
229 info = (E_Move_Event_Motion_Info *)event_info;
230 if (!mb || !info) return EINA_FALSE;
232 mouse_up_event = info->event_info;
233 E_CHECK_RETURN(mouse_up_event, EINA_FALSE);
234 if (mouse_up_event->button != 1)
238 "[MOVE] ev:%15.15s w:0x%08x ,angle:%d, (%d,%d) %s()\n",
239 "EVAS_OBJ", mb->bd->win, mb->angle, info->coord.x, info->coord.y,
245 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
248 click = e_mod_move_event_click_get(mco->event);
250 E_CHECK_GOTO(click, finish);
252 // event send all set
253 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
256 e_mod_move_event_propagate_type_set(mco->event, E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY);
259 e_mod_move_flick_data_update(mb, info->coord.x, info->coord.y);
260 flick_state = e_mod_move_flick_state_get(mb, EINA_FALSE);
261 if (_e_mod_move_mini_apptray_flick_process(mb, angle, flick_state))
270 if (check_h) check_h /= 2;
271 if (info->coord.y > (zone->h - check_h))
273 e_mod_move_mini_apptray_e_border_move(mb, 0, zone->h);
274 e_mod_move_mini_apptray_objs_animation_move(mb, 0, zone->h);
278 e_mod_move_mini_apptray_objs_animation_move(mb, 0, (zone->h - mb->h));
283 if (check_w) check_w /= 2;
284 if (info->coord.x > (zone->w - check_w))
286 e_mod_move_mini_apptray_e_border_move(mb, zone->w, 0);
287 e_mod_move_mini_apptray_objs_animation_move(mb, zone->w, 0);
291 e_mod_move_mini_apptray_objs_animation_move(mb, zone->w - mb->w, 0);
295 check_h = mb->y + mb->h;
296 if (check_h) check_h /= 2;
297 if (info->coord.y < check_h)
299 e_mod_move_mini_apptray_e_border_move(mb, 0, mb->h * -1);
300 e_mod_move_mini_apptray_objs_animation_move(mb, 0, mb->h * -1);
304 e_mod_move_mini_apptray_objs_animation_move(mb, 0, 0);
309 if (check_w) check_w /= 2;
310 if (info->coord.x < check_w)
312 e_mod_move_mini_apptray_e_border_move(mb, mb->w * -1, 0);
313 e_mod_move_mini_apptray_objs_animation_move(mb, mb->w * -1, 0);
317 e_mod_move_mini_apptray_objs_animation_move(mb, 0, 0);
324 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
327 e_mod_move_event_click_set(mco->event, EINA_FALSE);
331 if (mb->flick_data) e_mod_move_flick_data_free(mb);
336 _e_mod_move_mini_apptray_objs_position_set(E_Move_Border *mb,
340 E_Move_Mini_Apptray_Data *mini_apptray_data = NULL;
341 mini_apptray_data = (E_Move_Mini_Apptray_Data *)mb->data;
342 if (!mini_apptray_data)
343 mini_apptray_data = (E_Move_Mini_Apptray_Data *)e_mod_move_mini_apptray_internal_data_add(mb);
344 E_CHECK_RETURN(mini_apptray_data, EINA_FALSE);
346 mini_apptray_data->x = x;
347 mini_apptray_data->y = y;
348 mb->data = mini_apptray_data;
353 _e_mod_move_mini_apptray_objs_position_get(E_Move_Border *mb,
357 E_Move_Mini_Apptray_Data *mini_apptray_data = NULL;
358 mini_apptray_data = (E_Move_Mini_Apptray_Data *)mb->data;
359 E_CHECK_RETURN(mini_apptray_data, EINA_FALSE);
361 *x = mini_apptray_data->x;
362 *y = mini_apptray_data->y;
368 _e_mod_move_mini_apptray_objs_animation_frame(void *data,
371 E_Move_Mini_Apptray_Animation_Data *anim_data = NULL;
372 E_Move_Border *mb = NULL;
376 anim_data = (E_Move_Mini_Apptray_Animation_Data *)data;
377 E_CHECK_RETURN(anim_data, EINA_FALSE);
379 mb = e_mod_move_mini_apptray_find();
380 E_CHECK_RETURN(mb, EINA_FALSE);
382 frame = ecore_animator_pos_map(pos, ECORE_POS_MAP_ACCELERATE, 0.0, 0.0);
383 x = anim_data->sx + anim_data->dx * frame;
384 y = anim_data->sy + anim_data->dy * frame;
386 e_mod_move_mini_apptray_objs_move(mb, x, y);
390 if (!(REGION_INSIDE_ZONE(mb, mb->bd->zone)))
392 e_border_focus_set(mb->bd, 0, 0);
393 e_mod_move_mini_apptray_dim_hide(mb);
396 // send mini_apptray to "move end message".
397 e_mod_move_mini_apptray_anim_state_send(mb, EINA_FALSE);
399 e_mod_move_mini_apptray_objs_del(mb);
401 memset(anim_data, 0, sizeof(E_Move_Mini_Apptray_Animation_Data));
403 mb->anim_data = NULL;
409 _e_mod_move_mini_apptray_flick_process(E_Move_Border *mb,
413 E_Move_Control_Object *mco = NULL;
418 E_CHECK_RETURN(mb, EINA_FALSE);
419 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
420 E_CHECK_RETURN(state, EINA_FALSE);
424 /* mini_apptray click unset */
425 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
428 e_mod_move_event_click_set(mco->event, EINA_FALSE);
431 e_mod_move_flick_data_free(mb);
435 case 90: x = zone->w; y = 0; break;
436 case 180: x = 0; y = mb->h * -1; break;
437 case 270: x = mb->w * -1; y = 0; break;
439 default : x = 0; y = zone->h; break;
442 e_mod_move_mini_apptray_e_border_move(mb, x, y);
443 e_mod_move_mini_apptray_objs_animation_move(mb, x, y);
449 _e_mod_move_mini_apptray_dim_objs_apply(E_Move_Border *mb,
458 E_Move_Mini_Apptray_Data *mini_apptray_data = NULL;
460 E_CHECK_RETURN(mb, EINA_FALSE);
461 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
462 E_CHECK_RETURN(mb->data, EINA_FALSE);
464 mini_apptray_data = (E_Move_Mini_Apptray_Data *)mb->data;
465 E_CHECK_RETURN(mini_apptray_data->dim_objs, EINA_FALSE);
469 dim_max = mb->m->dim_max_opacity;
476 opacity = dim_max * mx / mb->w;
483 opacity = dim_max * my / mb->h;
490 opacity = dim_max * mx / mb->w;
498 opacity = dim_max * my / mb->h;
504 e_mod_move_bd_move_dim_objs_opacity_set(mini_apptray_data->dim_objs, opacity);
505 mini_apptray_data->opacity = opacity;
510 _e_mod_move_mini_apptray_ctl_event_send_policy_check(E_Move_Border *mb,
513 int x = 0, y = 0, w = 0, h = 0;
514 Eina_Bool ret = EINA_FALSE;
516 E_CHECK_RETURN(mb, EINA_FALSE);
517 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
519 e_mod_move_bd_move_ctl_objs_geometry_get(mb, &x ,&y, &w, &h);
521 if (E_INSIDE(pos.x, pos.y, x, y, w, h)) ret = EINA_TRUE;
526 /* externally accessible functions */
528 e_mod_move_mini_apptray_ctl_obj_event_setup(E_Move_Border *mb,
529 E_Move_Control_Object *mco)
533 E_CHECK(TYPE_MINI_APPTRAY_CHECK(mb));
535 mco->event = e_mod_move_event_new(mb->bd->client.win, mco->obj);
538 e_mod_move_event_data_type_set(mco->event, E_MOVE_EVENT_DATA_TYPE_BORDER);
539 e_mod_move_event_angle_cb_set(mco->event,
540 e_mod_move_util_win_prop_angle_get);
541 e_mod_move_event_cb_set(mco->event, E_MOVE_EVENT_TYPE_MOTION_START,
542 _e_mod_move_mini_apptray_cb_motion_start, mb);
543 e_mod_move_event_cb_set(mco->event, E_MOVE_EVENT_TYPE_MOTION_MOVE,
544 _e_mod_move_mini_apptray_cb_motion_move, mb);
545 e_mod_move_event_cb_set(mco->event, E_MOVE_EVENT_TYPE_MOTION_END,
546 _e_mod_move_mini_apptray_cb_motion_end, mb);
547 e_mod_move_event_propagate_type_set(mco->event,
548 E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY);
551 EINTERN E_Move_Border *
552 e_mod_move_mini_apptray_find(void)
557 m = e_mod_move_util_get();
558 E_CHECK_RETURN(m, 0);
560 EINA_INLIST_REVERSE_FOREACH(m->borders, mb)
562 if (TYPE_MINI_APPTRAY_CHECK(mb)) return mb;
568 e_mod_move_mini_apptray_click_get(void)
570 E_Move_Border *mb = NULL;
571 Eina_Bool click = EINA_FALSE;
572 E_Move_Control_Object *mco = NULL;
575 mb = e_mod_move_mini_apptray_find();
576 E_CHECK_RETURN(mb, EINA_FALSE);
578 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
581 click = e_mod_move_event_click_get(mco->event);
588 e_mod_move_mini_apptray_event_clear(void)
590 E_Move_Border *mb = NULL;
591 Eina_Bool click = EINA_FALSE;
592 E_Move_Control_Object *mco = NULL;
595 mb = e_mod_move_mini_apptray_find();
596 E_CHECK_RETURN(mb, EINA_FALSE);
598 click = e_mod_move_mini_apptray_click_get();
599 E_CHECK_RETURN(click, EINA_FALSE);
601 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
604 e_mod_move_event_data_clear(mco->event);
605 e_mod_move_event_click_set(mco->event, EINA_FALSE);
608 if (mb->flick_data) e_mod_move_flick_data_free(mb);
614 e_mod_move_mini_apptray_objs_add(E_Move_Border *mb)
616 Eina_Bool mirror = EINA_TRUE;
617 Evas_Object *ly = NULL;
618 E_CHECK_RETURN(mb, EINA_FALSE);
619 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
621 ly = e_mod_move_util_comp_layer_get(mb->m, "move");
622 E_CHECK_RETURN(ly, EINA_FALSE);
626 // Composite mode set true
627 e_mod_move_util_compositor_composite_mode_set(mb->m, EINA_TRUE);
628 mb->objs = e_mod_move_bd_move_objs_add(mb, mirror);
629 e_mod_move_bd_move_objs_move(mb, mb->x, mb->y);
630 e_mod_move_bd_move_objs_resize(mb, mb->w, mb->h);
631 e_mod_move_bd_move_objs_show(mb);
632 e_mod_move_util_screen_input_block(mb->m);
634 if (!evas_object_visible_get(ly))
635 evas_object_show(ly);
637 if (mb->objs) e_mod_move_util_rotation_lock(mb->m);
643 e_mod_move_mini_apptray_objs_add_with_pos(E_Move_Border *mb,
647 Eina_Bool mirror = EINA_TRUE;
648 E_CHECK_RETURN(mb, EINA_FALSE);
649 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
653 mb->objs = e_mod_move_bd_move_objs_add(mb, mirror);
654 e_mod_move_bd_move_objs_move(mb, x, y);
655 e_mod_move_bd_move_objs_resize(mb, mb->w, mb->h);
656 e_mod_move_bd_move_objs_show(mb);
657 if (mb->objs) e_mod_move_util_rotation_lock(mb->m);
663 e_mod_move_mini_apptray_objs_del(E_Move_Border *mb)
665 E_Move_Border *qp_mb = NULL;
666 Evas_Object *ly = NULL;
667 E_CHECK_RETURN(mb, EINA_FALSE);
668 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
669 ly = e_mod_move_util_comp_layer_get(mb->m, "move");
670 E_CHECK_RETURN(ly, EINA_FALSE);
671 if (evas_object_visible_get(ly))
673 qp_mb = e_mod_move_quickpanel_find();
674 if (!e_mod_move_quickpanel_objs_animation_state_get(qp_mb))
675 evas_object_hide(ly);
677 e_mod_move_bd_move_objs_del(mb, mb->objs);
678 e_mod_move_util_rotation_unlock(mb->m);
679 // Composite mode set False
680 e_mod_move_util_compositor_composite_mode_set(mb->m, EINA_FALSE);
681 e_mod_move_util_screen_input_unblock(mb->m);
687 e_mod_move_mini_apptray_objs_move(E_Move_Border *mb,
691 E_CHECK_RETURN(mb, EINA_FALSE);
692 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
694 e_mod_move_bd_move_objs_move(mb, x, y);
695 _e_mod_move_mini_apptray_objs_position_set(mb, x, y);
696 _e_mod_move_mini_apptray_dim_objs_apply(mb, x, y);
701 e_mod_move_mini_apptray_objs_raise(E_Move_Border *mb)
703 E_CHECK_RETURN(mb, EINA_FALSE);
704 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
705 e_mod_move_bd_move_objs_raise(mb);
710 e_mod_move_mini_apptray_objs_animation_move(E_Move_Border *mb,
714 E_Move_Mini_Apptray_Animation_Data *anim_data = NULL;
715 Ecore_Animator *animator = NULL;
716 int sx, sy; //start x, start y
717 double anim_time = 0.0;
719 E_CHECK_RETURN(mb, EINA_FALSE);
720 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
721 E_CHECK_RETURN(mb->m, EINA_FALSE);
722 anim_time = mb->m->animation_duration;
724 if (e_mod_move_mini_apptray_objs_animation_state_get(mb))
726 e_mod_move_mini_apptray_objs_animation_stop(mb);
727 e_mod_move_mini_apptray_objs_animation_clear(mb);
730 anim_data = E_NEW(E_Move_Mini_Apptray_Animation_Data, 1);
731 E_CHECK_RETURN(anim_data, EINA_FALSE);
733 if (_e_mod_move_mini_apptray_objs_position_get(mb, &sx, &sy))
740 anim_data->sx = mb->x;
741 anim_data->sy = mb->y;
742 _e_mod_move_mini_apptray_objs_position_set(mb,
749 anim_data->dx = anim_data->ex - anim_data->sx;
750 anim_data->dy = anim_data->ey - anim_data->sy;
751 animator = ecore_animator_timeline_add(anim_time,
752 _e_mod_move_mini_apptray_objs_animation_frame,
756 memset(anim_data, 0, sizeof(E_Move_Mini_Apptray_Animation_Data));
761 anim_data->animator = animator;
762 anim_data->animating = EINA_TRUE;
763 mb->anim_data = anim_data;
768 e_mod_move_mini_apptray_objs_animation_state_get(E_Move_Border *mb)
770 E_Move_Mini_Apptray_Animation_Data *anim_data = NULL;
771 E_CHECK_RETURN(mb, EINA_FALSE);
772 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
774 E_CHECK_RETURN(mb->anim_data, EINA_FALSE);
775 anim_data = (E_Move_Mini_Apptray_Animation_Data *)mb->anim_data;
776 E_CHECK_RETURN(anim_data->animating, EINA_FALSE);
781 e_mod_move_mini_apptray_objs_animation_stop(E_Move_Border *mb)
783 E_Move_Mini_Apptray_Animation_Data *anim_data = NULL;
784 E_CHECK_RETURN(mb, EINA_FALSE);
785 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
787 E_CHECK_RETURN(mb->anim_data, EINA_FALSE);
788 anim_data = (E_Move_Mini_Apptray_Animation_Data *)mb->anim_data;
789 ecore_animator_freeze(anim_data->animator);
794 e_mod_move_mini_apptray_objs_animation_clear(E_Move_Border *mb)
796 E_Move_Mini_Apptray_Animation_Data *anim_data = NULL;
797 E_CHECK_RETURN(mb, EINA_FALSE);
798 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
800 E_CHECK_RETURN(mb->anim_data, EINA_FALSE);
801 anim_data = (E_Move_Mini_Apptray_Animation_Data *)mb->anim_data;
802 ecore_animator_del(anim_data->animator);
803 memset(anim_data, 0, sizeof(E_Move_Mini_Apptray_Animation_Data));
805 mb->anim_data = NULL;
811 e_mod_move_mini_apptray_internal_data_add(E_Move_Border *mb)
813 E_Move_Mini_Apptray_Data *mini_apptray_data = NULL;
815 E_CHECK_RETURN(mb, NULL);
816 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), NULL);
817 E_CHECK_RETURN(mb->m, NULL);
818 mini_apptray_data = (E_Move_Mini_Apptray_Data *)mb->data;
819 dim_min = mb->m->dim_min_opacity;
820 if (!mini_apptray_data)
822 mini_apptray_data = E_NEW(E_Move_Mini_Apptray_Data, 1);
823 E_CHECK_RETURN(mini_apptray_data, NULL);
824 mini_apptray_data->x = mb->x;
825 mini_apptray_data->y = mb->y;
826 mini_apptray_data->dim_objs = NULL;
827 mini_apptray_data->opacity = dim_min;
828 mb->data = mini_apptray_data;
834 e_mod_move_mini_apptray_internal_data_del(E_Move_Border *mb)
836 E_Move_Mini_Apptray_Data *mini_apptray_data = NULL;
837 E_CHECK_RETURN(mb, EINA_FALSE);
838 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
839 E_CHECK_RETURN(mb->data, EINA_FALSE);
840 mini_apptray_data = (E_Move_Mini_Apptray_Data *)mb->data;
841 e_mod_move_mini_apptray_dim_hide(mb);
842 E_FREE(mini_apptray_data);
844 e_mod_move_mini_apptray_widget_apply();// disable/destory mini_apptray_widget related datas
849 e_mod_move_mini_apptray_e_border_move(E_Move_Border *mb,
855 E_CHECK_RETURN(mb, EINA_FALSE);
856 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
857 E_CHECK_RETURN(mb->bd, EINA_FALSE);
861 /* check whether zone contains border */
862 if (E_CONTAINS(zone->x, zone->y,
866 e_border_focus_set(mb->bd, 1, 1);
870 e_border_focus_set(mb->bd, 0, 0);
873 ELBF(ELBT_MOVE, 0, mb->bd->win,
874 "MINI APP_TRAY MOVE w:0x%08x c:0x%08x [%d,%d]",
875 mb->bd->win, mb->bd->client.win, x, y);
876 e_border_move(mb->bd, x, y);
882 e_mod_move_mini_apptray_e_border_raise(E_Move_Border *mb)
884 E_CHECK_RETURN(mb, EINA_FALSE);
885 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
887 e_border_raise(mb->bd);
893 e_mod_move_mini_apptray_e_border_lower(E_Move_Border *mb)
895 E_CHECK_RETURN(mb, EINA_FALSE);
896 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
898 e_border_lower(mb->bd);
904 e_mod_move_mini_apptray_dim_show(E_Move_Border *mb)
907 E_Move_Mini_Apptray_Data *mini_apptray_data = NULL;
908 E_CHECK_RETURN(mb, NULL);
909 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), NULL);
910 E_CHECK_RETURN(mb->m, NULL);
911 mini_apptray_data = (E_Move_Mini_Apptray_Data *)mb->data;
912 dim_min = mb->m->dim_min_opacity;
913 if (!mini_apptray_data)
915 mini_apptray_data = E_NEW(E_Move_Mini_Apptray_Data, 1);
916 E_CHECK_RETURN(mini_apptray_data, NULL);
918 mini_apptray_data->x = mb->x;
919 mini_apptray_data->y = mb->y;
920 mini_apptray_data->dim_objs = e_mod_move_bd_move_dim_objs_add(mb);
921 e_mod_move_bd_move_dim_objs_show(mini_apptray_data->dim_objs);
922 mini_apptray_data->opacity = dim_min;
923 mb->data = mini_apptray_data;
927 if (!(mini_apptray_data->dim_objs))
929 mini_apptray_data->dim_objs = e_mod_move_bd_move_dim_objs_add(mb);
931 if (mini_apptray_data->dim_objs)
933 e_mod_move_bd_move_dim_objs_show(mini_apptray_data->dim_objs);
934 mini_apptray_data->opacity = dim_min;
939 "[MOVE] ev:%15.15s w:0x%08x %s()\n",
940 "EVAS_OBJ", mb->bd->win, __func__);
942 return mini_apptray_data->dim_objs;
946 e_mod_move_mini_apptray_dim_hide(E_Move_Border *mb)
949 E_Move_Mini_Apptray_Data *mini_apptray_data = NULL;
950 E_CHECK_RETURN(mb, EINA_FALSE);
951 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
952 E_CHECK_RETURN(mb->m, EINA_FALSE);
953 E_CHECK_RETURN(mb->data, EINA_FALSE);
954 mini_apptray_data = (E_Move_Mini_Apptray_Data *)mb->data;
955 dim_min = mb->m->dim_min_opacity;
956 E_CHECK_RETURN(mini_apptray_data->dim_objs, EINA_FALSE);
957 e_mod_move_bd_move_dim_objs_hide(mini_apptray_data->dim_objs);
958 e_mod_move_bd_move_dim_objs_del(mini_apptray_data->dim_objs);
959 mini_apptray_data->dim_objs = NULL;
960 mini_apptray_data->opacity = dim_min;
963 "[MOVE] ev:%15.15s w:0x%08x %s()\n",
964 "EVAS_OBJ", ((mb->bd) ? mb->bd->win : NULL), __func__);
970 e_mod_move_mini_apptray_objs_animation_start_position_set(E_Move_Border *mb,
976 Eina_Bool contents_region = EINA_FALSE;
978 E_CHECK_RETURN(mb, EINA_FALSE);
979 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
981 angle = ((angle % 360) / 90) * 90;
983 contents_region = e_mod_move_border_contents_rect_get(mb, &cx, &cy ,&cw, &ch);
986 // todo flick-up position
990 if (contents_region) { x = zone->x + zone->w - cx; y = 0; }
991 else { x = zone->x + zone->w; y = 0; }
994 if (contents_region) { x = 0; y = mb->h * -1 + (mb->h - ch); }
995 else { x = 0; y = mb->h * -1; }
998 if (contents_region) { x = mb->w * -1 + (mb->w - cw); y = 0; }
999 else { x = mb->w * -1; y = 0; }
1003 if (contents_region) { x = 0; y = zone->y + zone->h - cy; }
1004 else { x = 0; y = zone->y + zone->h; }
1008 _e_mod_move_mini_apptray_objs_position_set(mb, x, y);
1013 EINTERN E_Move_Event_Cb
1014 e_mod_move_mini_apptray_event_cb_get(E_Move_Event_Type type)
1016 if (type == E_MOVE_EVENT_TYPE_MOTION_START)
1017 return _e_mod_move_mini_apptray_cb_motion_start;
1018 else if (type == E_MOVE_EVENT_TYPE_MOTION_MOVE)
1019 return _e_mod_move_mini_apptray_cb_motion_move;
1020 else if (type == E_MOVE_EVENT_TYPE_MOTION_END)
1021 return _e_mod_move_mini_apptray_cb_motion_end;
1027 e_mod_move_mini_apptray_anim_state_send(E_Move_Border *mb,
1030 long d[5] = {0L, 0L, 0L, 0L, 0L};
1032 E_CHECK_RETURN(mb, EINA_FALSE);
1033 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
1035 win = e_mod_move_util_client_xid_get(mb);
1036 E_CHECK_RETURN(win, 0);
1038 if (state) d[0] = 1L;
1041 ecore_x_client_message32_send
1042 (win, ATOM_MV_MINI_APPTRAY_STATE,
1043 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1044 d[0], d[1], d[2], d[3], d[4]);
1050 e_mod_move_mini_apptray_objs_animation_layer_set(E_Move_Border *mb)
1052 E_Move *m = e_mod_move_util_get();
1053 E_Move_Border *find_mb = NULL;
1054 E_Move_Border *state_above_mb = NULL;
1056 Eina_Bool found = EINA_FALSE;
1057 E_Move_Mini_Apptray_Data *mini_apptray_data = NULL;
1059 E_CHECK_RETURN(m, EINA_FALSE);
1060 E_CHECK_RETURN(mb, EINA_FALSE);
1061 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
1063 mini_apptray_data = (E_Move_Mini_Apptray_Data *)mb->data;
1064 E_CHECK_RETURN(mini_apptray_data, EINA_FALSE);
1066 mini_apptray_data->animation_layer_info.state_above.layer_set = EINA_FALSE;
1067 mini_apptray_data->animation_layer_info.state_above.win = 0;
1069 EINA_INLIST_REVERSE_FOREACH(m->borders, find_mb)
1072 && (find_mb->bd->layer == e_mod_move_util_layer_policy_get(E_MOVE_STATE_ABOVE_LAYER))
1073 && (find_mb->visible))
1075 win = find_mb->bd->client.win;
1080 && (find_mb->bd->layer < e_mod_move_util_layer_policy_get(E_MOVE_STATE_ABOVE_LAYER)))
1088 mini_apptray_data->animation_layer_info.state_above.layer_set = EINA_TRUE;
1089 mini_apptray_data->animation_layer_info.state_above.win = win;
1090 state_above_mb = e_mod_move_border_client_find(win);
1092 && !(state_above_mb->objs))
1094 state_above_mb->objs = e_mod_move_bd_move_objs_add(state_above_mb, EINA_TRUE);
1095 e_mod_move_bd_move_objs_move(state_above_mb, state_above_mb->x, state_above_mb->y);
1096 e_mod_move_bd_move_objs_resize(state_above_mb, state_above_mb->w, state_above_mb->h);
1097 e_mod_move_bd_move_objs_show(state_above_mb);
1100 // mini_apptray mirror object stack below to state_above object .
1101 e_mod_move_bd_move_objs_stack_below(mb, state_above_mb); // mb : mini_apptray move border
1105 e_mod_move_mini_apptray_objs_raise(mb);
1112 e_mod_move_mini_apptray_objs_animation_layer_unset(E_Move_Border *mb)
1114 E_Move_Border *state_above_mb = NULL;
1115 E_Move_Mini_Apptray_Data *mini_apptray_data = NULL;
1118 E_CHECK_RETURN(mb, EINA_FALSE);
1119 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
1121 mini_apptray_data = (E_Move_Mini_Apptray_Data *)mb->data;
1122 E_CHECK_RETURN(mini_apptray_data, EINA_FALSE);
1124 if (mini_apptray_data->animation_layer_info.state_above.layer_set)
1126 win = mini_apptray_data->animation_layer_info.state_above.win;
1127 if ((state_above_mb = e_mod_move_border_client_find(win))
1128 && (!state_above_mb->animate_move))
1130 e_mod_move_bd_move_objs_del(state_above_mb, state_above_mb->objs);
1131 state_above_mb->objs = NULL;
1135 mini_apptray_data->animation_layer_info.state_above.layer_set = EINA_FALSE;
1136 mini_apptray_data->animation_layer_info.state_above.win = 0;