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;
63 && REGION_INTERSECTS_WITH_ZONE(find_mb, mini_apptray_mb->bd->zone))
71 && (find_mb->bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NOTIFICATION)
72 && REGION_EQUAL_TO_ZONE(find_mb, find_mb->bd->zone))
76 // check if notification window is on-screen.
78 e_mod_move_mini_apptray_dim_show(mini_apptray_mb);
80 if (REGION_INSIDE_ZONE(mini_apptray_mb, mini_apptray_mb->bd->zone))
81 e_mod_move_mini_apptray_objs_add_with_pos(mini_apptray_mb, -10000, -10000);
83 e_mod_move_mini_apptray_objs_add(mini_apptray_mb);
89 _e_mod_move_mini_apptray_widget_mini_apptray_flick_process(E_Move_Mini_Apptray_Widget *mini_apptray_widget,
90 E_Move_Border *mb2, // mb2 : mini_apptray
94 E_Move_Border *mb = NULL;
95 E_Move_Widget_Object *mwo = NULL;
101 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
102 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
103 E_CHECK_RETURN(mb, EINA_FALSE);
104 E_CHECK_RETURN(mb2, EINA_FALSE);
105 E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb2), EINA_FALSE);
106 E_CHECK_RETURN(state, EINA_FALSE);
110 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo) // widget click unset
113 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
116 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_FALSE);
119 if (mb->flick_data) e_mod_move_flick_data_free(mb);
124 x = zone->w - mb2->w;
138 y = zone->h - mb2->h;
142 e_mod_move_mini_apptray_e_border_move(mb2, x, y);
143 e_mod_move_mini_apptray_objs_animation_move(mb2, x, y);
149 _e_mod_move_mini_apptray_widget_cb_motion_start(void *data,
153 E_Move_Mini_Apptray_Widget *mini_apptray_widget = (E_Move_Mini_Apptray_Widget *)data;
155 E_Move_Border *mb = NULL;
156 E_Move_Border *mini_apptray_mb = NULL;
157 E_Move_Event_Motion_Info *info;
158 E_Move_Widget_Object *mwo = NULL;
159 Evas_Event_Mouse_Down *mouse_down_event = NULL;
160 Eina_Bool clicked = EINA_FALSE;
162 E_Move_Border *ev_mb = NULL;
163 Ecore_X_Window ev_win = 0;
165 info = (E_Move_Event_Motion_Info *)event_info;
166 m = e_mod_move_util_get();
168 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
170 // clicked window indicator policy check
171 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
174 ev_win = e_mod_move_event_win_get(mwo->event);
176 ev_mb = e_mod_move_border_client_find(ev_win);
177 // Check Mini Apptray State ( property )
179 && (ev_mb->mini_apptray_state == E_MOVE_MINI_APPTRAY_STATE_OFF))
182 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
183 if (!m || !mb || !mini_apptray_widget || !info) return EINA_FALSE;
185 mouse_down_event = info->event_info;
186 E_CHECK_RETURN(mouse_down_event, EINA_FALSE);
187 if (mouse_down_event->button != 1)
190 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
193 clicked = e_mod_move_event_click_get(mwo->event);
199 "[MOVE] ev:%15.15s w:0x%08x MINI_APPTRAY_WIDGET_MOTION_START (%4d,%4d)\n",
200 "EVAS_OBJ", mb->bd->win,
201 info->coord.x, info->coord.y);
203 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_FALSE);
205 /* check if apptray exists on the current zone */
206 mini_apptray_mb = e_mod_move_mini_apptray_find();
207 if ((mini_apptray_mb) &&
208 (mini_apptray_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE))
211 "[MOVE] ev:%15.15s w:0x%08x MINI_APPTRAY_WIDGET_MOTION_START %s\n",
212 "EVAS_OBJ", mb->bd->win,
213 "mini_apptray exists. return.");
217 if ((mini_apptray_mb) &&
218 (REGION_INSIDE_ZONE(mini_apptray_mb, mb->bd->zone)))
220 e_mod_move_mini_apptray_e_border_move(mini_apptray_mb, -10000, -10000);
223 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
226 e_mod_move_event_click_set(mwo->event, EINA_TRUE);
229 E_CHECK_GOTO(e_mod_move_flick_data_new(mb), error_cleanup);
230 e_mod_move_flick_data_init(mb, info->coord.x, info->coord.y);
232 if (!_e_mod_move_mini_apptray_widget_cb_motion_start_internal_mini_apptray_check(mini_apptray_mb))
237 //e_mod_move_mini_apptray_e_border_raise(mini_apptray_mb);
238 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_TRUE);
239 e_mod_move_mini_apptray_objs_animation_start_position_set(mini_apptray_mb,
241 // send mini_apptray to "move start message".
242 e_mod_move_mini_apptray_anim_state_send(mini_apptray_mb, EINA_TRUE);
244 mini_apptray_widget->pos = info->coord; // save mouse click position
250 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
253 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
256 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_FALSE);
263 _e_mod_move_mini_apptray_widget_cb_motion_move(void *data,
267 E_Move_Mini_Apptray_Widget *mini_apptray_widget = (E_Move_Mini_Apptray_Widget *)data;
268 E_Move_Border *mb = NULL;
269 E_Move_Event_Motion_Info *info;
270 E_Move_Widget_Object *mwo = NULL;
273 Eina_Bool click = EINA_FALSE;
275 Eina_Bool flick_state = EINA_FALSE;
276 E_Move_Border *mini_apptray_mb = NULL;
278 info = (E_Move_Event_Motion_Info *)event_info;
279 m = e_mod_move_util_get();
281 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
282 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
284 if (!m || !mb || !info) return EINA_FALSE;
287 "[MOVE] ev:%15.15s w:0x%08x MINI_APPTRAY_WIDGET_MOTION_MOVE a:%d (%4d,%4d)\n",
288 "EVAS_OBJ", mb->bd->win, mb->angle,
289 info->coord.x, info->coord.y);
294 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
297 click = e_mod_move_event_click_get(mwo->event);
299 E_CHECK_RETURN(click, EINA_FALSE);
301 // do not work on moving just work on flick action
302 e_mod_move_flick_data_update(mb, info->coord.x, info->coord.y);
303 flick_state = e_mod_move_flick_state_get2(mb);
305 if (_e_mod_move_mini_apptray_widget_mini_apptray_move_get(mini_apptray_widget))
307 mini_apptray_mb = e_mod_move_mini_apptray_find();
309 if (_e_mod_move_mini_apptray_widget_mini_apptray_flick_process(mini_apptray_widget,
318 if (_e_mod_move_mini_apptray_widget_mini_apptray_move_get(mini_apptray_widget))
320 mini_apptray_mb = e_mod_move_mini_apptray_find();
321 E_CHECK_RETURN(mini_apptray_mb, EINA_FALSE);
322 // change later for flick_up
323 // todo flick up geometry
327 if (info->coord.y > (zone->h - mini_apptray_mb->h))
330 need_move = EINA_TRUE;
334 if (info->coord.x > (zone->w - mini_apptray_mb->w))
337 need_move = EINA_TRUE;
341 if (info->coord.y < mini_apptray_mb->h)
343 y = info->coord.y - mini_apptray_mb->h;
344 need_move = EINA_TRUE;
348 if (info->coord.x < mini_apptray_mb->w)
350 x = info->coord.x - mini_apptray_mb->w;
351 need_move = EINA_TRUE;
358 e_mod_move_mini_apptray_objs_move(mini_apptray_mb, x, y);
361 mini_apptray_widget->pos = info->coord; // save mouse move position
368 _e_mod_move_mini_apptray_widget_cb_motion_end(void *data,
372 E_Move_Mini_Apptray_Widget *mini_apptray_widget = (E_Move_Mini_Apptray_Widget *)data;
373 E_Move_Border *mb = NULL;
374 E_Move_Border *mini_apptray_mb = NULL;
375 E_Move_Event_Motion_Info *info;
376 E_Move_Widget_Object *mwo = NULL;
379 Evas_Event_Mouse_Up *mouse_up_event;
380 Eina_Bool click = EINA_FALSE;
381 Eina_Bool flick_state = EINA_FALSE;
383 Ecore_X_Window ev_win = 0;
385 info = (E_Move_Event_Motion_Info *)event_info;
386 m = e_mod_move_util_get();
388 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
389 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
391 if (!m || !mb || !info) return EINA_FALSE;
393 mouse_up_event = info->event_info;
394 E_CHECK_RETURN(mouse_up_event, EINA_FALSE);
395 if (mouse_up_event->button != 1)
399 "[MOVE] ev:%15.15s w:0x%08x ,angle:%d, (%d,%d) %s()\n",
400 "EVAS_OBJ", mb->bd->win, mb->angle, info->coord.x, info->coord.y,
406 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
409 click = e_mod_move_event_click_get(mwo->event);
411 E_CHECK_GOTO(click, error_cleanup);
413 e_mod_move_flick_data_update(mb, info->coord.x, info->coord.y);
414 flick_state = e_mod_move_flick_state_get2(mb);
416 if (_e_mod_move_mini_apptray_widget_mini_apptray_move_get(mini_apptray_widget))
418 mini_apptray_mb = e_mod_move_mini_apptray_find();
420 if (_e_mod_move_mini_apptray_widget_mini_apptray_flick_process(mini_apptray_widget,
428 // if mini_apptray animation is not called, must destory datas explicit
431 e_border_focus_set(mini_apptray_mb ->bd, 0, 0);
432 e_mod_move_mini_apptray_dim_hide(mini_apptray_mb );
433 e_mod_move_mini_apptray_objs_del(mini_apptray_mb );
437 // just work on flick action. so. currently block.
448 check_h = mini_apptray_mb->h;
449 if (check_h) check_h /= 2;
450 if (info->coord.y > (zone->h - check_h))
457 my = zone->h - mini_apptray_mb->h;
465 check_w = mini_apptray_mb->w;
466 if (check_w) check_w /= 2;
467 if (info->coord.x > (zone->w - check_w))
474 mx = zone->w - mini_apptray_mb->w;
482 check_h = mini_apptray_mb->h;
483 if (check_h) check_h /= 2;
484 if (info->coord.y < check_h)
486 my = mini_apptray_mb->h * -1;
494 check_w = mini_apptray_mb->w;
495 if (check_w) check_w /= 2;
496 if (info->coord.x < check_w)
498 mx = mini_apptray_mb->w * -1;
509 e_mod_move_mini_apptray_e_border_move(mini_apptray_mb, mx, my);
510 e_mod_move_mini_apptray_objs_animation_move(mini_apptray_mb, ax, ay);
514 // if flick check fail then, redirect event
515 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
518 ev_win = e_mod_move_event_win_get(mwo->event);
523 e_mod_move_mouse_event_send(ev_win, E_MOVE_MOUSE_EVENT_MOVE, mini_apptray_widget->pos);
524 e_mod_move_mouse_event_send(ev_win, E_MOVE_MOUSE_EVENT_DOWN, mini_apptray_widget->pos);
525 e_mod_move_mouse_event_send(ev_win, E_MOVE_MOUSE_EVENT_MOVE, info->coord);
526 e_mod_move_mouse_event_send(ev_win, E_MOVE_MOUSE_EVENT_UP, info->coord);
529 mini_apptray_widget->pos = info->coord; // save mouse up position
531 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
534 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
538 if (mb->flick_data) e_mod_move_flick_data_free(mb);
539 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_FALSE);
544 static Ecore_X_Window
545 _e_mod_move_mini_apptray_event_win_find(void *event_info)
547 E_Move_Event_Motion_Info *info = NULL;
548 E_Border *find_bd = NULL;
549 Ecore_X_Window win = 0;
550 info = (E_Move_Event_Motion_Info *)event_info;
552 E_CHECK_RETURN(info, 0);
554 find_bd = e_mod_move_util_border_find_by_pointer(info->coord.x, info->coord.y);
556 if (find_bd) win = find_bd->client.win;
560 "[MOVE] ev:%15.15s MINI_APPTRAY_EVENT_WIN_FIND w:0x%08x (%4d,%4d)\n",
561 "EVAS_OBJ", win, info->coord.x, info->coord.y);
567 _e_mod_move_mini_apptray_widget_obj_event_setup(E_Move_Mini_Apptray_Widget *mini_apptray_widget,
568 E_Move_Widget_Object *mwo)
570 E_CHECK(mini_apptray_widget);
573 mwo->event = e_mod_move_event_new(mini_apptray_widget->win, mwo->obj);
576 // change later ... below function used for just log
577 e_mod_move_event_data_type_set(mwo->event, E_MOVE_EVENT_DATA_TYPE_WIDGET_INDICATOR);
579 e_mod_move_event_angle_cb_set(mwo->event,
580 e_mod_move_util_win_prop_angle_get);
581 e_mod_move_event_cb_set(mwo->event, E_MOVE_EVENT_TYPE_MOTION_START,
582 _e_mod_move_mini_apptray_widget_cb_motion_start,
583 mini_apptray_widget);
584 e_mod_move_event_cb_set(mwo->event, E_MOVE_EVENT_TYPE_MOTION_MOVE,
585 _e_mod_move_mini_apptray_widget_cb_motion_move,
586 mini_apptray_widget);
587 e_mod_move_event_cb_set(mwo->event, E_MOVE_EVENT_TYPE_MOTION_END,
588 _e_mod_move_mini_apptray_widget_cb_motion_end,
589 mini_apptray_widget);
590 e_mod_move_event_propagate_type_set(mwo->event,
591 E_MOVE_EVENT_PROPAGATE_TYPE_NONE);
592 e_mod_move_event_win_find_cb_set(mwo->event,
593 _e_mod_move_mini_apptray_event_win_find);
597 _e_mod_move_mini_apptray_widget_event_send_policy_check(E_Move_Mini_Apptray_Widget *mini_apptray_widget,
600 int x = 0, y = 0, w = 0, h = 0;
601 Eina_Bool ret = EINA_FALSE;
603 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
605 e_mod_move_widget_objs_geometry_get(mini_apptray_widget->objs, &x ,&y, &w, &h);
607 if (E_INSIDE(pos.x, pos.y, x, y, w, h)) ret = EINA_TRUE;
612 /* externally accessible functions */
614 /* set current mini apptray widget */
616 e_mod_move_mini_apptray_widget_set(E_Move_Mini_Apptray_Widget *mini_apptray_widget)
620 m = e_mod_move_util_get();
623 if (m->mini_apptray_widget)
625 e_mod_move_mini_apptray_widget_del(m->mini_apptray_widget);
628 m->mini_apptray_widget = mini_apptray_widget;
631 /* get current mini_apptray widget */
632 EINTERN E_Move_Mini_Apptray_Widget *
633 e_mod_move_mini_apptray_widget_get(void)
636 m = e_mod_move_util_get();
637 E_CHECK_RETURN(m, NULL);
639 return m->mini_apptray_widget;
642 /* find mini_apptray widget target window */
643 // must update/change this function ( for mini_apptray policy )
645 e_mod_move_mini_apptray_widget_target_window_find(Ecore_X_Window *win)
648 E_Move_Border *find_mb = NULL;
649 Eina_Bool found = EINA_FALSE;
651 Eina_Bool ret = EINA_FALSE;
653 E_CHECK_RETURN(win, EINA_FALSE);
654 m = e_mod_move_util_get();
655 E_CHECK_RETURN(m, EINA_FALSE);
658 EINA_INLIST_REVERSE_FOREACH(m->borders, find_mb)
660 if (!find_mb->bd) continue;
661 // the first OnScreen & FullScreen Window
662 zone = find_mb->bd->zone;
664 && REGION_EQUAL_TO_ZONE(find_mb, zone) // check fullscreen
665 && (zone->id == 0)) // change zone->id comparing to bd's profile property (mobile)
673 && !(TYPE_INDICATOR_CHECK(find_mb))
674 && !(TYPE_APPTRAY_CHECK(find_mb))
675 && !(TYPE_MINI_APPTRAY_CHECK(find_mb))
676 && !(TYPE_QUICKPANEL_CHECK(find_mb))
677 && (find_mb->mini_apptray_state != E_MOVE_MINI_APPTRAY_STATE_OFF))
679 *win = find_mb->bd->client.win;
686 /* find mini_apptray widget's target window and apply mini_apptray widget control */
688 e_mod_move_mini_apptray_widget_apply(void)
691 E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
692 E_Move_Border *mini_apptray_mb = NULL;
693 Ecore_X_Window target_win;
695 m = e_mod_move_util_get();
698 if (m->screen_reader_state) return;
700 mini_apptray_mb = e_mod_move_mini_apptray_find();
701 if (!mini_apptray_mb)
703 if ((mini_apptray_widget = e_mod_move_mini_apptray_widget_get()))
704 e_mod_move_mini_apptray_widget_del(mini_apptray_widget);
708 if (e_mod_move_mini_apptray_widget_target_window_find(&target_win))
710 // if previous mini_apptray_widget is created
711 if ((mini_apptray_widget = e_mod_move_mini_apptray_widget_get()))
713 // if current mini_apptray_widget's win is equal to finded win
715 if ((mini_apptray_widget->win == target_win)) return;
718 // if current mini_apptray_widget's win is not equal to finded win
719 // then del previous mini_apptray_widget and add new mini_apptray_widget.
720 e_mod_move_mini_apptray_widget_del(mini_apptray_widget);
722 e_mod_move_mini_apptray_widget_set(e_mod_move_mini_apptray_widget_add(target_win));
727 //if previous mini_apptray_widget is not creagted
728 //then add new mini_apptray_widget.
729 e_mod_move_mini_apptray_widget_set(e_mod_move_mini_apptray_widget_add(target_win));
734 // if current window does not require mini_apptray_widget
735 // and previous mini_apptray_widget is created,
736 // then del previous mini_apptray_widget
737 if ((mini_apptray_widget = e_mod_move_mini_apptray_widget_get()))
739 e_mod_move_mini_apptray_widget_del(mini_apptray_widget);
740 e_mod_move_mini_apptray_widget_set(NULL);
745 /* create E_Move_Border related Mini_Apptray_Widget */
746 EINTERN E_Move_Mini_Apptray_Widget *
747 e_mod_move_mini_apptray_widget_add(Ecore_X_Window win)
750 E_Move_Border *mb = NULL;
751 E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
752 E_Move_Widget_Object *mwo = NULL;
759 m = e_mod_move_util_get();
760 E_CHECK_RETURN(m, EINA_FALSE);
762 E_CHECK_RETURN(e_mod_move_mini_apptray_find(), EINA_FALSE);
764 mb = e_mod_move_border_client_find(win);
765 E_CHECK_RETURN(mb, NULL);
767 mini_apptray_widget = E_NEW(E_Move_Mini_Apptray_Widget, 1);
768 E_CHECK_RETURN(mini_apptray_widget, NULL);
770 mini_apptray_widget->win = win;
771 mini_apptray_widget->objs = e_mod_move_widget_objs_add(m);
772 if (mini_apptray_widget->objs)
777 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].x;
778 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].y;
779 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].w;
780 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].h;
783 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].x;
784 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].y;
785 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].w;
786 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].h;
789 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].x;
790 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].y;
791 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].w;
792 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].h;
796 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].x;
797 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].y;
798 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].w;
799 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].h;
802 e_mod_move_widget_objs_move(mini_apptray_widget->objs, x, y);
803 e_mod_move_widget_objs_resize(mini_apptray_widget->objs, w, h);
804 e_mod_move_widget_objs_layer_set(mini_apptray_widget->objs, EVAS_LAYER_MAX);
805 e_mod_move_widget_objs_color_set(mini_apptray_widget->objs, 0, 0, 0, 0);
806 e_mod_move_widget_objs_show(mini_apptray_widget->objs);
807 e_mod_move_widget_objs_raise(mini_apptray_widget->objs);
809 // Set Input Shape Mask
811 if ((mini_apptray_widget->input_region_id = e_manager_comp_input_region_id_new(m->man)))
813 e_manager_comp_input_region_id_set(m->man,
814 mini_apptray_widget->input_region_id,
828 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
831 _e_mod_move_mini_apptray_widget_obj_event_setup(mini_apptray_widget, mwo);
833 return mini_apptray_widget;
836 if (mini_apptray_widget->objs) e_mod_move_widget_objs_del(mini_apptray_widget->objs);
837 memset(mini_apptray_widget, 0, sizeof(E_Move_Mini_Apptray_Widget));
838 E_FREE(mini_apptray_widget);
842 /* delete mini_apptray_widget */
844 e_mod_move_mini_apptray_widget_del(E_Move_Mini_Apptray_Widget *mini_apptray_widget)
847 E_Move_Border *mb = NULL;
848 E_Move_Border *mini_apptray_mb = NULL;
850 int x = 0; int y = 0;
852 E_CHECK(mini_apptray_widget);
853 m = e_mod_move_util_get();
855 if ((mb = e_mod_move_border_client_find(mini_apptray_widget->win)))
857 // compositor's input region free
859 if (mini_apptray_widget->input_region_id)
861 e_manager_comp_input_region_id_del(m->man,
862 mini_apptray_widget->input_region_id);
865 // if mini_apptray_widget is deleted, then mini_apptray's mirror object hide with animation
866 if (mini_apptray_widget->mini_apptray_move)
868 mini_apptray_mb = e_mod_move_mini_apptray_find();
869 E_CHECK_GOTO(mini_apptray_mb, error_cleanup);
870 zone = mini_apptray_mb->bd->zone;
880 y = mini_apptray_mb->h * -1;
883 x = mini_apptray_mb->w * -1;
892 if (e_mod_move_mini_apptray_objs_animation_state_get(mini_apptray_mb))
894 e_mod_move_mini_apptray_objs_animation_stop(mini_apptray_mb);
895 e_mod_move_mini_apptray_objs_animation_clear(mini_apptray_mb);
897 e_mod_move_mini_apptray_objs_add(mini_apptray_mb);
899 e_mod_move_mini_apptray_e_border_move(mini_apptray_mb, x, y);
900 e_mod_move_mini_apptray_objs_animation_move(mini_apptray_mb, x, y);
902 "[MOVE] ev:%15.15s Mini_Apptray Widget Deleted: Hide Mini Apptray %s():%d\n",
903 "EVAS_OBJ", __func__, __LINE__);
908 if (mini_apptray_widget->objs) e_mod_move_widget_objs_del(mini_apptray_widget->objs);
909 memset(mini_apptray_widget, 0, sizeof(E_Move_Mini_Apptray_Widget));
910 E_FREE(mini_apptray_widget);
911 if (m) m->mini_apptray_widget = NULL;
915 e_mod_move_mini_apptray_widget_angle_change(Ecore_X_Window win)
918 E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
919 Eina_Bool ret = EINA_FALSE;
920 E_Move_Border *mb = NULL;
926 m = e_mod_move_util_get();
927 E_CHECK_RETURN(m, EINA_FALSE);
929 mini_apptray_widget = e_mod_move_mini_apptray_widget_get();
930 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
932 if ((mini_apptray_widget->win == win))
934 if ((mb = e_mod_move_border_client_find(win)))
939 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].x;
940 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].y;
941 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].w;
942 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].h;
945 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].x;
946 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].y;
947 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].w;
948 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].h;
951 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].x;
952 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].y;
953 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].w;
954 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].h;
958 x = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].x;
959 y = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].y;
960 w = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].w;
961 h = m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].h;
964 e_mod_move_widget_objs_move(mini_apptray_widget->objs, x, y);
965 e_mod_move_widget_objs_resize(mini_apptray_widget->objs, w, h);
967 // Set Input Shape Mask
969 if (mini_apptray_widget->input_region_id)
971 e_manager_comp_input_region_id_set(m->man,
972 mini_apptray_widget->input_region_id,
983 e_mod_move_mini_apptray_widget_scrollable_check(void)
985 E_Move_Border *lockscr_mb = NULL;
986 E_Move_Border *taskmgr_mb = NULL;
987 E_Move_Border *pwlock_mb = NULL;
989 // if lockscreen is exist & visible, then do not show apptray
990 if ((lockscr_mb = e_mod_move_lockscreen_find()))
992 if (lockscr_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE)
995 "[MOVE] ev:%15.15s %s %s()\n",
996 "EVAS_OBJ","Lockscreen is exist.", __func__);
1000 // if taskmanage is exist & visible, then do not show apptray
1001 if ((taskmgr_mb = e_mod_move_taskmanager_find()))
1003 if (taskmgr_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE)
1006 "[MOVE] ev:%15.15s %s %s()\n",
1007 "EVAS_OBJ","TaskManager is exist.", __func__);
1012 // if pwlock is exist & visible, then do not show apptray
1013 if ((pwlock_mb = e_mod_move_pwlock_find()))
1015 if (pwlock_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE)
1018 "[MOVE] ev:%15.15s %s %s()\n",
1019 "EVAS_OBJ","PWLOCK is exist.", __func__);
1028 e_mod_move_mini_apptray_widget_click_get(E_Move_Mini_Apptray_Widget* mini_apptray_widget)
1030 Eina_Bool click = EINA_FALSE;
1031 E_Move_Widget_Object *mwo = NULL;
1034 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
1035 E_CHECK_RETURN(mini_apptray_widget->objs, EINA_FALSE);
1037 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
1040 click = e_mod_move_event_click_get(mwo->event);
1047 e_mod_move_mini_apptray_widget_event_clear(E_Move_Mini_Apptray_Widget* mini_apptray_widget)
1049 Eina_Bool click = EINA_FALSE;
1050 E_Move_Widget_Object *mwo = NULL;
1052 E_Move_Border *mb = NULL;
1054 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
1055 E_CHECK_RETURN(mini_apptray_widget->objs, EINA_FALSE);
1057 click = e_mod_move_mini_apptray_widget_click_get(mini_apptray_widget);
1058 E_CHECK_RETURN(click, EINA_FALSE);
1060 EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
1063 e_mod_move_event_data_clear(mwo->event);
1064 e_mod_move_event_click_set(mwo->event, EINA_FALSE);
1067 _e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_FALSE);
1069 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
1070 if (mb && mb->flick_data) e_mod_move_flick_data_free(mb);
1075 e_mod_move_mini_apptray_widget_state_change(Ecore_X_Window win, Eina_Bool state)
1077 E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
1079 if ((mini_apptray_widget = e_mod_move_mini_apptray_widget_get()))
1081 if ((mini_apptray_widget->win == win)
1084 // mini_apptray_state disable -> delete current mini_apptray_widget
1085 e_mod_move_mini_apptray_widget_del(mini_apptray_widget);
1086 e_mod_move_mini_apptray_widget_set(NULL);
1091 if (state) e_mod_move_mini_apptray_widget_apply();
1098 e_mod_move_mini_apptray_widget_angle_change_post_job(void)
1100 E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
1101 E_Move_Border *mb = NULL;
1102 E_Border *bd = NULL;
1103 E_Zone *zone = NULL;
1107 mini_apptray_widget = e_mod_move_mini_apptray_widget_get();
1108 E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
1110 mb = e_mod_move_border_client_find(mini_apptray_widget->win);
1111 E_CHECK_RETURN(mb, EINA_FALSE);
1114 E_CHECK_RETURN(bd, EINA_FALSE);
1117 E_CHECK_RETURN(zone, EINA_FALSE);
1121 if (e_mod_move_mini_apptray_widget_click_get(mini_apptray_widget))
1126 x = zone->x + zone->w;
1127 y = zone->y + zone->h;
1130 x = zone->x + zone->w;
1131 y = zone->y + zone->h;
1147 e_mod_move_flick_data_init(mb, x, y);