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_mini_apptray_widget_mini_apptray_move_set(E_Move_Mini_Apptray_Widget *mini_apptray_widget, Eina_Bool state);
7 static Eina_Bool _e_mod_move_mini_apptray_widget_mini_apptray_move_get(E_Move_Mini_Apptray_Widget *mini_apptray_widget);
8 static Eina_Bool _e_mod_move_mini_apptray_widget_cb_motion_start_internal_mini_apptray_check(E_Move_Border *mini_apptray_mb);
9 static Eina_Bool _e_mod_move_mini_apptray_widget_mini_apptray_flick_process(E_Move_Mini_Apptray_Widget *mini_apptray_widget, E_Move_Border *mb2, int angle, Eina_Bool state);
10 static Eina_Bool _e_mod_move_mini_apptray_widget_cb_motion_start(void *data, void *event_info);
11 static Eina_Bool _e_mod_move_mini_apptray_widget_cb_motion_move(void *data, void *event_info);
12 static Eina_Bool _e_mod_move_mini_apptray_widget_cb_motion_end(void *data, void *event_info);
13 static Ecore_X_Window _e_mod_move_mini_apptray_event_win_find(void *event_info);
14 static void _e_mod_move_mini_apptray_widget_obj_event_setup(E_Move_Mini_Apptray_Widget *mini_apptray_widget, E_Move_Widget_Object *mwo);
15 static Eina_Bool _e_mod_move_mini_apptray_widget_event_send_policy_check(E_Move_Mini_Apptray_Widget *mini_apptray_widget, Evas_Point pos);
17 /* local subsystem functions */
19 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(E_Move_Mini_Apptray_Widget *mini_apptray_widget,
22 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
23 mini_apptray_widget->mini_apptray_move = state;
28 _e_mod_move_mini_apptray_widget_mini_apptray_move_get(E_Move_Mini_Apptray_Widget *mini_apptray_widget)
30 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
31 return mini_apptray_widget->mini_apptray_move;
35 _e_mod_move_mini_apptray_widget_cb_motion_start_internal_mini_apptray_check(E_Move_Border *mini_apptray_mb)
38 E_Move_Border *find_mb = NULL;
39 E_Move_Border *qp_mb = NULL;
40 Eina_Bool found = EINA_FALSE;
41 m = e_mod_move_util_get();
43 E_CHECK_RETURN(m, EINA_FALSE);
44 E_CHECK_RETURN(mini_apptray_mb, EINA_FALSE);
45 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mini_apptray_mb), EINA_FALSE);
46 E_CHECK_RETURN(mini_apptray_mb->visible, EINA_FALSE);
47 E_CHECK_RETURN(e_mod_move_util_compositor_object_visible_get(mini_apptray_mb),
49 if (e_mod_move_mini_apptray_objs_animation_state_get(mini_apptray_mb)) return EINA_FALSE;
51 qp_mb = e_mod_move_quickpanel_find();
52 if (e_mod_move_quickpanel_objs_animation_state_get(qp_mb)) return EINA_FALSE;
54 // Mini app-tray is under rotation state.
55 // I think there is another exception case.
56 // It's posible that WM doesn't send rotation change request yet.
57 // In this case the value of wait_for_done is zero,
58 // it means quickpanel isn't rotating for now, but going to be rotated.
59 if (mini_apptray_mb->bd)
60 if (mini_apptray_mb->bd->client.e.state.rot.wait_for_done) return EINA_FALSE;
62 // check if notification window is on-screen.
63 EINA_INLIST_REVERSE_FOREACH(m->borders, find_mb)
65 if (TYPE_INDICATOR_CHECK(find_mb)) continue;
66 if ((find_mb->visible) &&
67 (mini_apptray_mb->bd) &&
68 (REGION_INTERSECTS_WITH_ZONE(find_mb, mini_apptray_mb->bd->zone)))
76 && (find_mb->bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NOTIFICATION)
77 && REGION_EQUAL_TO_ZONE(find_mb, find_mb->bd->zone))
81 // check if notification window is on-screen.
83 e_mod_move_mini_apptray_dim_show(mini_apptray_mb);
85 if (REGION_INSIDE_ZONE(mini_apptray_mb, mini_apptray_mb->bd->zone))
86 e_mod_move_mini_apptray_objs_add_with_pos(mini_apptray_mb, -10000, -10000);
88 e_mod_move_mini_apptray_objs_add(mini_apptray_mb);
94 _e_mod_move_mini_apptray_widget_mini_apptray_flick_process(E_Move_Mini_Apptray_Widget *mini_apptray_widget,
95 E_Move_Border *mb2, // mb2 : mini_apptray
99 E_Move_Border *mb = NULL;
100 E_Move_Widget_Object *mwo = NULL;
106 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
107 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
108 E_CHECK_RETURN(mb, EINA_FALSE);
109 E_CHECK_RETURN(mb2, EINA_FALSE);
110 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb2), EINA_FALSE);
111 E_CHECK_RETURN(state, EINA_FALSE);
115 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo) // widget click unset
118 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
121 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_FALSE);
124 if (mb->flick_data) e_mod_move_flick_data_free(mb);
129 x = zone->w - mb2->w;
143 y = zone->h - mb2->h;
147 e_mod_move_mini_apptray_e_border_move(mb2, x, y);
148 e_mod_move_mini_apptray_objs_animation_move(mb2, x, y);
154 _e_mod_move_mini_apptray_widget_cb_motion_start(void *data,
158 E_Move_Mini_Apptray_Widget *mini_apptray_widget = (E_Move_Mini_Apptray_Widget *)data;
160 E_Move_Border *mb = NULL;
161 E_Move_Border *mini_apptray_mb = NULL;
162 E_Move_Event_Motion_Info *info;
163 E_Move_Widget_Object *mwo = NULL;
164 Evas_Event_Mouse_Down *mouse_down_event = NULL;
165 Eina_Bool clicked = EINA_FALSE;
167 E_Move_Border *ev_mb = NULL;
168 Ecore_X_Window ev_win = 0;
170 info = (E_Move_Event_Motion_Info *)event_info;
171 m = e_mod_move_util_get();
173 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
175 // clicked window indicator policy check
176 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
179 ev_win = e_mod_move_event_win_get(mwo->event);
181 ev_mb = e_mod_move_border_client_find(ev_win);
182 // Check Mini Apptray State ( property )
184 && (ev_mb->mini_apptray_state == E_MOVE_MINI_APPTRAY_STATE_OFF))
187 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
188 if (!m || !mb || !mini_apptray_widget || !info) return EINA_FALSE;
190 mouse_down_event = info->event_info;
191 E_CHECK_RETURN(mouse_down_event, EINA_FALSE);
192 if (mouse_down_event->button != 1)
195 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
198 clicked = e_mod_move_event_click_get(mwo->event);
204 "[MOVE] ev:%15.15s w:0x%08x MINI_APPTRAY_WIDGET_MOTION_START (%4d,%4d)\n",
205 "EVAS_OBJ", mb->bd->win,
206 info->coord.x, info->coord.y);
208 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_FALSE);
210 /* check if apptray exists on the current zone */
211 mini_apptray_mb = e_mod_move_mini_apptray_find();
212 if ((mini_apptray_mb) &&
213 (mini_apptray_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE))
216 "[MOVE] ev:%15.15s w:0x%08x MINI_APPTRAY_WIDGET_MOTION_START %s\n",
217 "EVAS_OBJ", mb->bd->win,
218 "mini_apptray exists. return.");
222 if ((mini_apptray_mb) &&
223 (REGION_INSIDE_ZONE(mini_apptray_mb, mb->bd->zone)))
225 e_mod_move_mini_apptray_e_border_move(mini_apptray_mb, -10000, -10000);
228 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
231 e_mod_move_event_click_set(mwo->event, EINA_TRUE);
234 E_CHECK_GOTO(e_mod_move_flick_data_new(mb), error_cleanup);
235 e_mod_move_flick_data_init(mb, info->coord.x, info->coord.y);
237 if (!_e_mod_move_mini_apptray_widget_cb_motion_start_internal_mini_apptray_check(mini_apptray_mb))
242 //e_mod_move_mini_apptray_e_border_raise(mini_apptray_mb);
243 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_TRUE);
244 e_mod_move_mini_apptray_objs_animation_start_position_set(mini_apptray_mb,
246 // send mini_apptray to "move start message".
247 e_mod_move_mini_apptray_anim_state_send(mini_apptray_mb, EINA_TRUE);
249 mini_apptray_widget->pos = info->coord; // save mouse click position
255 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
258 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
261 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_FALSE);
268 _e_mod_move_mini_apptray_widget_cb_motion_move(void *data,
272 E_Move_Mini_Apptray_Widget *mini_apptray_widget = (E_Move_Mini_Apptray_Widget *)data;
273 E_Move_Border *mb = NULL;
274 E_Move_Event_Motion_Info *info;
275 E_Move_Widget_Object *mwo = NULL;
278 Eina_Bool click = EINA_FALSE;
280 Eina_Bool flick_state = EINA_FALSE;
281 E_Move_Border *mini_apptray_mb = NULL;
283 info = (E_Move_Event_Motion_Info *)event_info;
284 m = e_mod_move_util_get();
286 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
287 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
289 if (!m || !mb || !info) return EINA_FALSE;
292 "[MOVE] ev:%15.15s w:0x%08x MINI_APPTRAY_WIDGET_MOTION_MOVE a:%d (%4d,%4d)\n",
293 "EVAS_OBJ", mb->bd->win, mb->angle,
294 info->coord.x, info->coord.y);
299 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
302 click = e_mod_move_event_click_get(mwo->event);
304 E_CHECK_RETURN(click, EINA_FALSE);
306 // do not work on moving just work on flick action
307 e_mod_move_flick_data_update(mb, info->coord.x, info->coord.y);
308 flick_state = e_mod_move_flick_state_get2(mb);
310 if (_e_mod_move_mini_apptray_widget_mini_apptray_move_get(mini_apptray_widget))
312 mini_apptray_mb = e_mod_move_mini_apptray_find();
314 if (_e_mod_move_mini_apptray_widget_mini_apptray_flick_process(mini_apptray_widget,
323 if (_e_mod_move_mini_apptray_widget_mini_apptray_move_get(mini_apptray_widget))
325 mini_apptray_mb = e_mod_move_mini_apptray_find();
326 E_CHECK_RETURN(mini_apptray_mb, EINA_FALSE);
327 // change later for flick_up
328 // todo flick up geometry
332 if (info->coord.y > (zone->h - mini_apptray_mb->h))
335 need_move = EINA_TRUE;
339 if (info->coord.x > (zone->w - mini_apptray_mb->w))
342 need_move = EINA_TRUE;
346 if (info->coord.y < mini_apptray_mb->h)
348 y = info->coord.y - mini_apptray_mb->h;
349 need_move = EINA_TRUE;
353 if (info->coord.x < mini_apptray_mb->w)
355 x = info->coord.x - mini_apptray_mb->w;
356 need_move = EINA_TRUE;
363 e_mod_move_mini_apptray_objs_move(mini_apptray_mb, x, y);
366 mini_apptray_widget->pos = info->coord; // save mouse move position
373 _e_mod_move_mini_apptray_widget_cb_motion_end(void *data,
377 E_Move_Mini_Apptray_Widget *mini_apptray_widget = (E_Move_Mini_Apptray_Widget *)data;
378 E_Move_Border *mb = NULL;
379 E_Move_Border *mini_apptray_mb = NULL;
380 E_Move_Event_Motion_Info *info;
381 E_Move_Widget_Object *mwo = NULL;
384 Evas_Event_Mouse_Up *mouse_up_event;
385 Eina_Bool click = EINA_FALSE;
386 Eina_Bool flick_state = EINA_FALSE;
388 Ecore_X_Window ev_win = 0;
390 info = (E_Move_Event_Motion_Info *)event_info;
391 m = e_mod_move_util_get();
393 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
394 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
396 if (!m || !mb || !info) return EINA_FALSE;
398 mouse_up_event = info->event_info;
399 E_CHECK_RETURN(mouse_up_event, EINA_FALSE);
400 if (mouse_up_event->button != 1)
404 "[MOVE] ev:%15.15s w:0x%08x ,angle:%d, (%d,%d) %s()\n",
405 "EVAS_OBJ", mb->bd->win, mb->angle, info->coord.x, info->coord.y,
411 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
414 click = e_mod_move_event_click_get(mwo->event);
416 E_CHECK_GOTO(click, error_cleanup);
418 e_mod_move_flick_data_update(mb, info->coord.x, info->coord.y);
419 flick_state = e_mod_move_flick_state_get2(mb);
421 if (_e_mod_move_mini_apptray_widget_mini_apptray_move_get(mini_apptray_widget))
423 mini_apptray_mb = e_mod_move_mini_apptray_find();
425 if (_e_mod_move_mini_apptray_widget_mini_apptray_flick_process(mini_apptray_widget,
433 // if mini_apptray animation is not called, must destory datas explicit
436 e_border_focus_set(mini_apptray_mb ->bd, 0, 0);
437 e_mod_move_mini_apptray_dim_hide(mini_apptray_mb );
438 e_mod_move_mini_apptray_objs_del(mini_apptray_mb );
442 // just work on flick action. so. currently block.
453 check_h = mini_apptray_mb->h;
454 if (check_h) check_h /= 2;
455 if (info->coord.y > (zone->h - check_h))
462 my = zone->h - mini_apptray_mb->h;
470 check_w = mini_apptray_mb->w;
471 if (check_w) check_w /= 2;
472 if (info->coord.x > (zone->w - check_w))
479 mx = zone->w - mini_apptray_mb->w;
487 check_h = mini_apptray_mb->h;
488 if (check_h) check_h /= 2;
489 if (info->coord.y < check_h)
491 my = mini_apptray_mb->h * -1;
499 check_w = mini_apptray_mb->w;
500 if (check_w) check_w /= 2;
501 if (info->coord.x < check_w)
503 mx = mini_apptray_mb->w * -1;
514 e_mod_move_mini_apptray_e_border_move(mini_apptray_mb, mx, my);
515 e_mod_move_mini_apptray_objs_animation_move(mini_apptray_mb, ax, ay);
519 // if flick check fail then, redirect event
520 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
523 ev_win = e_mod_move_event_win_get(mwo->event);
528 e_mod_move_mouse_event_send(ev_win, E_MOVE_MOUSE_EVENT_MOVE, mini_apptray_widget->pos);
529 e_mod_move_mouse_event_send(ev_win, E_MOVE_MOUSE_EVENT_DOWN, mini_apptray_widget->pos);
530 e_mod_move_mouse_event_send(ev_win, E_MOVE_MOUSE_EVENT_MOVE, info->coord);
531 e_mod_move_mouse_event_send(ev_win, E_MOVE_MOUSE_EVENT_UP, info->coord);
534 mini_apptray_widget->pos = info->coord; // save mouse up position
536 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
539 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
543 if (mb->flick_data) e_mod_move_flick_data_free(mb);
544 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_FALSE);
549 static Ecore_X_Window
550 _e_mod_move_mini_apptray_event_win_find(void *event_info)
552 E_Move_Event_Motion_Info *info = NULL;
553 E_Border *find_bd = NULL;
554 Ecore_X_Window win = 0;
555 info = (E_Move_Event_Motion_Info *)event_info;
557 E_CHECK_RETURN(info, 0);
559 find_bd = e_mod_move_util_border_find_by_pointer(info->coord.x, info->coord.y);
561 if (find_bd) win = find_bd->client.win;
565 "[MOVE] ev:%15.15s MINI_APPTRAY_EVENT_WIN_FIND w:0x%08x (%4d,%4d)\n",
566 "EVAS_OBJ", win, info->coord.x, info->coord.y);
572 _e_mod_move_mini_apptray_widget_obj_event_setup(E_Move_Mini_Apptray_Widget *mini_apptray_widget,
573 E_Move_Widget_Object *mwo)
575 E_CHECK(mini_apptray_widget);
578 mwo->event = e_mod_move_event_new(mini_apptray_widget->win, mwo->obj);
581 // change later ... below function used for just log
582 e_mod_move_event_data_type_set(mwo->event, E_MOVE_EVENT_DATA_TYPE_WIDGET_INDICATOR);
584 e_mod_move_event_angle_cb_set(mwo->event,
585 e_mod_move_util_win_prop_angle_get);
586 e_mod_move_event_cb_set(mwo->event, E_MOVE_EVENT_TYPE_MOTION_START,
587 _e_mod_move_mini_apptray_widget_cb_motion_start,
588 mini_apptray_widget);
589 e_mod_move_event_cb_set(mwo->event, E_MOVE_EVENT_TYPE_MOTION_MOVE,
590 _e_mod_move_mini_apptray_widget_cb_motion_move,
591 mini_apptray_widget);
592 e_mod_move_event_cb_set(mwo->event, E_MOVE_EVENT_TYPE_MOTION_END,
593 _e_mod_move_mini_apptray_widget_cb_motion_end,
594 mini_apptray_widget);
595 e_mod_move_event_propagate_type_set(mwo->event,
596 E_MOVE_EVENT_PROPAGATE_TYPE_NONE);
597 e_mod_move_event_win_find_cb_set(mwo->event,
598 _e_mod_move_mini_apptray_event_win_find);
602 _e_mod_move_mini_apptray_widget_event_send_policy_check(E_Move_Mini_Apptray_Widget *mini_apptray_widget,
605 int x = 0, y = 0, w = 0, h = 0;
606 Eina_Bool ret = EINA_FALSE;
608 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
610 e_mod_move_widget_objs_geometry_get(mini_apptray_widget->objs, &x ,&y, &w, &h);
612 if (E_INSIDE(pos.x, pos.y, x, y, w, h)) ret = EINA_TRUE;
617 /* externally accessible functions */
619 /* set current mini apptray widget */
621 e_mod_move_mini_apptray_widget_set(E_Move_Mini_Apptray_Widget *mini_apptray_widget)
625 m = e_mod_move_util_get();
628 if (m->mini_apptray_widget)
630 e_mod_move_mini_apptray_widget_del(m->mini_apptray_widget);
633 m->mini_apptray_widget = mini_apptray_widget;
636 /* get current mini_apptray widget */
637 EINTERN E_Move_Mini_Apptray_Widget *
638 e_mod_move_mini_apptray_widget_get(void)
641 m = e_mod_move_util_get();
642 E_CHECK_RETURN(m, NULL);
644 return m->mini_apptray_widget;
647 /* find mini_apptray widget target window */
648 // must update/change this function ( for mini_apptray policy )
650 e_mod_move_mini_apptray_widget_target_window_find(Ecore_X_Window *win)
653 E_Move_Border *find_mb = NULL;
654 Eina_Bool found = EINA_FALSE;
656 Eina_Bool ret = EINA_FALSE;
658 E_CHECK_RETURN(win, EINA_FALSE);
659 m = e_mod_move_util_get();
660 E_CHECK_RETURN(m, EINA_FALSE);
663 EINA_INLIST_REVERSE_FOREACH(m->borders, find_mb)
665 if (!find_mb->bd) continue;
666 // the first OnScreen & FullScreen Window
667 zone = find_mb->bd->zone;
669 && REGION_EQUAL_TO_ZONE(find_mb, zone) // check fullscreen
670 && (zone->id == 0)) // change zone->id comparing to bd's profile property (mobile)
678 && !(TYPE_INDICATOR_CHECK(find_mb))
679 && !(TYPE_APPTRAY_CHECK(find_mb))
680 && !(TYPE_MINI_APPTRAY_CHECK(find_mb))
681 && !(TYPE_QUICKPANEL_CHECK(find_mb))
682 && (find_mb->mini_apptray_state != E_MOVE_MINI_APPTRAY_STATE_OFF))
684 *win = find_mb->bd->client.win;
691 /* find mini_apptray widget's target window and apply mini_apptray widget control */
693 e_mod_move_mini_apptray_widget_apply(void)
696 E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
697 E_Move_Border *mini_apptray_mb = NULL;
698 Ecore_X_Window target_win;
700 m = e_mod_move_util_get();
703 E_CHECK(m->apptray_launch_by_flickup);
705 if (m->screen_reader_state) return;
706 if (m->setup_wizard_state) return;
708 mini_apptray_mb = e_mod_move_mini_apptray_find();
709 if (!mini_apptray_mb)
711 if ((mini_apptray_widget = e_mod_move_mini_apptray_widget_get()))
712 e_mod_move_mini_apptray_widget_del(mini_apptray_widget);
716 if (e_mod_move_mini_apptray_widget_target_window_find(&target_win))
718 // if previous mini_apptray_widget is created
719 if ((mini_apptray_widget = e_mod_move_mini_apptray_widget_get()))
721 // if current mini_apptray_widget's win is equal to finded win
723 if ((mini_apptray_widget->win == target_win)) return;
726 // if current mini_apptray_widget's win is not equal to finded win
727 // then del previous mini_apptray_widget and add new mini_apptray_widget.
728 e_mod_move_mini_apptray_widget_del(mini_apptray_widget);
730 e_mod_move_mini_apptray_widget_set(e_mod_move_mini_apptray_widget_add(target_win));
735 //if previous mini_apptray_widget is not creagted
736 //then add new mini_apptray_widget.
737 e_mod_move_mini_apptray_widget_set(e_mod_move_mini_apptray_widget_add(target_win));
742 // if current window does not require mini_apptray_widget
743 // and previous mini_apptray_widget is created,
744 // then del previous mini_apptray_widget
745 if ((mini_apptray_widget = e_mod_move_mini_apptray_widget_get()))
747 e_mod_move_mini_apptray_widget_del(mini_apptray_widget);
748 e_mod_move_mini_apptray_widget_set(NULL);
753 /* create E_Move_Border related Mini_Apptray_Widget */
754 EINTERN E_Move_Mini_Apptray_Widget *
755 e_mod_move_mini_apptray_widget_add(Ecore_X_Window win)
758 E_Move_Border *mb = NULL;
759 E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
760 E_Move_Widget_Object *mwo = NULL;
767 m = e_mod_move_util_get();
768 E_CHECK_RETURN(m, EINA_FALSE);
770 E_CHECK_RETURN(e_mod_move_mini_apptray_find(), EINA_FALSE);
772 mb = e_mod_move_border_client_find(win);
773 E_CHECK_RETURN(mb, NULL);
775 mini_apptray_widget = E_NEW(E_Move_Mini_Apptray_Widget, 1);
776 E_CHECK_RETURN(mini_apptray_widget, NULL);
778 mini_apptray_widget->win = win;
779 mini_apptray_widget->objs = e_mod_move_widget_objs_add(m);
780 if (mini_apptray_widget->objs)
785 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].x;
786 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].y;
787 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].w;
788 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].h;
791 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].x;
792 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].y;
793 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].w;
794 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].h;
797 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].x;
798 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].y;
799 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].w;
800 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].h;
804 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].x;
805 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].y;
806 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].w;
807 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].h;
810 e_mod_move_widget_objs_move(mini_apptray_widget->objs, x, y);
811 e_mod_move_widget_objs_resize(mini_apptray_widget->objs, w, h);
812 e_mod_move_widget_objs_layer_set(mini_apptray_widget->objs, EVAS_LAYER_MAX-2);
813 e_mod_move_widget_objs_color_set(mini_apptray_widget->objs, 0, 0, 0, 0);
814 e_mod_move_widget_objs_show(mini_apptray_widget->objs);
815 e_mod_move_widget_objs_raise(mini_apptray_widget->objs);
817 // Set Input Shape Mask
819 if ((mini_apptray_widget->input_region_id = e_manager_comp_input_region_id_new(m->man)))
821 e_manager_comp_input_region_id_set(m->man,
822 mini_apptray_widget->input_region_id,
836 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
839 _e_mod_move_mini_apptray_widget_obj_event_setup(mini_apptray_widget, mwo);
841 return mini_apptray_widget;
844 if (mini_apptray_widget->objs) e_mod_move_widget_objs_del(mini_apptray_widget->objs);
845 memset(mini_apptray_widget, 0, sizeof(E_Move_Mini_Apptray_Widget));
846 E_FREE(mini_apptray_widget);
850 /* delete mini_apptray_widget */
852 e_mod_move_mini_apptray_widget_del(E_Move_Mini_Apptray_Widget *mini_apptray_widget)
855 E_Move_Border *mb = NULL;
856 E_Move_Border *mini_apptray_mb = NULL;
858 int x = 0; int y = 0;
860 E_CHECK(mini_apptray_widget);
861 m = e_mod_move_util_get();
863 if ((mb = e_mod_move_border_client_find(mini_apptray_widget->win)))
865 // compositor's input region free
867 if (mini_apptray_widget->input_region_id)
869 e_manager_comp_input_region_id_del(m->man,
870 mini_apptray_widget->input_region_id);
873 // if mini_apptray_widget is deleted, then mini_apptray's mirror object hide with animation
874 if (mini_apptray_widget->mini_apptray_move)
876 mini_apptray_mb = e_mod_move_mini_apptray_find();
877 E_CHECK_GOTO(mini_apptray_mb, error_cleanup);
878 zone = mini_apptray_mb->bd->zone;
888 y = mini_apptray_mb->h * -1;
891 x = mini_apptray_mb->w * -1;
900 if (e_mod_move_mini_apptray_objs_animation_state_get(mini_apptray_mb))
902 e_mod_move_mini_apptray_objs_animation_stop(mini_apptray_mb);
903 e_mod_move_mini_apptray_objs_animation_clear(mini_apptray_mb);
905 e_mod_move_mini_apptray_objs_add(mini_apptray_mb);
907 e_mod_move_mini_apptray_e_border_move(mini_apptray_mb, x, y);
908 e_mod_move_mini_apptray_objs_animation_move(mini_apptray_mb, x, y);
910 "[MOVE] ev:%15.15s Mini_Apptray Widget Deleted: Hide Mini Apptray %s():%d\n",
911 "EVAS_OBJ", __func__, __LINE__);
916 if (mini_apptray_widget->objs) e_mod_move_widget_objs_del(mini_apptray_widget->objs);
917 memset(mini_apptray_widget, 0, sizeof(E_Move_Mini_Apptray_Widget));
918 E_FREE(mini_apptray_widget);
919 if (m) m->mini_apptray_widget = NULL;
923 e_mod_move_mini_apptray_widget_angle_change(Ecore_X_Window win)
926 E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
927 Eina_Bool ret = EINA_FALSE;
928 E_Move_Border *mb = NULL;
934 m = e_mod_move_util_get();
935 E_CHECK_RETURN(m, EINA_FALSE);
937 mini_apptray_widget = e_mod_move_mini_apptray_widget_get();
938 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
940 if ((mini_apptray_widget->win == win))
942 if ((mb = e_mod_move_border_client_find(win)))
947 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].x;
948 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].y;
949 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].w;
950 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].h;
953 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].x;
954 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].y;
955 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].w;
956 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].h;
959 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].x;
960 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].y;
961 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].w;
962 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].h;
966 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].x;
967 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].y;
968 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].w;
969 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].h;
972 e_mod_move_widget_objs_move(mini_apptray_widget->objs, x, y);
973 e_mod_move_widget_objs_resize(mini_apptray_widget->objs, w, h);
975 // Set Input Shape Mask
977 if (mini_apptray_widget->input_region_id)
979 e_manager_comp_input_region_id_set(m->man,
980 mini_apptray_widget->input_region_id,
991 e_mod_move_mini_apptray_widget_scrollable_check(void)
993 E_Move_Border *lockscr_mb = NULL;
994 E_Move_Border *taskmgr_mb = NULL;
995 E_Move_Border *pwlock_mb = NULL;
997 // if lockscreen is exist & visible, then do not show apptray
998 if ((lockscr_mb = e_mod_move_lockscreen_find()))
1000 if (lockscr_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE)
1003 "[MOVE] ev:%15.15s %s %s()\n",
1004 "EVAS_OBJ","Lockscreen is exist.", __func__);
1008 // if taskmanage is exist & visible, then do not show apptray
1009 if ((taskmgr_mb = e_mod_move_taskmanager_find()))
1011 if (taskmgr_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE)
1014 "[MOVE] ev:%15.15s %s %s()\n",
1015 "EVAS_OBJ","TaskManager is exist.", __func__);
1020 // if pwlock is exist & visible, then do not show apptray
1021 if ((pwlock_mb = e_mod_move_pwlock_find()))
1023 if (pwlock_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE)
1026 "[MOVE] ev:%15.15s %s %s()\n",
1027 "EVAS_OBJ","PWLOCK is exist.", __func__);
1036 e_mod_move_mini_apptray_widget_click_get(E_Move_Mini_Apptray_Widget* mini_apptray_widget)
1038 Eina_Bool click = EINA_FALSE;
1039 E_Move_Widget_Object *mwo = NULL;
1042 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
1043 E_CHECK_RETURN(mini_apptray_widget->objs, EINA_FALSE);
1045 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
1048 click = e_mod_move_event_click_get(mwo->event);
1055 e_mod_move_mini_apptray_widget_event_clear(E_Move_Mini_Apptray_Widget* mini_apptray_widget)
1057 Eina_Bool click = EINA_FALSE;
1058 E_Move_Widget_Object *mwo = NULL;
1060 E_Move_Border *mb = NULL;
1062 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
1063 E_CHECK_RETURN(mini_apptray_widget->objs, EINA_FALSE);
1065 click = e_mod_move_mini_apptray_widget_click_get(mini_apptray_widget);
1066 E_CHECK_RETURN(click, EINA_FALSE);
1068 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
1071 e_mod_move_event_data_clear(mwo->event);
1072 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
1075 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_FALSE);
1077 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
1078 if (mb && mb->flick_data) e_mod_move_flick_data_free(mb);
1083 e_mod_move_mini_apptray_widget_state_change(Ecore_X_Window win, Eina_Bool state)
1085 E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
1087 if ((mini_apptray_widget = e_mod_move_mini_apptray_widget_get()))
1089 if ((mini_apptray_widget->win == win)
1092 // mini_apptray_state disable -> delete current mini_apptray_widget
1093 e_mod_move_mini_apptray_widget_del(mini_apptray_widget);
1094 e_mod_move_mini_apptray_widget_set(NULL);
1099 if (state) e_mod_move_mini_apptray_widget_apply();
1106 e_mod_move_mini_apptray_widget_angle_change_post_job(void)
1108 E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
1109 E_Move_Border *mb = NULL;
1110 E_Border *bd = NULL;
1111 E_Zone *zone = NULL;
1115 mini_apptray_widget = e_mod_move_mini_apptray_widget_get();
1116 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
1118 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
1119 E_CHECK_RETURN(mb, EINA_FALSE);
1122 E_CHECK_RETURN(bd, EINA_FALSE);
1125 E_CHECK_RETURN(zone, EINA_FALSE);
1129 if (e_mod_move_mini_apptray_widget_click_get(mini_apptray_widget))
1134 x = zone->x + zone->w;
1135 y = zone->y + zone->h;
1138 x = zone->x + zone->w;
1139 y = zone->y + zone->h;
1155 e_mod_move_flick_data_init(mb, x, y);