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_Apptray_Animation_Data
15 Ecore_Animator *animator;
18 /* local subsystem functions */
19 static Eina_Bool _e_mod_move_apptray_cb_motion_start(void *data, void *event_info);
20 static Eina_Bool _e_mod_move_apptray_cb_motion_move(void *data, void *event_info);
21 static Eina_Bool _e_mod_move_apptray_cb_motion_end(void *data, void *event_info);
22 static Eina_Bool _e_mod_move_apptray_objs_position_set(E_Move_Border *mb, int x, int y);
23 static Eina_Bool _e_mod_move_apptray_objs_position_get(E_Move_Border *mb, int *x, int *y);
24 static Eina_Bool _e_mod_move_apptray_objs_animation_frame(void *data, double pos);
25 static Eina_Bool _e_mod_move_apptray_flick_process(E_Move_Border *mb, int angle, Eina_Bool state);
26 static Eina_Bool _e_mod_move_apptray_dim_objs_apply(E_Move_Border *mb, int x, int y);
27 static Eina_Bool _e_mod_move_apptray_cb_bg_touch_dn(void *data, int type __UNUSED__, void *event);
28 static Eina_Bool _e_mod_move_apptray_cb_bg_touch_up(void *data, int type __UNUSED__, void *event);
29 static void _e_mod_move_apptray_bg_touch_win_show(E_Move_Border *mb);
30 static void _e_mod_move_apptray_bg_touch_win_hide(E_Move_Border *mb);
31 static Ecore_X_Window _e_mod_move_apptray_bg_touch_win_get(E_Move_Border *mb);
33 /* local subsystem functions */
35 _e_mod_move_apptray_cb_motion_start(void *data,
38 E_Move_Border *mb = (E_Move_Border *)data;
39 E_Move_Event_Motion_Info *info;
40 E_Move_Control_Object *mco = NULL;
41 Evas_Event_Mouse_Down *mouse_down_event = NULL;
42 Eina_Bool clicked = EINA_FALSE;
46 info = (E_Move_Event_Motion_Info *)event_info;
47 if (!mb || !info) return EINA_FALSE;
49 mouse_down_event = info->event_info;
50 E_CHECK_RETURN(mouse_down_event, EINA_FALSE);
51 if (mouse_down_event->button != 1)
54 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
57 clicked = e_mod_move_event_click_get(mco->event);
63 "[MOVE] ev:%15.15s w:0x%08x %s()\n",
64 "EVAS_OBJ", mb->bd->win, __func__);
66 if (e_mod_move_apptray_objs_animation_state_get(mb)) goto error_cleanup;
68 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
71 angle = e_mod_move_event_angle_get(mco->event);
75 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
78 e_mod_move_event_click_set(mco->event, EINA_TRUE);
81 E_CHECK_GOTO(mb->visible, error_cleanup);
82 if (!REGION_INSIDE_ZONE(mb, mb->bd->zone))
85 E_CHECK_GOTO(e_mod_move_flick_data_new(mb), error_cleanup);
86 e_mod_move_flick_data_init(mb, info->coord.x, info->coord.y);
88 e_mod_move_apptray_objs_add(mb);
90 // apptray_objs_animation_layer_set
91 e_mod_move_apptray_objs_animation_layer_set(mb);
93 // send apptray to "move start message".
94 e_mod_move_apptray_anim_state_send(mb, EINA_TRUE);
98 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
101 e_mod_move_event_click_set(mco->event, EINA_FALSE);
107 _e_mod_move_apptray_cb_motion_move(void *data,
110 E_Move_Border *mb = (E_Move_Border *)data;
111 E_Move_Event_Motion_Info *info;
112 E_Move_Control_Object *mco = NULL;
115 Eina_Bool click = EINA_FALSE;
118 info = (E_Move_Event_Motion_Info *)event_info;
119 if (!mb || !info) return EINA_FALSE;
122 "[MOVE] ev:%15.15s w:0x%08x ,angle:%d, (%d,%d) %s()\n",
123 "EVAS_OBJ", mb->bd->win, mb->angle, info->coord.x, info->coord.y,
129 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
132 click = e_mod_move_event_click_get(mco->event);
134 E_CHECK_RETURN(click, EINA_FALSE);
139 if (info->coord.y < mb->h)
140 e_mod_move_apptray_objs_move(mb, 0, info->coord.y - mb->h);
143 if (info->coord.x < mb->w)
144 e_mod_move_apptray_objs_move(mb, info->coord.x - mb->w, 0);
147 if (info->coord.y > (zone->h - mb->h))
148 e_mod_move_apptray_objs_move(mb, 0, info->coord.y);
151 if (info->coord.x > (zone->w - mb->w))
152 e_mod_move_apptray_objs_move(mb, info->coord.x, 0);
162 _e_mod_move_apptray_cb_motion_end(void *data,
165 E_Move_Border *mb = (E_Move_Border *)data;
166 E_Move_Event_Motion_Info *info;
167 E_Move_Control_Object *mco = NULL;
171 Eina_Bool click = EINA_FALSE;
172 Eina_Bool flick_state = EINA_FALSE;
173 Evas_Event_Mouse_Up *mouse_up_event;
174 int check_w, check_h;
176 info = (E_Move_Event_Motion_Info *)event_info;
177 if (!mb || !info) return EINA_FALSE;
179 mouse_up_event = info->event_info;
180 E_CHECK_RETURN(mouse_up_event, EINA_FALSE);
181 if (mouse_up_event->button != 1)
185 "[MOVE] ev:%15.15s w:0x%08x ,angle:%d, (%d,%d) %s()\n",
186 "EVAS_OBJ", mb->bd->win, mb->angle, info->coord.x, info->coord.y,
192 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
195 click = e_mod_move_event_click_get(mco->event);
197 E_CHECK_GOTO(click, finish);
199 e_mod_move_flick_data_update(mb, info->coord.x, info->coord.y);
200 flick_state = e_mod_move_flick_state_get(mb, EINA_FALSE);
201 if (_e_mod_move_apptray_flick_process(mb, angle, flick_state))
209 check_h = mb->y + mb->h;
210 if (check_h) check_h /= 2;
211 if (info->coord.y < check_h)
213 e_mod_move_apptray_e_border_move(mb, 0, mb->h * -1);
214 e_mod_move_apptray_objs_animation_move(mb, 0, mb->h * -1);
218 e_mod_move_apptray_objs_animation_move(mb, 0, 0);
223 if (check_w) check_w /= 2;
224 if (info->coord.x < check_w)
226 e_mod_move_apptray_e_border_move(mb, mb->w * -1, 0);
227 e_mod_move_apptray_objs_animation_move(mb, mb->w * -1, 0);
231 e_mod_move_apptray_objs_animation_move(mb, 0, 0);
236 if (check_h) check_h /= 2;
237 if (info->coord.y > (zone->h - check_h))
239 e_mod_move_apptray_e_border_move(mb, 0, zone->h);
240 e_mod_move_apptray_objs_animation_move(mb, 0, zone->h);
244 e_mod_move_apptray_objs_animation_move(mb, 0, (zone->h - mb->h));
249 if (check_w) check_w /= 2;
250 if (info->coord.x > (zone->w - check_w))
252 e_mod_move_apptray_e_border_move(mb, zone->w, 0);
253 e_mod_move_apptray_objs_animation_move(mb, zone->w, 0);
257 e_mod_move_apptray_objs_animation_move(mb, zone->w - mb->w, 0);
264 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
267 e_mod_move_event_click_set(mco->event, EINA_FALSE);
271 if (mb->flick_data) e_mod_move_flick_data_free(mb);
276 _e_mod_move_apptray_objs_position_set(E_Move_Border *mb,
280 E_Move_Apptray_Data *at_data = NULL;
281 at_data = (E_Move_Apptray_Data *)mb->data;
283 at_data = (E_Move_Apptray_Data *)e_mod_move_apptray_internal_data_add(mb);
284 E_CHECK_RETURN(at_data, EINA_FALSE);
293 _e_mod_move_apptray_objs_position_get(E_Move_Border *mb,
297 E_Move_Apptray_Data *at_data = NULL;
298 at_data = (E_Move_Apptray_Data *)mb->data;
299 E_CHECK_RETURN(at_data, EINA_FALSE);
308 _e_mod_move_apptray_objs_animation_frame(void *data,
311 E_Move_Apptray_Animation_Data *anim_data = NULL;
312 E_Move_Border *mb = NULL;
316 anim_data = (E_Move_Apptray_Animation_Data *)data;
317 E_CHECK_RETURN(anim_data, EINA_FALSE);
319 mb = e_mod_move_apptray_find();
320 E_CHECK_RETURN(mb, EINA_FALSE);
322 frame = ecore_animator_pos_map(pos, ECORE_POS_MAP_ACCELERATE, 0.0, 0.0);
323 x = anim_data->sx + anim_data->dx * frame;
324 y = anim_data->sy + anim_data->dy * frame;
326 e_mod_move_apptray_objs_move(mb, x, y);
330 // apptray_objs_animation_layer_unset
331 e_mod_move_apptray_objs_animation_layer_unset(mb);
333 if (!(REGION_INSIDE_ZONE(mb, mb->bd->zone)))
335 e_border_focus_set(mb->bd, 0, 0);
336 e_border_lower(mb->bd);
337 e_mod_move_apptray_dim_hide(mb);
340 // send apptray to "move end message".
341 SLOG(LOG_DEBUG, "E17_MOVE_MODULE","[e17:X_CLIENT_MESSAGE:Apptray:ANIMATION_END]");
342 e_mod_move_apptray_anim_state_send(mb, EINA_FALSE);
344 e_mod_move_apptray_objs_del(mb);
346 memset(anim_data, 0, sizeof(E_Move_Apptray_Animation_Data));
348 mb->anim_data = NULL;
354 _e_mod_move_apptray_flick_process(E_Move_Border *mb,
358 E_Move_Control_Object *mco = NULL;
363 E_CHECK_RETURN(mb, EINA_FALSE);
364 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
365 E_CHECK_RETURN(state, EINA_FALSE);
369 /* apptray click unset */
370 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
373 e_mod_move_event_click_set(mco->event, EINA_FALSE);
376 e_mod_move_flick_data_free(mb);
380 case 90: x = mb->w * -1; y = 0; break;
381 case 180: x = 0; y = zone->h; break;
382 case 270: x = zone->w; y = 0; break;
384 default : x = 0; y = mb->h * -1; break;
387 e_mod_move_apptray_e_border_move(mb, x, y);
388 e_mod_move_apptray_objs_animation_move(mb, x, y);
394 _e_mod_move_apptray_dim_objs_apply(E_Move_Border *mb,
403 E_Move_Apptray_Data *at_data = NULL;
405 E_CHECK_RETURN(mb, EINA_FALSE);
406 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
407 E_CHECK_RETURN(mb->data, EINA_FALSE);
409 at_data = (E_Move_Apptray_Data *)mb->data;
410 E_CHECK_RETURN(at_data->dim_objs, EINA_FALSE);
414 dim_max = mb->m->dim_max_opacity;
421 opacity = dim_max * mx / mb->w;
428 opacity = dim_max * my / mb->h;
435 opacity = dim_max * mx / mb->w;
443 opacity = dim_max * my / mb->h;
449 e_mod_move_bd_move_dim_objs_opacity_set(at_data->dim_objs, opacity);
450 at_data->opacity = opacity;
455 _e_mod_move_apptray_cb_bg_touch_dn(void *data,
459 Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event;
460 E_Move_Apptray_Data *at_data = (E_Move_Apptray_Data *)data;
462 E_CHECK_RETURN(at_data, ECORE_CALLBACK_PASS_ON);
463 E_CHECK_RETURN(ev, ECORE_CALLBACK_PASS_ON);
465 if (ev->buttons != 1)
466 return ECORE_CALLBACK_PASS_ON;
468 if (ev->event_window != at_data->bg_touch.win)
469 return ECORE_CALLBACK_PASS_ON;
471 at_data->bg_touch.click = EINA_TRUE;
473 return ECORE_CALLBACK_PASS_ON;
477 _e_mod_move_apptray_cb_bg_touch_up(void *data,
481 Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event;
482 E_Move_Apptray_Data *at_data = (E_Move_Apptray_Data *)data;
484 E_Move_Border *at_mb = NULL;
486 Ecore_X_Window at_win;
491 E_CHECK_RETURN(at_data, ECORE_CALLBACK_PASS_ON);
492 E_CHECK_RETURN(ev, ECORE_CALLBACK_PASS_ON);
494 if (ev->buttons != 1)
495 return ECORE_CALLBACK_PASS_ON;
497 if (ev->event_window != at_data->bg_touch.win)
498 return ECORE_CALLBACK_PASS_ON;
500 E_CHECK_RETURN(at_data->bg_touch.click, ECORE_CALLBACK_PASS_ON);
502 at_mb = e_mod_move_apptray_find();
503 E_CHECK_RETURN(at_mb, ECORE_CALLBACK_PASS_ON);
505 at_win = e_mod_move_util_client_xid_get(at_mb);
506 if (e_mod_move_util_win_prop_angle_get(at_win, &angles[0], &angles[1]))
511 zone = at_mb->bd->zone;
513 if (REGION_INSIDE_ZONE(at_mb, zone)) state = EINA_TRUE;
514 else state = EINA_FALSE;
516 if (state && at_mb->visible)
542 if (e_mod_move_apptray_objs_animation_state_get(at_mb))
544 e_mod_move_apptray_objs_animation_stop(at_mb);
545 e_mod_move_apptray_objs_animation_clear(at_mb);
547 e_mod_move_apptray_objs_add(at_mb);
549 // send apptray to "move start message".
550 e_mod_move_apptray_anim_state_send(at_mb, EINA_TRUE);
552 // apptray_objs_animation_layer_set
553 e_mod_move_apptray_objs_animation_layer_set(at_mb);
555 e_mod_move_apptray_e_border_move(at_mb, x, y);
556 e_mod_move_apptray_objs_animation_move(at_mb, x, y);
559 return ECORE_CALLBACK_PASS_ON;
563 _e_mod_move_apptray_bg_touch_win_show(E_Move_Border *mb)
565 E_Move_Apptray_Data *at_data = NULL;
570 E_CHECK(TYPE_APPTRAY_CHECK(mb));
571 at_data = (E_Move_Apptray_Data *)mb->data;
578 if (at_data->bg_touch.win) return;
580 at_data->bg_touch.win = ecore_x_window_input_new(0, zone->x, zone->y,
582 ecore_x_icccm_title_set(at_data->bg_touch.win, "E MOVE Apptray BG Touch");
583 ecore_x_window_show(at_data->bg_touch.win);
585 at_data->bg_touch.dn_h = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN,
586 _e_mod_move_apptray_cb_bg_touch_dn,
588 at_data->bg_touch.up_h = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP,
589 _e_mod_move_apptray_cb_bg_touch_up,
593 ecore_x_window_configure(at_data->bg_touch.win,
594 ECORE_X_WINDOW_CONFIGURE_MASK_SIBLING |
595 ECORE_X_WINDOW_CONFIGURE_MASK_STACK_MODE,
598 bd->win, ECORE_X_WINDOW_STACK_BELOW);
602 _e_mod_move_apptray_bg_touch_win_hide(E_Move_Border *mb)
604 E_Move_Apptray_Data *at_data = NULL;
607 E_CHECK(TYPE_APPTRAY_CHECK(mb));
608 at_data = (E_Move_Apptray_Data *)mb->data;
612 E_CHECK(at_data->bg_touch.win);
614 if (at_data->bg_touch.dn_h)
616 ecore_event_handler_del(at_data->bg_touch.dn_h);
617 at_data->bg_touch.dn_h = NULL;
619 if (at_data->bg_touch.up_h)
621 ecore_event_handler_del(at_data->bg_touch.up_h);
622 at_data->bg_touch.up_h = NULL;
625 ecore_x_window_hide(at_data->bg_touch.win);
626 ecore_x_window_free(at_data->bg_touch.win);
627 at_data->bg_touch.win = 0;
630 static Ecore_X_Window
631 _e_mod_move_apptray_bg_touch_win_get(E_Move_Border *mb)
633 E_Move_Apptray_Data *at_data = NULL;
635 E_CHECK_RETURN(mb, 0);
636 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), 0);
637 at_data = (E_Move_Apptray_Data *)mb->data;
639 E_CHECK_RETURN(at_data, 0);
641 E_CHECK_RETURN(at_data->bg_touch.win, 0);
643 return at_data->bg_touch.win;
646 /* externally accessible functions */
648 e_mod_move_apptray_ctl_obj_event_setup(E_Move_Border *mb,
649 E_Move_Control_Object *mco)
653 E_CHECK(TYPE_APPTRAY_CHECK(mb));
655 mco->event = e_mod_move_event_new(mb->bd->client.win, mco->obj);
658 e_mod_move_event_data_type_set(mco->event, E_MOVE_EVENT_DATA_TYPE_BORDER);
659 e_mod_move_event_angle_cb_set(mco->event,
660 e_mod_move_util_win_prop_angle_get);
661 e_mod_move_event_cb_set(mco->event, E_MOVE_EVENT_TYPE_MOTION_START,
662 _e_mod_move_apptray_cb_motion_start, mb);
663 e_mod_move_event_cb_set(mco->event, E_MOVE_EVENT_TYPE_MOTION_MOVE,
664 _e_mod_move_apptray_cb_motion_move, mb);
665 e_mod_move_event_cb_set(mco->event, E_MOVE_EVENT_TYPE_MOTION_END,
666 _e_mod_move_apptray_cb_motion_end, mb);
667 e_mod_move_event_propagate_type_set(mco->event,
668 E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY);
671 EINTERN E_Move_Border *
672 e_mod_move_apptray_find(void)
677 m = e_mod_move_util_get();
678 E_CHECK_RETURN(m, 0);
680 EINA_INLIST_REVERSE_FOREACH(m->borders, mb)
682 if (TYPE_APPTRAY_CHECK(mb)) return mb;
688 e_mod_move_apptray_click_get(void)
690 E_Move_Border *mb = NULL;
691 Eina_Bool click = EINA_FALSE;
692 E_Move_Control_Object *mco = NULL;
695 mb = e_mod_move_apptray_find();
696 E_CHECK_RETURN(mb, EINA_FALSE);
698 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
701 click = e_mod_move_event_click_get(mco->event);
708 e_mod_move_apptray_event_clear(void)
710 E_Move_Border *mb = NULL;
711 Eina_Bool click = EINA_FALSE;
712 E_Move_Control_Object *mco = NULL;
715 mb = e_mod_move_apptray_find();
716 E_CHECK_RETURN(mb, EINA_FALSE);
718 click = e_mod_move_apptray_click_get();
719 E_CHECK_RETURN(click, EINA_FALSE);
721 EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
724 e_mod_move_event_data_clear(mco->event);
725 e_mod_move_event_click_set(mco->event, EINA_FALSE);
728 if (mb->flick_data) e_mod_move_flick_data_free(mb);
734 e_mod_move_apptray_objs_add(E_Move_Border *mb)
736 Eina_Bool mirror = EINA_TRUE;
737 E_CHECK_RETURN(mb, EINA_FALSE);
738 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
742 mb->objs = e_mod_move_bd_move_objs_add(mb, mirror);
743 e_mod_move_bd_move_objs_move(mb, mb->x, mb->y);
744 e_mod_move_bd_move_objs_resize(mb, mb->w, mb->h);
745 e_mod_move_bd_move_objs_show(mb);
746 if (mb->objs) e_mod_move_util_rotation_lock(mb->m);
752 e_mod_move_apptray_objs_del(E_Move_Border *mb)
754 E_CHECK_RETURN(mb, EINA_FALSE);
755 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
756 e_mod_move_bd_move_objs_del(mb, mb->objs);
757 e_mod_move_util_rotation_unlock(mb->m);
763 e_mod_move_apptray_objs_move(E_Move_Border *mb,
767 E_CHECK_RETURN(mb, EINA_FALSE);
768 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
770 e_mod_move_bd_move_objs_move(mb, x, y);
771 _e_mod_move_apptray_objs_position_set(mb, x, y);
772 _e_mod_move_apptray_dim_objs_apply(mb, x, y);
777 e_mod_move_apptray_objs_raise(E_Move_Border *mb)
779 E_CHECK_RETURN(mb, EINA_FALSE);
780 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
781 e_mod_move_bd_move_objs_raise(mb);
786 e_mod_move_apptray_objs_animation_move(E_Move_Border *mb,
790 E_Move_Apptray_Animation_Data *anim_data = NULL;
791 Ecore_Animator *animator = NULL;
792 int sx, sy; //start x, start y
793 double anim_time = 0.0;
795 E_CHECK_RETURN(mb, EINA_FALSE);
796 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
797 E_CHECK_RETURN(mb->m, EINA_FALSE);
798 anim_time = mb->m->animation_duration;
800 if (e_mod_move_apptray_objs_animation_state_get(mb))
802 e_mod_move_apptray_objs_animation_stop(mb);
803 e_mod_move_apptray_objs_animation_clear(mb);
806 anim_data = E_NEW(E_Move_Apptray_Animation_Data, 1);
807 E_CHECK_RETURN(anim_data, EINA_FALSE);
809 if (_e_mod_move_apptray_objs_position_get(mb, &sx, &sy))
816 anim_data->sx = mb->x;
817 anim_data->sy = mb->y;
818 _e_mod_move_apptray_objs_position_set(mb,
825 anim_data->dx = anim_data->ex - anim_data->sx;
826 anim_data->dy = anim_data->ey - anim_data->sy;
827 animator = ecore_animator_timeline_add(anim_time,
828 _e_mod_move_apptray_objs_animation_frame,
832 memset(anim_data, 0, sizeof(E_Move_Apptray_Animation_Data));
837 anim_data->animator = animator;
838 anim_data->animating = EINA_TRUE;
839 mb->anim_data = anim_data;
844 e_mod_move_apptray_objs_animation_state_get(E_Move_Border *mb)
846 E_Move_Apptray_Animation_Data *anim_data = NULL;
847 E_CHECK_RETURN(mb, EINA_FALSE);
848 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
850 E_CHECK_RETURN(mb->anim_data, EINA_FALSE);
851 anim_data = (E_Move_Apptray_Animation_Data *)mb->anim_data;
852 E_CHECK_RETURN(anim_data->animating, EINA_FALSE);
857 e_mod_move_apptray_objs_animation_stop(E_Move_Border *mb)
859 E_Move_Apptray_Animation_Data *anim_data = NULL;
860 E_CHECK_RETURN(mb, EINA_FALSE);
861 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
863 E_CHECK_RETURN(mb->anim_data, EINA_FALSE);
864 anim_data = (E_Move_Apptray_Animation_Data *)mb->anim_data;
865 ecore_animator_freeze(anim_data->animator);
870 e_mod_move_apptray_objs_animation_clear(E_Move_Border *mb)
872 E_Move_Apptray_Animation_Data *anim_data = NULL;
873 E_CHECK_RETURN(mb, EINA_FALSE);
874 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
876 E_CHECK_RETURN(mb->anim_data, EINA_FALSE);
877 anim_data = (E_Move_Apptray_Animation_Data *)mb->anim_data;
878 ecore_animator_del(anim_data->animator);
879 memset(anim_data, 0, sizeof(E_Move_Apptray_Animation_Data));
881 mb->anim_data = NULL;
887 e_mod_move_apptray_internal_data_add(E_Move_Border *mb)
889 E_Move_Apptray_Data *at_data = NULL;
891 E_CHECK_RETURN(mb, NULL);
892 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), NULL);
893 E_CHECK_RETURN(mb->m, NULL);
894 at_data = (E_Move_Apptray_Data *)mb->data;
895 dim_min = mb->m->dim_min_opacity;
898 at_data = E_NEW(E_Move_Apptray_Data, 1);
899 E_CHECK_RETURN(at_data, NULL);
902 at_data->dim_objs = NULL;
903 at_data->opacity = dim_min;
910 e_mod_move_apptray_internal_data_del(E_Move_Border *mb)
912 E_Move_Apptray_Data *at_data = NULL;
913 E_CHECK_RETURN(mb, EINA_FALSE);
914 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
915 E_CHECK_RETURN(mb->data, EINA_FALSE);
916 at_data = (E_Move_Apptray_Data *)mb->data;
917 e_mod_move_apptray_dim_hide(mb);
924 e_mod_move_apptray_e_border_move(E_Move_Border *mb,
930 E_CHECK_RETURN(mb, EINA_FALSE);
931 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
932 E_CHECK_RETURN(mb->bd, EINA_FALSE);
936 /* check whether zone contains border */
937 if (E_CONTAINS(zone->x, zone->y,
941 e_border_raise(mb->bd);
942 e_border_focus_set(mb->bd, 1, 1);
946 e_border_focus_set(mb->bd, 0, 0);
949 e_border_move(mb->bd, x, y);
955 e_mod_move_apptray_e_border_raise(E_Move_Border *mb)
957 E_CHECK_RETURN(mb, EINA_FALSE);
958 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
960 e_border_raise(mb->bd);
966 e_mod_move_apptray_e_border_lower(E_Move_Border *mb)
968 E_CHECK_RETURN(mb, EINA_FALSE);
969 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
971 e_border_lower(mb->bd);
977 e_mod_move_apptray_dim_show(E_Move_Border *mb)
980 E_Move_Apptray_Data *at_data = NULL;
981 E_CHECK_RETURN(mb, NULL);
982 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), NULL);
983 E_CHECK_RETURN(mb->m, NULL);
984 at_data = (E_Move_Apptray_Data *)mb->data;
985 dim_min = mb->m->dim_min_opacity;
988 at_data = E_NEW(E_Move_Apptray_Data, 1);
989 E_CHECK_RETURN(at_data, NULL);
990 // Composite mode set true
991 e_mod_move_util_compositor_composite_mode_set(mb->m, EINA_TRUE);
995 at_data->dim_objs = e_mod_move_bd_move_dim_objs_add(mb);
996 e_mod_move_bd_move_dim_objs_show(at_data->dim_objs);
997 at_data->opacity = dim_min;
1000 // it is used for apptray input only window
1001 _e_mod_move_apptray_bg_touch_win_show(mb);
1005 if (!(at_data->dim_objs))
1007 // Composite mode set true
1008 e_mod_move_util_compositor_composite_mode_set(mb->m, EINA_TRUE);
1010 at_data->dim_objs = e_mod_move_bd_move_dim_objs_add(mb);
1012 if (at_data->dim_objs)
1014 e_mod_move_bd_move_dim_objs_show(at_data->dim_objs);
1015 at_data->opacity = dim_min;
1018 // it is used for apptray input only window
1019 _e_mod_move_apptray_bg_touch_win_show(mb);
1023 "[MOVE] ev:%15.15s w:0x%08x %s()\n",
1024 "EVAS_OBJ", mb->bd->win, __func__);
1026 return at_data->dim_objs;
1030 e_mod_move_apptray_dim_hide(E_Move_Border *mb)
1033 E_Move_Apptray_Data *at_data = NULL;
1034 E_CHECK_RETURN(mb, EINA_FALSE);
1035 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
1036 E_CHECK_RETURN(mb->m, EINA_FALSE);
1037 E_CHECK_RETURN(mb->data, EINA_FALSE);
1038 at_data = (E_Move_Apptray_Data *)mb->data;
1039 dim_min = mb->m->dim_min_opacity;
1040 E_CHECK_RETURN(at_data->dim_objs, EINA_FALSE);
1041 e_mod_move_bd_move_dim_objs_hide(at_data->dim_objs);
1042 e_mod_move_bd_move_dim_objs_del(at_data->dim_objs);
1043 at_data->dim_objs = NULL;
1044 at_data->opacity = dim_min;
1046 // it is used for apptray input only window
1047 _e_mod_move_apptray_bg_touch_win_hide(mb);
1049 // Composite mode set false
1050 e_mod_move_util_compositor_composite_mode_set(mb->m, EINA_FALSE);
1053 "[MOVE] ev:%15.15s w:0x%08x %s()\n",
1054 "EVAS_OBJ", ((mb->bd) ? mb->bd->win : NULL), __func__);
1060 e_mod_move_apptray_restack_post_process(E_Move_Border *mb)
1063 E_Border *bd = NULL;
1064 E_Zone *zone = NULL;
1066 E_CHECK_RETURN(mb, EINA_FALSE);
1067 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
1070 E_CHECK_RETURN(bd, EINA_FALSE);
1072 E_CHECK_RETURN(zone, EINA_FALSE);
1074 if ((win = _e_mod_move_apptray_bg_touch_win_get(mb)))
1077 ecore_x_window_configure(win,
1078 ECORE_X_WINDOW_CONFIGURE_MASK_SIBLING |
1079 ECORE_X_WINDOW_CONFIGURE_MASK_STACK_MODE,
1081 zone->w, zone->h, 0,
1082 bd->win, ECORE_X_WINDOW_STACK_BELOW);
1088 e_mod_move_apptray_objs_animation_start_position_set(E_Move_Border *mb,
1094 E_CHECK_RETURN(mb, EINA_FALSE);
1095 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
1097 angle = ((angle % 360) / 90) * 90;
1098 zone = mb->bd->zone;
1102 case 90: x = mb->w * -1; y = 0; break;
1103 case 180: x = 0; y = zone->y + zone->h; break;
1104 case 270: x = zone->x + zone->w; y = 0; break;
1106 default : x = 0; y = mb->h * -1; break;
1109 _e_mod_move_apptray_objs_position_set(mb, x, y);
1114 EINTERN E_Move_Event_Cb
1115 e_mod_move_apptray_event_cb_get(E_Move_Event_Type type)
1117 if (type == E_MOVE_EVENT_TYPE_MOTION_START)
1118 return _e_mod_move_apptray_cb_motion_start;
1119 else if (type == E_MOVE_EVENT_TYPE_MOTION_MOVE)
1120 return _e_mod_move_apptray_cb_motion_move;
1121 else if (type == E_MOVE_EVENT_TYPE_MOTION_END)
1122 return _e_mod_move_apptray_cb_motion_end;
1128 e_mod_move_apptray_anim_state_send(E_Move_Border *mb,
1131 long d[5] = {0L, 0L, 0L, 0L, 0L};
1133 E_CHECK_RETURN(mb, EINA_FALSE);
1134 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
1136 win = e_mod_move_util_client_xid_get(mb);
1137 E_CHECK_RETURN(win, 0);
1139 if (state) d[0] = 1L;
1142 ecore_x_client_message32_send
1143 (win, ATOM_MV_APPTRAY_STATE,
1144 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1145 d[0], d[1], d[2], d[3], d[4]);
1151 e_mod_move_apptray_objs_animation_layer_set(E_Move_Border *mb)
1153 E_Move *m = e_mod_move_util_get();
1154 E_Move_Border *find_mb = NULL;
1155 E_Move_Border *indi_mb = NULL;
1156 E_Move_Border *state_above_mb = NULL;
1157 E_Zone *zone = NULL;
1159 Eina_Bool found = EINA_FALSE;
1160 E_Move_Apptray_Data *at_data = NULL;
1162 E_CHECK_RETURN(m, EINA_FALSE);
1163 E_CHECK_RETURN(mb, EINA_FALSE);
1164 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
1166 at_data = (E_Move_Apptray_Data *)mb->data;
1167 E_CHECK_RETURN(at_data, EINA_FALSE);
1169 at_data->animation_layer_info.indicator.layer_set = EINA_FALSE;
1170 at_data->animation_layer_info.state_above.layer_set = EINA_FALSE;
1171 at_data->animation_layer_info.state_above.win = 0;
1173 EINA_INLIST_REVERSE_FOREACH(m->borders, find_mb)
1176 && (find_mb->bd->layer == e_mod_move_util_layer_policy_get(E_MOVE_STATE_ABOVE_LAYER))
1177 && (find_mb->visible))
1179 win = find_mb->bd->client.win;
1184 && (find_mb->bd->layer < e_mod_move_util_layer_policy_get(E_MOVE_STATE_ABOVE_LAYER)))
1192 at_data->animation_layer_info.state_above.layer_set = EINA_TRUE;
1193 at_data->animation_layer_info.state_above.win = win;
1194 state_above_mb = e_mod_move_border_client_find(win);
1196 && !(state_above_mb->objs))
1198 state_above_mb->objs = e_mod_move_bd_move_objs_add(state_above_mb, EINA_TRUE);
1199 e_mod_move_bd_move_objs_move(state_above_mb, state_above_mb->x, state_above_mb->y);
1200 e_mod_move_bd_move_objs_resize(state_above_mb, state_above_mb->w, state_above_mb->h);
1201 e_mod_move_bd_move_objs_show(state_above_mb);
1204 // apptray mirror object stack below to state_above object .
1205 e_mod_move_bd_move_objs_stack_below(mb, state_above_mb); // mb : apptray move border
1207 // indicator window mirror object stack control
1208 indi_mb = e_mod_move_indicator_find();
1209 zone = mb->bd->zone;
1211 && (indi_mb->visible)
1212 && (REGION_INSIDE_ZONE(indi_mb, zone))
1213 && (!m->elm_indicator_mode))
1215 at_data->animation_layer_info.indicator.layer_set = EINA_TRUE;
1216 if (!(indi_mb->objs))
1218 indi_mb->objs = e_mod_move_bd_move_objs_add(indi_mb, EINA_TRUE);
1219 e_mod_move_bd_move_objs_move(indi_mb, indi_mb->x, indi_mb->y);
1220 e_mod_move_bd_move_objs_resize(indi_mb, indi_mb->w, indi_mb->h);
1221 e_mod_move_bd_move_objs_show(indi_mb);
1224 // indicator mirror object stack below to apptray.
1225 e_mod_move_bd_move_objs_stack_below(indi_mb, mb); // mb : apptray move border
1230 e_mod_move_apptray_objs_raise(mb);
1237 e_mod_move_apptray_objs_animation_layer_unset(E_Move_Border *mb)
1239 E_Move_Border *indi_mb = NULL;
1240 E_Move_Border *state_above_mb = NULL;
1241 E_Move_Apptray_Data *at_data = NULL;
1244 E_CHECK_RETURN(mb, EINA_FALSE);
1245 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
1247 at_data = (E_Move_Apptray_Data *)mb->data;
1248 E_CHECK_RETURN(at_data, EINA_FALSE);
1250 if (at_data->animation_layer_info.indicator.layer_set)
1252 if ((indi_mb = e_mod_move_indicator_find())
1253 && (!indi_mb->animate_move))
1255 e_mod_move_bd_move_objs_del(indi_mb, indi_mb->objs);
1256 indi_mb->objs = NULL;
1260 if (at_data->animation_layer_info.state_above.layer_set)
1262 win = at_data->animation_layer_info.state_above.win;
1263 if ((state_above_mb = e_mod_move_border_client_find(win))
1264 && (!state_above_mb->animate_move))
1266 e_mod_move_bd_move_objs_del(state_above_mb, state_above_mb->objs);
1267 state_above_mb->objs = NULL;
1271 at_data->animation_layer_info.state_above.layer_set = EINA_FALSE;
1272 at_data->animation_layer_info.indicator.layer_set = EINA_FALSE;
1273 at_data->animation_layer_info.state_above.win = 0;