1 #include "e_mod_move_shared_types.h"
2 #include "e_mod_move_debug.h"
3 #include "e_mod_move.h"
5 /* local subsystem functions */
6 static Eina_Bool _e_mod_move_indicator_widget_apptray_move_set(E_Move_Indicator_Widget *indi_widget, Eina_Bool state);
7 static Eina_Bool _e_mod_move_indicator_widget_quickpanel_move_set(E_Move_Indicator_Widget *indi_widget, Eina_Bool state);
8 static Eina_Bool _e_mod_move_indicator_widget_apptray_move_get(E_Move_Indicator_Widget *indi_widget);
9 static Eina_Bool _e_mod_move_indicator_widget_quickpanel_move_get(E_Move_Indicator_Widget *indi_widget);
10 static Eina_Bool _e_mod_move_indicator_widget_cb_motion_start_internal_apptray_check(E_Move_Border *at_mb);
11 static Eina_Bool _e_mod_move_indicator_widget_cb_motion_start_internal_quickpanel_check(E_Move_Border *qp_mb);
12 static Eina_Bool _e_mod_move_indicator_widget_quickpanel_flick_process(E_Move_Indicator_Widget *indi_widget, E_Move_Border *mb2, int angle, Eina_Bool state);
13 static Eina_Bool _e_mod_move_indicator_widget_apptray_flick_process(E_Move_Indicator_Widget *indi_widget, E_Move_Border *mb2, int angle, Eina_Bool state);
14 static Eina_Bool _e_mod_move_indicator_widget_home_region_release_check(E_Move_Indicator_Widget *indi_widget, Eina_Bool apptray_move, int angle, Evas_Point pos);
15 static Eina_Bool _e_mod_move_indicator_widget_cb_motion_start(void *data, void *event_info);
16 static Eina_Bool _e_mod_move_indicator_widget_cb_motion_move(void *data, void *event_info);
17 static Eina_Bool _e_mod_move_indicator_widget_cb_motion_end(void *data, void *event_info);
18 static void _e_mod_move_indicator_widget_obj_event_setup(E_Move_Indicator_Widget *indicator_widget, E_Move_Widget_Object *mwo);
19 static Eina_Bool _e_mod_move_indicator_widget_scrollable_object_movable_check(E_Move_Border *mb, Evas_Point pos);
20 static Eina_Bool _e_mod_move_indicator_widget_target_window_find_by_pointer(Ecore_X_Window *win, int x, int y);
21 static Ecore_X_Window _e_mod_move_indicator_widget_event_win_find(void *event_info);
22 static Eina_Bool _e_mod_move_indicator_widget_target_window_policy_check(E_Move_Border *mb);
23 static Eina_Bool _e_mod_move_indicator_widget_event_send_policy_check(E_Move_Indicator_Widget *indi_widget, Evas_Point pos);
25 /* local subsystem functions */
27 _e_mod_move_indicator_widget_apptray_move_set(E_Move_Indicator_Widget *indi_widget,
30 E_CHECK_RETURN(indi_widget, EINA_FALSE);
31 indi_widget->apptray_move = state;
36 _e_mod_move_indicator_widget_quickpanel_move_set(E_Move_Indicator_Widget *indi_widget,
39 E_CHECK_RETURN(indi_widget, EINA_FALSE);
40 indi_widget->quickpanel_move = state;
45 _e_mod_move_indicator_widget_apptray_move_get(E_Move_Indicator_Widget *indi_widget)
47 E_CHECK_RETURN(indi_widget, EINA_FALSE);
48 return indi_widget->apptray_move;
52 _e_mod_move_indicator_widget_quickpanel_move_get(E_Move_Indicator_Widget *indi_widget)
54 E_CHECK_RETURN(indi_widget, EINA_FALSE);
55 return indi_widget->quickpanel_move;
59 _e_mod_move_indicator_widget_cb_motion_start_internal_apptray_check(E_Move_Border *at_mb)
62 E_Move_Border *find_mb = NULL;
63 Eina_Bool found = EINA_FALSE;
64 m = e_mod_move_util_get();
66 E_CHECK_RETURN(m, EINA_FALSE);
67 E_CHECK_RETURN(at_mb, EINA_FALSE);
68 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(at_mb), EINA_FALSE);
69 E_CHECK_RETURN(at_mb->visible, EINA_FALSE);
70 E_CHECK_RETURN(e_mod_move_util_compositor_object_visible_get(at_mb),
72 if (e_mod_move_apptray_objs_animation_state_get(at_mb)) return EINA_FALSE;
74 // check if notification window is on-screen.
75 EINA_INLIST_REVERSE_FOREACH(m->borders, find_mb)
77 if (TYPE_INDICATOR_CHECK(find_mb)) continue;
79 && REGION_INTERSECTS_WITH_ZONE(find_mb, at_mb->bd->zone))
86 && (find_mb->bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NOTIFICATION))
90 // check if notification window is on-screen.
92 e_mod_move_apptray_dim_show(at_mb);
93 e_mod_move_apptray_objs_add(at_mb);
95 // apptray_objs_animation_layer_set
96 e_mod_move_apptray_objs_animation_layer_set(at_mb);
102 _e_mod_move_indicator_widget_cb_motion_start_internal_quickpanel_check(E_Move_Border *qp_mb)
104 E_CHECK_RETURN(qp_mb, EINA_FALSE);
105 E_CHECK_RETURN(TYPE_QUICKPANEL_CHECK(qp_mb), EINA_FALSE);
106 E_CHECK_RETURN(qp_mb->visible, EINA_FALSE);
107 E_CHECK_RETURN(e_mod_move_util_compositor_object_visible_get(qp_mb),
110 // Quickpanel is under rotation state.
111 // I think there is another exception case.
112 // It's posible that WM doesn't send rotation change request yet.
113 // In this case the value of wait_for_done is zero,
114 // it means quickpanel isn't rotating for now, but going to be rotated.
116 if (qp_mb->bd->client.e.state.rot.wait_for_done) return EINA_FALSE;
118 if (e_mod_move_quickpanel_objs_animation_state_get(qp_mb)) return EINA_FALSE;
120 if (!(qp_mb->m->qp_scroll_with_clipping))
121 e_mod_move_quickpanel_dim_show(qp_mb);
123 // Set Composite Mode & Rotation Lock & Make below win's mirror object
124 e_mod_move_quickpanel_stage_init(qp_mb);
126 e_mod_move_quickpanel_objs_add(qp_mb);
132 _e_mod_move_indicator_widget_quickpanel_flick_process(E_Move_Indicator_Widget *indi_widget,
133 E_Move_Border *mb2, // mb2 : quickpanel
138 E_Move_Border *mb = NULL;
139 E_Move_Widget_Object *mwo = NULL;
142 int mx = 0, my = 0, ax = 0, ay = 0;
144 E_CHECK_RETURN(indi_widget, EINA_FALSE);
145 mb = e_mod_move_border_client_find(indi_widget->win);
146 E_CHECK_RETURN(mb, EINA_FALSE);
147 E_CHECK_RETURN(mb2, EINA_FALSE);
148 E_CHECK_RETURN(TYPE_QUICKPANEL_CHECK(mb2), EINA_FALSE);
149 E_CHECK_RETURN(state, EINA_FALSE);
154 EINA_LIST_FOREACH(indi_widget->objs, l, mwo) // indicator click unset
157 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
160 _e_mod_move_indicator_widget_apptray_move_set(indi_widget, EINA_FALSE);
161 _e_mod_move_indicator_widget_quickpanel_move_set(indi_widget, EINA_FALSE);
164 if (mb->flick_data) e_mod_move_flick_data_free(mb);
170 if (m->qp_scroll_with_clipping)
172 ax = zone->x + mb2->w;
173 ay = zone->y + mb2->h;
181 mx = 0; my = zone->h - mb2->h;
182 if (m->qp_scroll_with_clipping)
184 ax = zone->x; ay = zone->y;
192 mx = zone->w - mb2->w; my = 0;
193 if (m->qp_scroll_with_clipping)
195 ax = zone->x; ay = zone->y;
205 if (m->qp_scroll_with_clipping)
207 ax = zone->x + mb2->w;
208 ay = zone->y + mb2->h;
217 e_mod_move_quickpanel_e_border_move(mb2, mx, my);
218 e_mod_move_quickpanel_objs_animation_move(mb2, ax, ay);
224 _e_mod_move_indicator_widget_apptray_flick_process(E_Move_Indicator_Widget *indi_widget,
225 E_Move_Border *mb2, // mb2 : apptray
229 E_Move_Border *mb = NULL;
230 E_Move_Widget_Object *mwo = NULL;
236 E_CHECK_RETURN(indi_widget, EINA_FALSE);
237 mb = e_mod_move_border_client_find(indi_widget->win);
238 E_CHECK_RETURN(mb, EINA_FALSE);
239 E_CHECK_RETURN(mb2, EINA_FALSE);
240 E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb2), EINA_FALSE);
241 E_CHECK_RETURN(state, EINA_FALSE);
245 EINA_LIST_FOREACH(indi_widget->objs, l, mwo) // indicator click unset
248 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
251 _e_mod_move_indicator_widget_apptray_move_set(indi_widget, EINA_FALSE);
252 _e_mod_move_indicator_widget_quickpanel_move_set(indi_widget, EINA_FALSE);
255 if (mb->flick_data) e_mod_move_flick_data_free(mb);
265 y = zone->h - mb2->h;
268 x = zone->w - mb2->w;
278 e_mod_move_apptray_e_border_move(mb2, x, y);
279 e_mod_move_apptray_objs_animation_move(mb2, x, y);
285 _e_mod_move_indicator_widget_home_region_release_check(E_Move_Indicator_Widget *indi_widget,
286 Eina_Bool apptray_move /* if home button is pressd, then apptray_move set true */,
288 Evas_Point pos /* mouse up position */)
290 E_Move_Border *mb = NULL;
292 Eina_Bool ret = EINA_FALSE;
296 m = e_mod_move_util_get();
297 E_CHECK_RETURN(m, EINA_FALSE);
298 E_CHECK_RETURN(indi_widget, EINA_FALSE);
299 mb = e_mod_move_border_client_find(indi_widget->win);
300 E_CHECK_RETURN(mb, EINA_FALSE);
301 E_CHECK_RETURN(apptray_move, EINA_FALSE);
302 E_CHECK_RETURN(mb->bd, EINA_FALSE);
304 E_CHECK_RETURN(zone, EINA_FALSE);
309 region_check = m->indicator_widget_geometry[E_MOVE_ANGLE_0].h;
310 if (pos.y < region_check) ret = EINA_TRUE;
313 region_check = m->indicator_widget_geometry[E_MOVE_ANGLE_90].w;
314 if (pos.x < region_check) ret = EINA_TRUE;
317 region_check = zone->h - m->indicator_widget_geometry[E_MOVE_ANGLE_180].h;
318 if (pos.y > region_check) ret = EINA_TRUE;
321 region_check = zone->w - m->indicator_widget_geometry[E_MOVE_ANGLE_270].w;
322 if (pos.x > region_check) ret = EINA_TRUE;
326 "[MOVE] ev:%15.15s , invalid angle:%d, (%d,%d) %s()\n",
327 "EVAS_OBJ", angle, pos.x, pos.y,
335 _e_mod_move_indicator_widget_cb_motion_start(void *data,
339 E_Move_Indicator_Widget *indi_widget = (E_Move_Indicator_Widget *)data;
341 E_Move_Border *mb = NULL;
342 E_Move_Border *ev_mb = NULL;
343 E_Move_Border *qp_mb = NULL;
344 E_Move_Border *at_mb = NULL;
345 E_Move_Event_Motion_Info *info;
346 E_Move_Widget_Object *mwo = NULL;
347 Evas_Event_Mouse_Down *mouse_down_event = NULL;
348 Eina_Bool clicked = EINA_FALSE;
350 E_Move_Scroll_Region_Indicator scroll_region = E_MOVE_SCROLL_REGION_NONE;
351 Ecore_X_Window ev_win = 0;
353 info = (E_Move_Event_Motion_Info *)event_info;
354 m = e_mod_move_util_get();
356 E_CHECK_RETURN(indi_widget, EINA_FALSE);
358 // clicked window indicator policy check
359 EINA_LIST_FOREACH(indi_widget->objs, l, mwo)
362 ev_win = e_mod_move_event_win_get(mwo->event);
364 ev_mb = e_mod_move_border_client_find(ev_win);
365 E_CHECK_RETURN(_e_mod_move_indicator_widget_target_window_policy_check(ev_mb),
368 mb = e_mod_move_border_client_find(indi_widget->win);
370 if (!m || !mb || !indi_widget || !info) return EINA_FALSE;
372 mouse_down_event = info->event_info;
373 E_CHECK_RETURN(mouse_down_event, EINA_FALSE);
374 if (mouse_down_event->button != 1)
377 EINA_LIST_FOREACH(indi_widget->objs, l, mwo)
380 clicked = e_mod_move_event_click_get(mwo->event);
386 "[MOVE] ev:%15.15s w:0x%08x INDI_WIDGET_MOTION_START (%4d,%4d)\n",
387 "EVAS_OBJ", mb->bd->win,
388 info->coord.x, info->coord.y);
390 _e_mod_move_indicator_widget_apptray_move_set(indi_widget, EINA_FALSE);
391 _e_mod_move_indicator_widget_quickpanel_move_set(indi_widget, EINA_FALSE);
393 /* check if apptray or quickpanel exists on the current zone */
394 at_mb = e_mod_move_apptray_find();
396 (REGION_INSIDE_ZONE(at_mb, mb->bd->zone)))
399 "[MOVE] ev:%15.15s w:0x%08x INDI_WIDGET_MOTION_START %s\n",
400 "EVAS_OBJ", mb->bd->win,
401 "apptray exists. return.");
405 qp_mb = e_mod_move_quickpanel_find();
407 (REGION_INSIDE_ZONE(qp_mb, mb->bd->zone)))
410 "[MOVE] ev:%15.15s w:0x%08x INDI_WIDGET_MOTION_START %s\n",
411 "EVAS_OBJ", mb->bd->win,
412 "quickpanel exists. return.");
416 EINA_LIST_FOREACH(indi_widget->objs, l, mwo)
419 e_mod_move_event_click_set(mwo->event, EINA_TRUE);
422 E_CHECK_GOTO(e_mod_move_flick_data_new(mb), error_cleanup);
423 e_mod_move_flick_data_init(mb, info->coord.x, info->coord.y);
425 scroll_region = e_mod_move_indicator_region_scroll_check(mb->angle, info->coord);
427 if (scroll_region == E_MOVE_SCROLL_REGION_APPTRAY)
429 if (e_mod_move_panel_scrollable_get(mb, E_MOVE_PANEL_TYPE_APPTRAY))
431 if (_e_mod_move_indicator_widget_cb_motion_start_internal_apptray_check(at_mb))
433 e_mod_move_apptray_e_border_raise(at_mb);
434 _e_mod_move_indicator_widget_apptray_move_set(indi_widget, EINA_TRUE);
435 e_mod_move_apptray_objs_animation_start_position_set(at_mb,
437 // send apptray to "move start message".
438 e_mod_move_apptray_anim_state_send(at_mb, EINA_TRUE);
442 else if (scroll_region == E_MOVE_SCROLL_REGION_QUICKPANEL)
444 if (e_mod_move_panel_scrollable_get(mb, E_MOVE_PANEL_TYPE_QUICKPANEL))
446 if (_e_mod_move_indicator_widget_cb_motion_start_internal_quickpanel_check(qp_mb))
448 _e_mod_move_indicator_widget_quickpanel_move_set(indi_widget, EINA_TRUE);
449 e_mod_move_quickpanel_objs_animation_start_position_set(qp_mb,
451 // send quickpanel to "move start message".
452 e_mod_move_quickpanel_anim_state_send(qp_mb, EINA_TRUE);
457 indi_widget->pos = info->coord; // save mouse click position
463 EINA_LIST_FOREACH(indi_widget->objs, l, mwo)
466 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
469 _e_mod_move_indicator_widget_apptray_move_set(indi_widget, EINA_FALSE);
470 _e_mod_move_indicator_widget_quickpanel_move_set(indi_widget, EINA_FALSE);
476 _e_mod_move_indicator_widget_cb_motion_move(void *data,
480 E_Move_Indicator_Widget *indi_widget = (E_Move_Indicator_Widget *)data;
481 E_Move_Border *mb = NULL;
482 E_Move_Border *qp_mb = NULL;
483 E_Move_Border *at_mb = NULL;
484 E_Move_Event_Motion_Info *info;
485 E_Move_Widget_Object *mwo = NULL;
488 Eina_Bool click = EINA_FALSE;
489 Eina_Bool need_move = EINA_FALSE;
490 Eina_Bool contents = EINA_FALSE;
496 info = (E_Move_Event_Motion_Info *)event_info;
497 m = e_mod_move_util_get();
499 E_CHECK_RETURN(indi_widget, EINA_FALSE);
500 mb = e_mod_move_border_client_find(indi_widget->win);
502 if (!m || !mb || !info) return EINA_FALSE;
505 "[MOVE] ev:%15.15s w:0x%08x INDI_WIDGET_MOTION_MOVE a:%d (%4d,%4d)\n",
506 "EVAS_OBJ", mb->bd->win, mb->angle,
507 info->coord.x, info->coord.y);
512 EINA_LIST_FOREACH(indi_widget->objs, l, mwo)
515 click = e_mod_move_event_click_get(mwo->event);
518 E_CHECK_RETURN(click, EINA_FALSE);
520 if (_e_mod_move_indicator_widget_quickpanel_move_get(indi_widget))
522 qp_mb = e_mod_move_quickpanel_find();
523 E_CHECK_RETURN(qp_mb, EINA_FALSE);
525 contents = e_mod_move_border_contents_rect_get(qp_mb, &cx, &cy ,&cw, &ch);
530 if (info->coord.y < qp_mb->h)
534 if (info->coord.y < ch)
536 y = info->coord.y - ch;
537 need_move = EINA_TRUE;
542 y = info->coord.y - qp_mb->h;
543 need_move = EINA_TRUE;
548 if (info->coord.x < qp_mb->w)
552 if (info->coord.x < cw)
554 x = info->coord.x - cw;
555 need_move = EINA_TRUE;
560 x = info->coord.x - qp_mb->w;
561 need_move = EINA_TRUE;
566 if (info->coord.y > (zone->h - qp_mb->h))
570 if (info->coord.y > cy)
572 y = info->coord.y - cy;
573 need_move = EINA_TRUE;
579 need_move = EINA_TRUE;
584 if (info->coord.x > (zone->w - qp_mb->w))
588 if (info->coord.x > cx)
590 x = info->coord.x - cx;
591 need_move = EINA_TRUE;
597 need_move = EINA_TRUE;
605 if (_e_mod_move_indicator_widget_scrollable_object_movable_check(mb, info->coord))
607 if (m->qp_scroll_with_clipping)
608 e_mod_move_quickpanel_objs_move(qp_mb,
614 e_mod_move_quickpanel_objs_move(qp_mb, x, y);
618 else if (_e_mod_move_indicator_widget_apptray_move_get(indi_widget))
620 at_mb = e_mod_move_apptray_find();
621 E_CHECK_RETURN(at_mb, EINA_FALSE);
626 if (info->coord.y < at_mb->h)
628 y = info->coord.y - at_mb->h;
629 need_move = EINA_TRUE;
633 if (info->coord.x < at_mb->w)
635 x = info->coord.x - at_mb->w;
636 need_move = EINA_TRUE;
640 if (info->coord.y > (zone->h - at_mb->h))
643 need_move = EINA_TRUE;
647 if (info->coord.x > (zone->w - at_mb->w))
650 need_move = EINA_TRUE;
657 e_mod_move_apptray_objs_move(at_mb, x, y);
660 indi_widget->pos = info->coord; // save mouse move position
666 _e_mod_move_indicator_widget_cb_motion_end(void *data,
670 E_Move_Indicator_Widget *indi_widget = (E_Move_Indicator_Widget *)data;
671 E_Move_Border *mb = NULL;
672 E_Move_Border *qp_mb = NULL;
673 E_Move_Border *at_mb = NULL;
674 E_Move_Event_Motion_Info *info;
675 E_Move_Widget_Object *mwo = NULL;
678 Evas_Event_Mouse_Up *mouse_up_event;
679 Eina_Bool click = EINA_FALSE;
680 Eina_Bool flick_state = EINA_FALSE;
681 Eina_Bool qp_mv_state = EINA_FALSE;
682 Eina_Bool at_mv_state = EINA_FALSE;
685 int check_h, check_w;
687 int mx = 0, my = 0, ax = 0, ay = 0;
689 info = (E_Move_Event_Motion_Info *)event_info;
690 m = e_mod_move_util_get();
692 E_CHECK_RETURN(indi_widget, EINA_FALSE);
693 mb = e_mod_move_border_client_find(indi_widget->win);
695 if (!m || !mb || !info) return EINA_FALSE;
697 mouse_up_event = info->event_info;
698 E_CHECK_RETURN(mouse_up_event, EINA_FALSE);
699 if (mouse_up_event->button != 1)
703 "[MOVE] ev:%15.15s w:0x%08x ,angle:%d, (%d,%d) %s()\n",
704 "EVAS_OBJ", mb->bd->win, mb->angle, info->coord.x, info->coord.y,
710 EINA_LIST_FOREACH(indi_widget->objs, l, mwo)
713 click = e_mod_move_event_click_get(mwo->event);
715 E_CHECK_GOTO(click, error_cleanup);
717 qp_mv_state = _e_mod_move_indicator_widget_quickpanel_move_get(indi_widget);
718 at_mv_state = _e_mod_move_indicator_widget_apptray_move_get(indi_widget);
719 if (!qp_mv_state && !at_mv_state) goto finish;
721 e_mod_move_flick_data_update(mb, info->coord.x, info->coord.y);
722 flick_state = e_mod_move_flick_state_get(mb, EINA_TRUE);
726 qp_mb = e_mod_move_quickpanel_find();
727 if (_e_mod_move_indicator_widget_quickpanel_flick_process(indi_widget, qp_mb,
735 at_mb = e_mod_move_apptray_find();
737 // if release position is on indicator's home button then, do not flick.
738 if (_e_mod_move_indicator_widget_home_region_release_check(indi_widget,
739 EINA_TRUE, /* upper if phrase check _e_mod_move_indicator_apptray_move_get(mb) value TURE or FALSE. */
743 flick_state = EINA_FALSE;
746 if (_e_mod_move_indicator_widget_apptray_flick_process(indi_widget, at_mb,
764 if (check_h) check_h /= 2;
765 if (info->coord.y < check_h)
774 if (check_h) check_h /= 2;
775 if (info->coord.y < check_h)
777 if (m->qp_scroll_with_clipping)
783 if (e_mod_move_border_contents_rect_get(qp_mb, &cx, &cy ,&cw, &ch))
786 if (check_h) check_h /= 2;
787 if (info->coord.y < check_h)
797 if (m->qp_scroll_with_clipping)
799 ax = zone->x + qp_mb->w,
800 ay = zone->y + qp_mb->h;
809 if (check_w) check_w /= 2;
810 if (info->coord.x < check_w)
819 if (check_w) check_w /= 2;
820 if (info->coord.x < check_w)
822 if (m->qp_scroll_with_clipping)
828 if (e_mod_move_border_contents_rect_get(qp_mb, &cx, &cy ,&cw, &ch))
831 if (check_w) check_w /= 2;
832 if (info->coord.x < check_w)
842 if (m->qp_scroll_with_clipping)
844 ax = zone->x + qp_mb->w;
845 ay = zone->y + qp_mb->h;
854 if (check_h) check_h /= 2;
855 if (info->coord.y > (zone->h - check_h))
862 my = zone->h - at_mb->h;
869 if (check_h) check_h /= 2;
870 if (info->coord.y > (zone->h - check_h))
872 if (m->qp_scroll_with_clipping)
875 ax = zone->x + qp_mb->w;
876 ay = zone->y + qp_mb->h;
880 if (e_mod_move_border_contents_rect_get(qp_mb, &cx, &cy ,&cw, &ch))
883 if (check_h) check_h /= 2;
884 if (info->coord.y > (cy + check_h))
898 if (check_w) check_w /= 2;
899 if (info->coord.x > (zone->w - check_w))
906 mx = zone->w - at_mb->w;
913 if (check_w) check_w /= 2;
914 if (info->coord.x > (zone->w - check_w))
916 if (m->qp_scroll_with_clipping)
919 ax = zone->x + qp_mb->w;
920 ay = zone->y + qp_mb->h;
924 if (e_mod_move_border_contents_rect_get(qp_mb, &cx, &cy ,&cw, &ch))
927 if (check_w) check_w /= 2;
928 if (info->coord.x > (cx + check_w))
944 e_mod_move_apptray_e_border_move(at_mb, mx, my);
945 e_mod_move_apptray_objs_animation_move(at_mb, ax, ay);
949 e_mod_move_quickpanel_e_border_move(qp_mb, mx, my);
950 if (_e_mod_move_indicator_widget_scrollable_object_movable_check(mb, info->coord))
951 e_mod_move_quickpanel_objs_animation_move(qp_mb, ax, ay);
953 e_mod_move_quickpanel_objs_animation_move_with_time(qp_mb, ax, ay, 0.0000001);
954 // time :0.0 calls animation_frame with pos : 0.0 calls once.
955 // so I use small time value, it makes animation_frame with pos: 1.0 call once
959 indi_widget->pos = info->coord; // save mouse up position
961 EINA_LIST_FOREACH(indi_widget->objs, l, mwo)
964 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
968 if (mb->flick_data) e_mod_move_flick_data_free(mb);
969 _e_mod_move_indicator_widget_apptray_move_set(indi_widget, EINA_FALSE);
970 _e_mod_move_indicator_widget_quickpanel_move_set(indi_widget, EINA_FALSE);
976 _e_mod_move_indicator_widget_obj_event_setup(E_Move_Indicator_Widget *indicator_widget,
977 E_Move_Widget_Object *mwo)
979 E_CHECK(indicator_widget);
982 mwo->event = e_mod_move_event_new(indicator_widget->win, mwo->obj);
985 e_mod_move_event_data_type_set(mwo->event, E_MOVE_EVENT_DATA_TYPE_WIDGET_INDICATOR);
986 e_mod_move_event_angle_cb_set(mwo->event,
987 e_mod_move_util_win_prop_angle_get);
988 e_mod_move_event_cb_set(mwo->event, E_MOVE_EVENT_TYPE_MOTION_START,
989 _e_mod_move_indicator_widget_cb_motion_start,
991 e_mod_move_event_cb_set(mwo->event, E_MOVE_EVENT_TYPE_MOTION_MOVE,
992 _e_mod_move_indicator_widget_cb_motion_move,
994 e_mod_move_event_cb_set(mwo->event, E_MOVE_EVENT_TYPE_MOTION_END,
995 _e_mod_move_indicator_widget_cb_motion_end,
997 e_mod_move_event_win_find_cb_set(mwo->event,
998 _e_mod_move_indicator_widget_event_win_find);
999 e_mod_move_event_propagate_type_set(mwo->event,
1000 E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY);
1004 _e_mod_move_indicator_widget_scrollable_object_movable_check(E_Move_Border *mb, Evas_Point pos)
1007 int val1 = 0, val2 = 0;
1008 double threshold = 0.2; // 20 %
1009 Eina_Bool ret = EINA_FALSE;
1010 int sx = 0, sy = 0, ex = 0, ey = 0;
1011 double st = 0.0, et = 0.0;
1013 m = e_mod_move_util_get();
1014 E_CHECK_RETURN(m, EINA_FALSE);
1016 if (!e_mod_move_flick_data_get(mb, &sx, &sy, &ex, &ey, &st, &et))
1023 val2 = m->indicator_widget_geometry[E_MOVE_ANGLE_90].w;
1027 val2 = m->indicator_widget_geometry[E_MOVE_ANGLE_180].h;
1031 val2 = m->indicator_widget_geometry[E_MOVE_ANGLE_270].w;
1036 val2 = m->indicator_widget_geometry[E_MOVE_ANGLE_0].h;
1040 if ((val1 / val2) > threshold) ret = EINA_TRUE;
1046 _e_mod_move_indicator_widget_target_window_find_by_pointer(Ecore_X_Window *win,
1051 E_Move_Border *find_mb = NULL;
1052 Eina_Bool found = EINA_FALSE;
1053 Eina_Bool ret = EINA_FALSE;
1054 Ecore_X_Window noti_win = 0;
1055 Eina_Bool noti_win_saved = EINA_FALSE;
1057 E_CHECK_RETURN(win, EINA_FALSE);
1058 m = e_mod_move_util_get();
1059 E_CHECK_RETURN(m, EINA_FALSE);
1061 EINA_INLIST_REVERSE_FOREACH(m->borders, find_mb)
1063 if (!find_mb->bd) continue;
1065 // finding visible border
1066 if (!find_mb->visible) continue;
1068 // finding pointed border
1069 if (!E_INSIDE(x, y, find_mb->bd->x, find_mb->bd->y,
1070 find_mb->bd->w, find_mb->bd->h))
1073 // if notification , alpha, and indicator_state_none then search again below.
1074 if (TYPE_NOTIFICATION_CHECK(find_mb)
1076 && (find_mb->indicator_state == E_MOVE_INDICATOR_STATE_NONE))
1078 if (!noti_win_saved)
1080 noti_win = find_mb->bd->client.win;
1081 noti_win_saved = EINA_TRUE;
1095 && (find_mb->indicator_state == E_MOVE_INDICATOR_STATE_ON))
1097 *win = find_mb->bd->client.win;
1109 *win = find_mb->bd->client.win;
1118 static Ecore_X_Window
1119 _e_mod_move_indicator_widget_event_win_find(void *event_info)
1121 E_Move_Event_Motion_Info *info = NULL;
1122 E_Border *find_bd = NULL;
1123 Ecore_X_Window win = 0, res_win = 0;
1124 info = (E_Move_Event_Motion_Info *)event_info;
1126 E_CHECK_RETURN(info, 0);
1128 find_bd = e_mod_move_util_border_find_by_pointer(info->coord.x, info->coord.y);
1130 if (_e_mod_move_indicator_widget_target_window_find_by_pointer(&win,
1138 "[MOVE] ev:%15.15s INDICATOR_WIDGET_EVENT_WIN_FIND w:0x%08x (%4d,%4d)\n",
1139 "EVAS_OBJ", res_win, info->coord.x, info->coord.y);
1145 _e_mod_move_indicator_widget_target_window_policy_check(E_Move_Border *mb)
1147 E_Move *m = e_mod_move_util_get();
1148 E_Zone *zone = NULL;
1149 Eina_Bool ret = EINA_FALSE;
1150 E_Border *bd = NULL;
1152 E_CHECK_RETURN(m, EINA_FALSE);
1153 E_CHECK_RETURN(mb, EINA_FALSE);
1156 E_CHECK_RETURN(bd, EINA_FALSE);
1158 E_CHECK_RETURN(zone, EINA_FALSE);
1160 if (REGION_EQUAL_TO_ZONE(mb, zone) // check fullscreen
1161 && (zone->id == 0) // change zone->id comparing to bd's profile property (mobile)
1162 && (mb->indicator_state == E_MOVE_INDICATOR_STATE_ON)
1163 && (mb->indicator_type == E_MOVE_INDICATOR_TYPE_1))
1172 _e_mod_move_indicator_widget_event_send_policy_check(E_Move_Indicator_Widget *indi_widget,
1175 int x = 0, y = 0, w = 0, h = 0;
1176 Eina_Bool ret = EINA_FALSE;
1178 E_CHECK_RETURN(indi_widget, EINA_FALSE);
1180 e_mod_move_widget_objs_geometry_get(indi_widget->objs, &x ,&y, &w, &h);
1182 if (E_INSIDE(pos.x, pos.y, x, y, w, h)) ret = EINA_TRUE;
1187 /* externally accessible functions */
1189 /* set current indicator widget */
1191 e_mod_move_indicator_widget_set(E_Move_Indicator_Widget *indi_widget)
1195 m = e_mod_move_util_get();
1198 if (m->indicator_widget)
1200 e_mod_move_indicator_widget_del(m->indicator_widget);
1203 m->indicator_widget = indi_widget;
1206 /* get current indicator widget */
1207 EINTERN E_Move_Indicator_Widget *
1208 e_mod_move_indicator_widget_get(void)
1211 m = e_mod_move_util_get();
1212 E_CHECK_RETURN(m, NULL);
1214 return m->indicator_widget;
1217 /* find indicator widget target window */
1219 e_mod_move_indicator_widget_target_window_find(Ecore_X_Window *win)
1222 E_Move_Border *find_mb = NULL;
1223 Eina_Bool found = EINA_FALSE;
1224 E_Zone *zone = NULL;
1225 Eina_Bool ret = EINA_FALSE;
1227 E_CHECK_RETURN(win, EINA_FALSE);
1228 m = e_mod_move_util_get();
1229 E_CHECK_RETURN(m, EINA_FALSE);
1232 EINA_INLIST_REVERSE_FOREACH(m->borders, find_mb)
1234 if (!find_mb->bd) continue;
1235 // the first OnScreen & FullScreen Window
1236 zone = find_mb->bd->zone;
1237 if (find_mb->visible
1238 && REGION_EQUAL_TO_ZONE(find_mb, zone) // check fullscreen
1239 && (zone->id == 0)) // change zone->id comparing to bd's profile property (mobile)
1247 // && (find_mb->indicator_state == E_MOVE_INDICATOR_STATE_ON)
1248 // && (find_mb->indicator_type == E_MOVE_INDICATOR_TYPE_1)
1249 // && !(TYPE_INDICATOR_CHECK(find_mb))
1250 && !(TYPE_APPTRAY_CHECK(find_mb))
1251 && !(TYPE_QUICKPANEL_CHECK(find_mb)))
1253 *win = find_mb->bd->client.win;
1260 /* find indicator widget's target window and apply indicator widget control */
1262 e_mod_move_indicator_widget_apply(void)
1265 E_Move_Indicator_Widget *indi_widget = NULL;
1266 Ecore_X_Window target_win;
1267 E_Move_Border *target_mb = NULL;
1269 m = e_mod_move_util_get();
1271 if (m->screen_reader_state) return;
1273 if (e_mod_move_indicator_widget_target_window_find(&target_win))
1275 target_mb = e_mod_move_border_client_find(target_win);
1276 // if previous indicator widget is created
1277 if ((indi_widget = e_mod_move_indicator_widget_get()))
1279 // if current indicator widget's win is equal to finded win
1280 // then just return.
1281 if ((indi_widget->win == target_win)) return;
1284 // if current indicator widget's win is not equal to finded win
1285 // then del previous indicator_widget and add new indicator widget.
1286 e_mod_move_indicator_widget_del(indi_widget);
1287 e_mod_move_indicator_widget_set(e_mod_move_indicator_widget_add(target_win));
1288 if (!TYPE_NOTIFICATION_CHECK(target_mb))
1289 e_mod_move_util_prop_active_indicator_win_set(target_win, m);
1294 //if previous indicator widget is not creagted
1295 //then add new indicator widget.
1296 e_mod_move_indicator_widget_set(e_mod_move_indicator_widget_add(target_win));
1297 if (!TYPE_NOTIFICATION_CHECK(target_mb))
1298 e_mod_move_util_prop_active_indicator_win_set(target_win, m);
1303 // if current window does not require indicator widget
1304 // and previous indicator widget is created,
1305 // then del previous indicator_widget
1306 if ((indi_widget = e_mod_move_indicator_widget_get()))
1308 e_mod_move_indicator_widget_del(indi_widget);
1309 e_mod_move_indicator_widget_set(NULL);
1314 /* create E_Move_Border related Indicator_Widget */
1315 EINTERN E_Move_Indicator_Widget *
1316 e_mod_move_indicator_widget_add(Ecore_X_Window win)
1319 E_Move_Border *mb = NULL;
1320 E_Move_Indicator_Widget *indi_widget = NULL;
1321 E_Move_Widget_Object *mwo = NULL;
1328 m = e_mod_move_util_get();
1329 E_CHECK_RETURN(m, EINA_FALSE);
1331 mb = e_mod_move_border_client_find(win);
1332 E_CHECK_RETURN(mb, NULL);
1334 indi_widget = E_NEW(E_Move_Indicator_Widget, 1);
1335 E_CHECK_RETURN(indi_widget, NULL);
1337 indi_widget->win = win;
1338 indi_widget->objs = e_mod_move_widget_objs_add(m);
1339 if (indi_widget->objs)
1344 x = m->indicator_widget_geometry[E_MOVE_ANGLE_90].x;
1345 y = m->indicator_widget_geometry[E_MOVE_ANGLE_90].y;
1346 w = m->indicator_widget_geometry[E_MOVE_ANGLE_90].w;
1347 h = m->indicator_widget_geometry[E_MOVE_ANGLE_90].h;
1350 x = m->indicator_widget_geometry[E_MOVE_ANGLE_180].x;
1351 y = m->indicator_widget_geometry[E_MOVE_ANGLE_180].y;
1352 w = m->indicator_widget_geometry[E_MOVE_ANGLE_180].w;
1353 h = m->indicator_widget_geometry[E_MOVE_ANGLE_180].h;
1356 x = m->indicator_widget_geometry[E_MOVE_ANGLE_270].x;
1357 y = m->indicator_widget_geometry[E_MOVE_ANGLE_270].y;
1358 w = m->indicator_widget_geometry[E_MOVE_ANGLE_270].w;
1359 h = m->indicator_widget_geometry[E_MOVE_ANGLE_270].h;
1363 x = m->indicator_widget_geometry[E_MOVE_ANGLE_0].x;
1364 y = m->indicator_widget_geometry[E_MOVE_ANGLE_0].y;
1365 w = m->indicator_widget_geometry[E_MOVE_ANGLE_0].w;
1366 h = m->indicator_widget_geometry[E_MOVE_ANGLE_0].h;
1369 e_mod_move_widget_objs_move(indi_widget->objs, x, y);
1370 e_mod_move_widget_objs_resize(indi_widget->objs, w, h);
1371 e_mod_move_widget_objs_layer_set(indi_widget->objs, EVAS_LAYER_MAX);
1372 e_mod_move_widget_objs_color_set(indi_widget->objs, 0, 0, 0, 0);
1373 e_mod_move_widget_objs_show(indi_widget->objs);
1374 e_mod_move_widget_objs_raise(indi_widget->objs);
1376 // Set Input Shape Mask
1377 if ((indi_widget->input_region_id = e_manager_comp_input_region_id_new(m->man)))
1379 e_manager_comp_input_region_id_set(m->man,
1380 indi_widget->input_region_id,
1391 // Set Event Handler
1392 EINA_LIST_FOREACH(indi_widget->objs, l, mwo)
1395 _e_mod_move_indicator_widget_obj_event_setup(indi_widget, mwo);
1400 if (indi_widget->objs) e_mod_move_widget_objs_del(indi_widget->objs);
1401 memset(indi_widget, 0, sizeof(E_Move_Indicator_Widget));
1402 E_FREE(indi_widget);
1406 /* delete indicator_widget */
1408 e_mod_move_indicator_widget_del(E_Move_Indicator_Widget *indi_widget)
1411 E_Move_Border *mb = NULL;
1412 E_Move_Border *at_mb = NULL;
1413 E_Move_Border *qp_mb = NULL;
1414 E_Zone *zone = NULL;
1415 int x = 0; int y = 0;
1416 int mx = 0, my = 0, ax = 0, ay = 0;
1418 E_CHECK(indi_widget);
1419 m = e_mod_move_util_get();
1421 if (e_mod_move_indicator_widget_click_get(indi_widget))
1422 ecore_x_mouse_up_send(indi_widget->win,
1427 if ((mb = e_mod_move_border_client_find(indi_widget->win)))
1429 if (indi_widget->input_region_id)
1430 e_manager_comp_input_region_id_del(m->man, indi_widget->input_region_id);
1432 // if indicaor widget is deleted, then apptray or quickpanel's mirror object hide with animation
1433 if (indi_widget->quickpanel_move)
1435 qp_mb = e_mod_move_quickpanel_find();
1436 E_CHECK_GOTO(qp_mb, error_cleanup);
1437 zone = qp_mb->bd->zone;
1442 mx = qp_mb->w * -1; my = 0;
1443 if (m->qp_scroll_with_clipping)
1445 ax = zone->x; ay = zone->y;
1453 mx = 0; my = zone->h;
1454 if (m->qp_scroll_with_clipping)
1456 ax = zone->x + qp_mb->w;
1457 ay = zone->y + qp_mb->h;
1465 mx = zone->w; my = 0;
1466 if (m->qp_scroll_with_clipping)
1468 ax = zone->x + qp_mb->w;
1469 ay = zone->y + qp_mb->h;
1478 mx = 0; my = qp_mb->h * -1;
1479 if (m->qp_scroll_with_clipping)
1481 ax = zone->x; ay = zone->y;
1490 if (e_mod_move_quickpanel_objs_animation_state_get(qp_mb))
1492 e_mod_move_quickpanel_objs_animation_stop(qp_mb);
1493 e_mod_move_quickpanel_objs_animation_clear(qp_mb);
1495 e_mod_move_quickpanel_objs_add(qp_mb);
1496 e_mod_move_quickpanel_e_border_move(qp_mb, mx, my);
1497 e_mod_move_quickpanel_objs_animation_move(qp_mb, ax, ay);
1499 "[MOVE] ev:%15.15s Indicator Widget Deleted: Hide QuickPanel %s():%d\n",
1500 "EVAS_OBJ", __func__, __LINE__);
1503 if (indi_widget->apptray_move)
1505 at_mb = e_mod_move_apptray_find();
1506 E_CHECK_GOTO(at_mb, error_cleanup);
1507 zone = at_mb->bd->zone;
1532 if (e_mod_move_apptray_objs_animation_state_get(at_mb))
1534 e_mod_move_apptray_objs_animation_stop(at_mb);
1535 e_mod_move_apptray_objs_animation_clear(at_mb);
1537 e_mod_move_apptray_objs_add(at_mb);
1539 // apptray_objs_animation_layer_set
1540 e_mod_move_apptray_objs_animation_layer_set(at_mb);
1542 e_mod_move_apptray_e_border_move(at_mb, x, y);
1543 e_mod_move_apptray_objs_animation_move(at_mb, x, y);
1545 "[MOVE] ev:%15.15s Indicator Widget Deleted: Hide Apptray %s():%d\n",
1546 "EVAS_OBJ", __func__, __LINE__);
1551 if (indi_widget->objs) e_mod_move_widget_objs_del(indi_widget->objs);
1552 memset(indi_widget, 0, sizeof(E_Move_Indicator_Widget));
1553 E_FREE(indi_widget);
1554 if (m) m->indicator_widget = NULL;
1558 e_mod_move_indicator_widget_angle_change(Ecore_X_Window win)
1561 E_Move_Indicator_Widget *indi_widget = NULL;
1562 Eina_Bool ret = EINA_FALSE;
1563 E_Move_Border *mb = NULL;
1569 m = e_mod_move_util_get();
1570 E_CHECK_RETURN(m, EINA_FALSE);
1572 indi_widget = e_mod_move_indicator_widget_get();
1573 E_CHECK_RETURN(indi_widget, EINA_FALSE);
1575 if ((indi_widget->win == win))
1577 if ((mb = e_mod_move_border_client_find(win)))
1582 x = m->indicator_widget_geometry[E_MOVE_ANGLE_90].x;
1583 y = m->indicator_widget_geometry[E_MOVE_ANGLE_90].y;
1584 w = m->indicator_widget_geometry[E_MOVE_ANGLE_90].w;
1585 h = m->indicator_widget_geometry[E_MOVE_ANGLE_90].h;
1588 x = m->indicator_widget_geometry[E_MOVE_ANGLE_180].x;
1589 y = m->indicator_widget_geometry[E_MOVE_ANGLE_180].y;
1590 w = m->indicator_widget_geometry[E_MOVE_ANGLE_180].w;
1591 h = m->indicator_widget_geometry[E_MOVE_ANGLE_180].h;
1594 x = m->indicator_widget_geometry[E_MOVE_ANGLE_270].x;
1595 y = m->indicator_widget_geometry[E_MOVE_ANGLE_270].y;
1596 w = m->indicator_widget_geometry[E_MOVE_ANGLE_270].w;
1597 h = m->indicator_widget_geometry[E_MOVE_ANGLE_270].h;
1601 x = m->indicator_widget_geometry[E_MOVE_ANGLE_0].x;
1602 y = m->indicator_widget_geometry[E_MOVE_ANGLE_0].y;
1603 w = m->indicator_widget_geometry[E_MOVE_ANGLE_0].w;
1604 h = m->indicator_widget_geometry[E_MOVE_ANGLE_0].h;
1607 e_mod_move_widget_objs_move(indi_widget->objs, x, y);
1608 e_mod_move_widget_objs_resize(indi_widget->objs, w, h);
1610 //change Input Shape Mask
1611 if (indi_widget->input_region_id)
1613 e_manager_comp_input_region_id_set(m->man,
1614 indi_widget->input_region_id,
1624 e_mod_move_indicator_widget_scrollable_check(void)
1626 E_Move_Border *lockscr_mb = NULL;
1627 E_Move_Border *taskmgr_mb = NULL;
1628 E_Move_Border *pwlock_mb = NULL;
1630 // if lockscreen is exist & visible, then do not show apptray & quickpanel
1631 if ((lockscr_mb = e_mod_move_lockscreen_find()))
1633 if (lockscr_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE)
1636 "[MOVE] ev:%15.15s %s %s()\n",
1637 "EVAS_OBJ","Lockscreen is exist.", __func__);
1641 // if taskmanage is exist & visible, then do not show apptray & quickpanel
1642 if ((taskmgr_mb = e_mod_move_taskmanager_find()))
1644 if (taskmgr_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE)
1647 "[MOVE] ev:%15.15s %s %s()\n",
1648 "EVAS_OBJ","TaskManager is exist.", __func__);
1653 // if pwlock is exist & visible, then do not show apptray & quickpanel
1654 if ((pwlock_mb = e_mod_move_pwlock_find()))
1656 if (pwlock_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE)
1659 "[MOVE] ev:%15.15s %s %s()\n",
1660 "EVAS_OBJ","PWLOCK is exist.", __func__);
1669 e_mod_move_indicator_widget_click_get(E_Move_Indicator_Widget* indi_widget)
1671 Eina_Bool click = EINA_FALSE;
1672 E_Move_Widget_Object *mwo = NULL;
1675 E_CHECK_RETURN(indi_widget, EINA_FALSE);
1676 E_CHECK_RETURN(indi_widget->objs, EINA_FALSE);
1678 EINA_LIST_FOREACH(indi_widget->objs, l, mwo)
1681 click = e_mod_move_event_click_get(mwo->event);
1688 e_mod_move_indicator_widget_event_clear(E_Move_Indicator_Widget* indi_widget)
1690 Eina_Bool click = EINA_FALSE;
1691 E_Move_Widget_Object *mwo = NULL;
1693 E_Move_Border *mb = NULL;
1695 E_CHECK_RETURN(indi_widget, EINA_FALSE);
1696 E_CHECK_RETURN(indi_widget->objs, EINA_FALSE);
1698 click = e_mod_move_indicator_widget_click_get(indi_widget);
1699 E_CHECK_RETURN(click, EINA_FALSE);
1701 EINA_LIST_FOREACH(indi_widget->objs, l, mwo)
1704 e_mod_move_event_data_clear(mwo->event);
1705 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
1708 _e_mod_move_indicator_widget_apptray_move_set(indi_widget, EINA_FALSE);
1709 _e_mod_move_indicator_widget_quickpanel_move_set(indi_widget, EINA_FALSE);
1711 mb = e_mod_move_border_client_find(indi_widget->win);
1712 if (mb && mb->flick_data) e_mod_move_flick_data_free(mb);
1717 e_mod_move_indicator_widget_state_change(Ecore_X_Window win, Eina_Bool state)
1719 E_Move_Indicator_Widget *indi_widget = NULL;
1720 E_Move_Border *mb = NULL;
1722 if ((indi_widget = e_mod_move_indicator_widget_get()))
1724 if ((indi_widget->win == win)
1727 // indicator state disable -> delete current indicator widget
1728 e_mod_move_indicator_widget_del(indi_widget);
1729 e_mod_move_indicator_widget_set(NULL);
1734 mb = e_mod_move_border_client_find(win);
1736 && (mb->indicator_type == E_MOVE_INDICATOR_TYPE_1)
1738 e_mod_move_indicator_widget_apply();
1745 e_mod_move_indicator_widget_type_change(Ecore_X_Window win, E_Move_Indicator_Type type)
1747 E_Move_Indicator_Widget *indi_widget = NULL;
1748 E_Move_Border *mb = NULL;
1750 if ((indi_widget = e_mod_move_indicator_widget_get()))
1752 if ((indi_widget->win == win)
1753 && (type != E_MOVE_INDICATOR_TYPE_1))
1755 // indicator type is not type_1 -> delete current indicator widget
1756 e_mod_move_indicator_widget_del(indi_widget);
1757 e_mod_move_indicator_widget_set(NULL);
1760 e_mod_move_indicator_widget_apply();
1766 mb = e_mod_move_border_client_find(win);
1768 && (mb->indicator_state == E_MOVE_INDICATOR_STATE_ON)
1769 && (type == E_MOVE_INDICATOR_TYPE_1))
1770 e_mod_move_indicator_widget_apply();
1777 e_mod_move_indicator_widget_angle_change_post_job(void)
1779 E_Move_Indicator_Widget *indi_widget = NULL;
1780 E_Move_Border *mb = NULL;
1781 E_Border *bd = NULL;
1782 E_Zone *zone = NULL;
1786 indi_widget = e_mod_move_indicator_widget_get();
1787 E_CHECK_RETURN(indi_widget, EINA_FALSE);
1789 mb = e_mod_move_border_client_find(indi_widget->win);
1790 E_CHECK_RETURN(mb, EINA_FALSE);
1793 E_CHECK_RETURN(bd, EINA_FALSE);
1796 E_CHECK_RETURN(zone, EINA_FALSE);
1800 if (e_mod_move_indicator_widget_click_get(indi_widget))
1813 x = zone->x + zone->w;
1814 y = zone->y + zone->h;
1817 x = zone->x + zone->w;
1818 y = zone->y + zone->h;
1826 e_mod_move_flick_data_init(mb, x, y);