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 Eina_Bool found = EINA_FALSE;
40 m = e_mod_move_util_get();
42 E_CHECK_RETURN(m, EINA_FALSE);
43 E_CHECK_RETURN(mini_apptray_mb, EINA_FALSE);
44 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mini_apptray_mb), EINA_FALSE);
45 E_CHECK_RETURN(mini_apptray_mb->visible, EINA_FALSE);
46 E_CHECK_RETURN(e_mod_move_util_compositor_object_visible_get(mini_apptray_mb),
48 if (e_mod_move_mini_apptray_objs_animation_state_get(mini_apptray_mb)) return EINA_FALSE;
50 // Mini app-tray is under rotation state.
51 // I think there is another exception case.
52 // It's posible that WM doesn't send rotation change request yet.
53 // In this case the value of wait_for_done is zero,
54 // it means quickpanel isn't rotating for now, but going to be rotated.
55 if (mini_apptray_mb->bd)
56 if (mini_apptray_mb->bd->client.e.state.rot.wait_for_done) return EINA_FALSE;
58 // check if notification window is on-screen.
59 EINA_INLIST_REVERSE_FOREACH(m->borders, find_mb)
61 if (TYPE_INDICATOR_CHECK(find_mb)) continue;
62 if ((find_mb->visible) &&
63 (mini_apptray_mb->bd) &&
64 (REGION_INTERSECTS_WITH_ZONE(find_mb, mini_apptray_mb->bd->zone)))
72 && (find_mb->bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NOTIFICATION)
73 && REGION_EQUAL_TO_ZONE(find_mb, find_mb->bd->zone))
77 // check if notification window is on-screen.
79 e_mod_move_mini_apptray_dim_show(mini_apptray_mb);
81 if (REGION_INSIDE_ZONE(mini_apptray_mb, mini_apptray_mb->bd->zone))
82 e_mod_move_mini_apptray_objs_add_with_pos(mini_apptray_mb, -10000, -10000);
84 e_mod_move_mini_apptray_objs_add(mini_apptray_mb);
90 _e_mod_move_mini_apptray_widget_mini_apptray_flick_process(E_Move_Mini_Apptray_Widget *mini_apptray_widget,
91 E_Move_Border *mb2, // mb2 : mini_apptray
95 E_Move_Border *mb = NULL;
96 E_Move_Widget_Object *mwo = NULL;
102 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
103 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
104 E_CHECK_RETURN(mb, EINA_FALSE);
105 E_CHECK_RETURN(mb2, EINA_FALSE);
106 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb2), EINA_FALSE);
107 E_CHECK_RETURN(state, EINA_FALSE);
111 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo) // widget click unset
114 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
117 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_FALSE);
120 if (mb->flick_data) e_mod_move_flick_data_free(mb);
125 x = zone->w - mb2->w;
139 y = zone->h - mb2->h;
143 e_mod_move_mini_apptray_e_border_move(mb2, x, y);
144 e_mod_move_mini_apptray_objs_animation_move(mb2, x, y);
150 _e_mod_move_mini_apptray_widget_cb_motion_start(void *data,
154 E_Move_Mini_Apptray_Widget *mini_apptray_widget = (E_Move_Mini_Apptray_Widget *)data;
156 E_Move_Border *mb = NULL;
157 E_Move_Border *mini_apptray_mb = NULL;
158 E_Move_Event_Motion_Info *info;
159 E_Move_Widget_Object *mwo = NULL;
160 Evas_Event_Mouse_Down *mouse_down_event = NULL;
161 Eina_Bool clicked = EINA_FALSE;
163 E_Move_Border *ev_mb = NULL;
164 Ecore_X_Window ev_win = 0;
166 info = (E_Move_Event_Motion_Info *)event_info;
167 m = e_mod_move_util_get();
169 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
171 // clicked window indicator policy check
172 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
175 ev_win = e_mod_move_event_win_get(mwo->event);
177 ev_mb = e_mod_move_border_client_find(ev_win);
178 // Check Mini Apptray State ( property )
180 && (ev_mb->mini_apptray_state == E_MOVE_MINI_APPTRAY_STATE_OFF))
183 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
184 if (!m || !mb || !mini_apptray_widget || !info) return EINA_FALSE;
186 mouse_down_event = info->event_info;
187 E_CHECK_RETURN(mouse_down_event, EINA_FALSE);
188 if (mouse_down_event->button != 1)
191 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
194 clicked = e_mod_move_event_click_get(mwo->event);
200 "[MOVE] ev:%15.15s w:0x%08x MINI_APPTRAY_WIDGET_MOTION_START (%4d,%4d)\n",
201 "EVAS_OBJ", mb->bd->win,
202 info->coord.x, info->coord.y);
204 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_FALSE);
206 /* check if apptray exists on the current zone */
207 mini_apptray_mb = e_mod_move_mini_apptray_find();
208 if ((mini_apptray_mb) &&
209 (mini_apptray_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE))
212 "[MOVE] ev:%15.15s w:0x%08x MINI_APPTRAY_WIDGET_MOTION_START %s\n",
213 "EVAS_OBJ", mb->bd->win,
214 "mini_apptray exists. return.");
218 if ((mini_apptray_mb) &&
219 (REGION_INSIDE_ZONE(mini_apptray_mb, mb->bd->zone)))
221 e_mod_move_mini_apptray_e_border_move(mini_apptray_mb, -10000, -10000);
224 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
227 e_mod_move_event_click_set(mwo->event, EINA_TRUE);
230 E_CHECK_GOTO(e_mod_move_flick_data_new(mb), error_cleanup);
231 e_mod_move_flick_data_init(mb, info->coord.x, info->coord.y);
233 if (!_e_mod_move_mini_apptray_widget_cb_motion_start_internal_mini_apptray_check(mini_apptray_mb))
238 //e_mod_move_mini_apptray_e_border_raise(mini_apptray_mb);
239 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_TRUE);
240 e_mod_move_mini_apptray_objs_animation_start_position_set(mini_apptray_mb,
242 // send mini_apptray to "move start message".
243 e_mod_move_mini_apptray_anim_state_send(mini_apptray_mb, EINA_TRUE);
245 mini_apptray_widget->pos = info->coord; // save mouse click position
251 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
254 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
257 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_FALSE);
264 _e_mod_move_mini_apptray_widget_cb_motion_move(void *data,
268 E_Move_Mini_Apptray_Widget *mini_apptray_widget = (E_Move_Mini_Apptray_Widget *)data;
269 E_Move_Border *mb = NULL;
270 E_Move_Event_Motion_Info *info;
271 E_Move_Widget_Object *mwo = NULL;
274 Eina_Bool click = EINA_FALSE;
276 Eina_Bool flick_state = EINA_FALSE;
277 E_Move_Border *mini_apptray_mb = NULL;
279 info = (E_Move_Event_Motion_Info *)event_info;
280 m = e_mod_move_util_get();
282 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
283 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
285 if (!m || !mb || !info) return EINA_FALSE;
288 "[MOVE] ev:%15.15s w:0x%08x MINI_APPTRAY_WIDGET_MOTION_MOVE a:%d (%4d,%4d)\n",
289 "EVAS_OBJ", mb->bd->win, mb->angle,
290 info->coord.x, info->coord.y);
295 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
298 click = e_mod_move_event_click_get(mwo->event);
300 E_CHECK_RETURN(click, EINA_FALSE);
302 // do not work on moving just work on flick action
303 e_mod_move_flick_data_update(mb, info->coord.x, info->coord.y);
304 flick_state = e_mod_move_flick_state_get2(mb);
306 if (_e_mod_move_mini_apptray_widget_mini_apptray_move_get(mini_apptray_widget))
308 mini_apptray_mb = e_mod_move_mini_apptray_find();
310 if (_e_mod_move_mini_apptray_widget_mini_apptray_flick_process(mini_apptray_widget,
319 if (_e_mod_move_mini_apptray_widget_mini_apptray_move_get(mini_apptray_widget))
321 mini_apptray_mb = e_mod_move_mini_apptray_find();
322 E_CHECK_RETURN(mini_apptray_mb, EINA_FALSE);
323 // change later for flick_up
324 // todo flick up geometry
328 if (info->coord.y > (zone->h - mini_apptray_mb->h))
331 need_move = EINA_TRUE;
335 if (info->coord.x > (zone->w - mini_apptray_mb->w))
338 need_move = EINA_TRUE;
342 if (info->coord.y < mini_apptray_mb->h)
344 y = info->coord.y - mini_apptray_mb->h;
345 need_move = EINA_TRUE;
349 if (info->coord.x < mini_apptray_mb->w)
351 x = info->coord.x - mini_apptray_mb->w;
352 need_move = EINA_TRUE;
359 e_mod_move_mini_apptray_objs_move(mini_apptray_mb, x, y);
362 mini_apptray_widget->pos = info->coord; // save mouse move position
369 _e_mod_move_mini_apptray_widget_cb_motion_end(void *data,
373 E_Move_Mini_Apptray_Widget *mini_apptray_widget = (E_Move_Mini_Apptray_Widget *)data;
374 E_Move_Border *mb = NULL;
375 E_Move_Border *mini_apptray_mb = NULL;
376 E_Move_Event_Motion_Info *info;
377 E_Move_Widget_Object *mwo = NULL;
380 Evas_Event_Mouse_Up *mouse_up_event;
381 Eina_Bool click = EINA_FALSE;
382 Eina_Bool flick_state = EINA_FALSE;
384 Ecore_X_Window ev_win = 0;
386 info = (E_Move_Event_Motion_Info *)event_info;
387 m = e_mod_move_util_get();
389 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
390 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
392 if (!m || !mb || !info) return EINA_FALSE;
394 mouse_up_event = info->event_info;
395 E_CHECK_RETURN(mouse_up_event, EINA_FALSE);
396 if (mouse_up_event->button != 1)
400 "[MOVE] ev:%15.15s w:0x%08x ,angle:%d, (%d,%d) %s()\n",
401 "EVAS_OBJ", mb->bd->win, mb->angle, info->coord.x, info->coord.y,
407 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
410 click = e_mod_move_event_click_get(mwo->event);
412 E_CHECK_GOTO(click, error_cleanup);
414 e_mod_move_flick_data_update(mb, info->coord.x, info->coord.y);
415 flick_state = e_mod_move_flick_state_get2(mb);
417 if (_e_mod_move_mini_apptray_widget_mini_apptray_move_get(mini_apptray_widget))
419 mini_apptray_mb = e_mod_move_mini_apptray_find();
421 if (_e_mod_move_mini_apptray_widget_mini_apptray_flick_process(mini_apptray_widget,
429 // if mini_apptray animation is not called, must destory datas explicit
432 e_border_focus_set(mini_apptray_mb ->bd, 0, 0);
433 e_mod_move_mini_apptray_dim_hide(mini_apptray_mb );
434 e_mod_move_mini_apptray_objs_del(mini_apptray_mb );
438 // just work on flick action. so. currently block.
449 check_h = mini_apptray_mb->h;
450 if (check_h) check_h /= 2;
451 if (info->coord.y > (zone->h - check_h))
458 my = zone->h - mini_apptray_mb->h;
466 check_w = mini_apptray_mb->w;
467 if (check_w) check_w /= 2;
468 if (info->coord.x > (zone->w - check_w))
475 mx = zone->w - mini_apptray_mb->w;
483 check_h = mini_apptray_mb->h;
484 if (check_h) check_h /= 2;
485 if (info->coord.y < check_h)
487 my = mini_apptray_mb->h * -1;
495 check_w = mini_apptray_mb->w;
496 if (check_w) check_w /= 2;
497 if (info->coord.x < check_w)
499 mx = mini_apptray_mb->w * -1;
510 e_mod_move_mini_apptray_e_border_move(mini_apptray_mb, mx, my);
511 e_mod_move_mini_apptray_objs_animation_move(mini_apptray_mb, ax, ay);
515 // if flick check fail then, redirect event
516 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
519 ev_win = e_mod_move_event_win_get(mwo->event);
524 e_mod_move_mouse_event_send(ev_win, E_MOVE_MOUSE_EVENT_MOVE, mini_apptray_widget->pos);
525 e_mod_move_mouse_event_send(ev_win, E_MOVE_MOUSE_EVENT_DOWN, mini_apptray_widget->pos);
526 e_mod_move_mouse_event_send(ev_win, E_MOVE_MOUSE_EVENT_MOVE, info->coord);
527 e_mod_move_mouse_event_send(ev_win, E_MOVE_MOUSE_EVENT_UP, info->coord);
530 mini_apptray_widget->pos = info->coord; // save mouse up position
532 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
535 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
539 if (mb->flick_data) e_mod_move_flick_data_free(mb);
540 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_FALSE);
545 static Ecore_X_Window
546 _e_mod_move_mini_apptray_event_win_find(void *event_info)
548 E_Move_Event_Motion_Info *info = NULL;
549 E_Border *find_bd = NULL;
550 Ecore_X_Window win = 0;
551 info = (E_Move_Event_Motion_Info *)event_info;
553 E_CHECK_RETURN(info, 0);
555 find_bd = e_mod_move_util_border_find_by_pointer(info->coord.x, info->coord.y);
557 if (find_bd) win = find_bd->client.win;
561 "[MOVE] ev:%15.15s MINI_APPTRAY_EVENT_WIN_FIND w:0x%08x (%4d,%4d)\n",
562 "EVAS_OBJ", win, info->coord.x, info->coord.y);
568 _e_mod_move_mini_apptray_widget_obj_event_setup(E_Move_Mini_Apptray_Widget *mini_apptray_widget,
569 E_Move_Widget_Object *mwo)
571 E_CHECK(mini_apptray_widget);
574 mwo->event = e_mod_move_event_new(mini_apptray_widget->win, mwo->obj);
577 // change later ... below function used for just log
578 e_mod_move_event_data_type_set(mwo->event, E_MOVE_EVENT_DATA_TYPE_WIDGET_INDICATOR);
580 e_mod_move_event_angle_cb_set(mwo->event,
581 e_mod_move_util_win_prop_angle_get);
582 e_mod_move_event_cb_set(mwo->event, E_MOVE_EVENT_TYPE_MOTION_START,
583 _e_mod_move_mini_apptray_widget_cb_motion_start,
584 mini_apptray_widget);
585 e_mod_move_event_cb_set(mwo->event, E_MOVE_EVENT_TYPE_MOTION_MOVE,
586 _e_mod_move_mini_apptray_widget_cb_motion_move,
587 mini_apptray_widget);
588 e_mod_move_event_cb_set(mwo->event, E_MOVE_EVENT_TYPE_MOTION_END,
589 _e_mod_move_mini_apptray_widget_cb_motion_end,
590 mini_apptray_widget);
591 e_mod_move_event_propagate_type_set(mwo->event,
592 E_MOVE_EVENT_PROPAGATE_TYPE_NONE);
593 e_mod_move_event_win_find_cb_set(mwo->event,
594 _e_mod_move_mini_apptray_event_win_find);
598 _e_mod_move_mini_apptray_widget_event_send_policy_check(E_Move_Mini_Apptray_Widget *mini_apptray_widget,
601 int x = 0, y = 0, w = 0, h = 0;
602 Eina_Bool ret = EINA_FALSE;
604 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
606 e_mod_move_widget_objs_geometry_get(mini_apptray_widget->objs, &x ,&y, &w, &h);
608 if (E_INSIDE(pos.x, pos.y, x, y, w, h)) ret = EINA_TRUE;
613 /* externally accessible functions */
615 /* set current mini apptray widget */
617 e_mod_move_mini_apptray_widget_set(E_Move_Mini_Apptray_Widget *mini_apptray_widget)
621 m = e_mod_move_util_get();
624 if (m->mini_apptray_widget)
626 e_mod_move_mini_apptray_widget_del(m->mini_apptray_widget);
629 m->mini_apptray_widget = mini_apptray_widget;
632 /* get current mini_apptray widget */
633 EINTERN E_Move_Mini_Apptray_Widget *
634 e_mod_move_mini_apptray_widget_get(void)
637 m = e_mod_move_util_get();
638 E_CHECK_RETURN(m, NULL);
640 return m->mini_apptray_widget;
643 /* find mini_apptray widget target window */
644 // must update/change this function ( for mini_apptray policy )
646 e_mod_move_mini_apptray_widget_target_window_find(Ecore_X_Window *win)
649 E_Move_Border *find_mb = NULL;
650 Eina_Bool found = EINA_FALSE;
652 Eina_Bool ret = EINA_FALSE;
654 E_CHECK_RETURN(win, EINA_FALSE);
655 m = e_mod_move_util_get();
656 E_CHECK_RETURN(m, EINA_FALSE);
659 EINA_INLIST_REVERSE_FOREACH(m->borders, find_mb)
661 if (!find_mb->bd) continue;
662 // the first OnScreen & FullScreen Window
663 zone = find_mb->bd->zone;
665 && REGION_EQUAL_TO_ZONE(find_mb, zone) // check fullscreen
666 && (zone->id == 0)) // change zone->id comparing to bd's profile property (mobile)
674 && !(TYPE_INDICATOR_CHECK(find_mb))
675 && !(TYPE_APPTRAY_CHECK(find_mb))
676 && !(TYPE_MINI_APPTRAY_CHECK(find_mb))
677 && !(TYPE_QUICKPANEL_CHECK(find_mb))
678 && (find_mb->mini_apptray_state != E_MOVE_MINI_APPTRAY_STATE_OFF))
680 *win = find_mb->bd->client.win;
687 /* find mini_apptray widget's target window and apply mini_apptray widget control */
689 e_mod_move_mini_apptray_widget_apply(void)
692 E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
693 E_Move_Border *mini_apptray_mb = NULL;
694 Ecore_X_Window target_win;
696 m = e_mod_move_util_get();
699 E_CHECK(m->apptray_launch_by_flickup);
701 if (m->screen_reader_state) return;
702 if (m->setup_wizard_state) return;
704 mini_apptray_mb = e_mod_move_mini_apptray_find();
705 if (!mini_apptray_mb)
707 if ((mini_apptray_widget = e_mod_move_mini_apptray_widget_get()))
708 e_mod_move_mini_apptray_widget_del(mini_apptray_widget);
712 if (e_mod_move_mini_apptray_widget_target_window_find(&target_win))
714 // if previous mini_apptray_widget is created
715 if ((mini_apptray_widget = e_mod_move_mini_apptray_widget_get()))
717 // if current mini_apptray_widget's win is equal to finded win
719 if ((mini_apptray_widget->win == target_win)) return;
722 // if current mini_apptray_widget's win is not equal to finded win
723 // then del previous mini_apptray_widget and add new mini_apptray_widget.
724 e_mod_move_mini_apptray_widget_del(mini_apptray_widget);
726 e_mod_move_mini_apptray_widget_set(e_mod_move_mini_apptray_widget_add(target_win));
731 //if previous mini_apptray_widget is not creagted
732 //then add new mini_apptray_widget.
733 e_mod_move_mini_apptray_widget_set(e_mod_move_mini_apptray_widget_add(target_win));
738 // if current window does not require mini_apptray_widget
739 // and previous mini_apptray_widget is created,
740 // then del previous mini_apptray_widget
741 if ((mini_apptray_widget = e_mod_move_mini_apptray_widget_get()))
743 e_mod_move_mini_apptray_widget_del(mini_apptray_widget);
744 e_mod_move_mini_apptray_widget_set(NULL);
749 /* create E_Move_Border related Mini_Apptray_Widget */
750 EINTERN E_Move_Mini_Apptray_Widget *
751 e_mod_move_mini_apptray_widget_add(Ecore_X_Window win)
754 E_Move_Border *mb = NULL;
755 E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
756 E_Move_Widget_Object *mwo = NULL;
763 m = e_mod_move_util_get();
764 E_CHECK_RETURN(m, EINA_FALSE);
766 E_CHECK_RETURN(e_mod_move_mini_apptray_find(), EINA_FALSE);
768 mb = e_mod_move_border_client_find(win);
769 E_CHECK_RETURN(mb, NULL);
771 mini_apptray_widget = E_NEW(E_Move_Mini_Apptray_Widget, 1);
772 E_CHECK_RETURN(mini_apptray_widget, NULL);
774 mini_apptray_widget->win = win;
775 mini_apptray_widget->objs = e_mod_move_widget_objs_add(m);
776 if (mini_apptray_widget->objs)
781 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].x;
782 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].y;
783 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].w;
784 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].h;
787 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].x;
788 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].y;
789 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].w;
790 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].h;
793 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].x;
794 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].y;
795 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].w;
796 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].h;
800 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].x;
801 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].y;
802 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].w;
803 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].h;
806 e_mod_move_widget_objs_move(mini_apptray_widget->objs, x, y);
807 e_mod_move_widget_objs_resize(mini_apptray_widget->objs, w, h);
808 e_mod_move_widget_objs_layer_set(mini_apptray_widget->objs, EVAS_LAYER_MAX-2);
809 e_mod_move_widget_objs_color_set(mini_apptray_widget->objs, 0, 0, 0, 0);
810 e_mod_move_widget_objs_show(mini_apptray_widget->objs);
811 e_mod_move_widget_objs_raise(mini_apptray_widget->objs);
813 // Set Input Shape Mask
815 if ((mini_apptray_widget->input_region_id = e_manager_comp_input_region_id_new(m->man)))
817 e_manager_comp_input_region_id_set(m->man,
818 mini_apptray_widget->input_region_id,
832 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
835 _e_mod_move_mini_apptray_widget_obj_event_setup(mini_apptray_widget, mwo);
837 return mini_apptray_widget;
840 if (mini_apptray_widget->objs) e_mod_move_widget_objs_del(mini_apptray_widget->objs);
841 memset(mini_apptray_widget, 0, sizeof(E_Move_Mini_Apptray_Widget));
842 E_FREE(mini_apptray_widget);
846 /* delete mini_apptray_widget */
848 e_mod_move_mini_apptray_widget_del(E_Move_Mini_Apptray_Widget *mini_apptray_widget)
851 E_Move_Border *mb = NULL;
852 E_Move_Border *mini_apptray_mb = NULL;
854 int x = 0; int y = 0;
856 E_CHECK(mini_apptray_widget);
857 m = e_mod_move_util_get();
859 if ((mb = e_mod_move_border_client_find(mini_apptray_widget->win)))
861 // compositor's input region free
863 if (mini_apptray_widget->input_region_id)
865 e_manager_comp_input_region_id_del(m->man,
866 mini_apptray_widget->input_region_id);
869 // if mini_apptray_widget is deleted, then mini_apptray's mirror object hide with animation
870 if (mini_apptray_widget->mini_apptray_move)
872 mini_apptray_mb = e_mod_move_mini_apptray_find();
873 E_CHECK_GOTO(mini_apptray_mb, error_cleanup);
874 zone = mini_apptray_mb->bd->zone;
884 y = mini_apptray_mb->h * -1;
887 x = mini_apptray_mb->w * -1;
896 if (e_mod_move_mini_apptray_objs_animation_state_get(mini_apptray_mb))
898 e_mod_move_mini_apptray_objs_animation_stop(mini_apptray_mb);
899 e_mod_move_mini_apptray_objs_animation_clear(mini_apptray_mb);
901 e_mod_move_mini_apptray_objs_add(mini_apptray_mb);
903 e_mod_move_mini_apptray_e_border_move(mini_apptray_mb, x, y);
904 e_mod_move_mini_apptray_objs_animation_move(mini_apptray_mb, x, y);
906 "[MOVE] ev:%15.15s Mini_Apptray Widget Deleted: Hide Mini Apptray %s():%d\n",
907 "EVAS_OBJ", __func__, __LINE__);
912 if (mini_apptray_widget->objs) e_mod_move_widget_objs_del(mini_apptray_widget->objs);
913 memset(mini_apptray_widget, 0, sizeof(E_Move_Mini_Apptray_Widget));
914 E_FREE(mini_apptray_widget);
915 if (m) m->mini_apptray_widget = NULL;
919 e_mod_move_mini_apptray_widget_angle_change(Ecore_X_Window win)
922 E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
923 Eina_Bool ret = EINA_FALSE;
924 E_Move_Border *mb = NULL;
930 m = e_mod_move_util_get();
931 E_CHECK_RETURN(m, EINA_FALSE);
933 mini_apptray_widget = e_mod_move_mini_apptray_widget_get();
934 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
936 if ((mini_apptray_widget->win == win))
938 if ((mb = e_mod_move_border_client_find(win)))
943 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].x;
944 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].y;
945 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].w;
946 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].h;
949 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].x;
950 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].y;
951 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].w;
952 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].h;
955 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].x;
956 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].y;
957 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].w;
958 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].h;
962 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].x;
963 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].y;
964 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].w;
965 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].h;
968 e_mod_move_widget_objs_move(mini_apptray_widget->objs, x, y);
969 e_mod_move_widget_objs_resize(mini_apptray_widget->objs, w, h);
971 // Set Input Shape Mask
973 if (mini_apptray_widget->input_region_id)
975 e_manager_comp_input_region_id_set(m->man,
976 mini_apptray_widget->input_region_id,
987 e_mod_move_mini_apptray_widget_scrollable_check(void)
989 E_Move_Border *lockscr_mb = NULL;
990 E_Move_Border *taskmgr_mb = NULL;
991 E_Move_Border *pwlock_mb = NULL;
993 // if lockscreen is exist & visible, then do not show apptray
994 if ((lockscr_mb = e_mod_move_lockscreen_find()))
996 if (lockscr_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE)
999 "[MOVE] ev:%15.15s %s %s()\n",
1000 "EVAS_OBJ","Lockscreen is exist.", __func__);
1004 // if taskmanage is exist & visible, then do not show apptray
1005 if ((taskmgr_mb = e_mod_move_taskmanager_find()))
1007 if (taskmgr_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE)
1010 "[MOVE] ev:%15.15s %s %s()\n",
1011 "EVAS_OBJ","TaskManager is exist.", __func__);
1016 // if pwlock is exist & visible, then do not show apptray
1017 if ((pwlock_mb = e_mod_move_pwlock_find()))
1019 if (pwlock_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE)
1022 "[MOVE] ev:%15.15s %s %s()\n",
1023 "EVAS_OBJ","PWLOCK is exist.", __func__);
1032 e_mod_move_mini_apptray_widget_click_get(E_Move_Mini_Apptray_Widget* mini_apptray_widget)
1034 Eina_Bool click = EINA_FALSE;
1035 E_Move_Widget_Object *mwo = NULL;
1038 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
1039 E_CHECK_RETURN(mini_apptray_widget->objs, EINA_FALSE);
1041 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
1044 click = e_mod_move_event_click_get(mwo->event);
1051 e_mod_move_mini_apptray_widget_event_clear(E_Move_Mini_Apptray_Widget* mini_apptray_widget)
1053 Eina_Bool click = EINA_FALSE;
1054 E_Move_Widget_Object *mwo = NULL;
1056 E_Move_Border *mb = NULL;
1058 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
1059 E_CHECK_RETURN(mini_apptray_widget->objs, EINA_FALSE);
1061 click = e_mod_move_mini_apptray_widget_click_get(mini_apptray_widget);
1062 E_CHECK_RETURN(click, EINA_FALSE);
1064 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
1067 e_mod_move_event_data_clear(mwo->event);
1068 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
1071 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_FALSE);
1073 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
1074 if (mb && mb->flick_data) e_mod_move_flick_data_free(mb);
1079 e_mod_move_mini_apptray_widget_state_change(Ecore_X_Window win, Eina_Bool state)
1081 E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
1083 if ((mini_apptray_widget = e_mod_move_mini_apptray_widget_get()))
1085 if ((mini_apptray_widget->win == win)
1088 // mini_apptray_state disable -> delete current mini_apptray_widget
1089 e_mod_move_mini_apptray_widget_del(mini_apptray_widget);
1090 e_mod_move_mini_apptray_widget_set(NULL);
1095 if (state) e_mod_move_mini_apptray_widget_apply();
1102 e_mod_move_mini_apptray_widget_angle_change_post_job(void)
1104 E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
1105 E_Move_Border *mb = NULL;
1106 E_Border *bd = NULL;
1107 E_Zone *zone = NULL;
1111 mini_apptray_widget = e_mod_move_mini_apptray_widget_get();
1112 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
1114 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
1115 E_CHECK_RETURN(mb, EINA_FALSE);
1118 E_CHECK_RETURN(bd, EINA_FALSE);
1121 E_CHECK_RETURN(zone, EINA_FALSE);
1125 if (e_mod_move_mini_apptray_widget_click_get(mini_apptray_widget))
1130 x = zone->x + zone->w;
1131 y = zone->y + zone->h;
1134 x = zone->x + zone->w;
1135 y = zone->y + zone->h;
1151 e_mod_move_flick_data_init(mb, x, y);