EINTERN Eina_Bool e_mod_comp_pixmap_rotation_handler_configure(E_Comp_Win *cw, int w, int h) { Ecore_X_Window win; E_CHECK_RETURN(cw, 0); E_CHECK_RETURN(cw->pixrot, 0); E_CHECK_RETURN(((w == cw->w) && (h == cw->h)), 0); win = e_mod_comp_util_client_xid_get(cw); /* backup below obj */ Eina_Bool bottom = EINA_FALSE; Evas_Object *below_obj = evas_object_below_get(cw->shobj); if (!below_obj) { if (evas_object_bottom_get(cw->c->evas) == cw->shobj) { L(LT_EVENT_X, "[COMP] %31s w:0x%08x bd:%s shobj is bottom.\n", "PIX_ROT", e_mod_comp_util_client_xid_get(cw), cw->bd ? "O" : "X"); bottom = EINA_TRUE; } } if (cw->obj) { evas_object_hide(cw->obj); evas_object_del(cw->obj); cw->obj = NULL; } if (cw->shobj) { evas_object_hide(cw->obj); evas_object_del(cw->shobj); cw->shobj = NULL; } cw->shobj = edje_object_add(cw->c->evas); cw->obj = evas_object_image_filled_add(cw->c->evas); evas_object_image_colorspace_set(cw->obj, EVAS_COLORSPACE_ARGB8888); if (cw->argb) evas_object_image_alpha_set(cw->obj, 1); else evas_object_image_alpha_set(cw->obj, 0); e_mod_comp_win_type_setup(cw); e_mod_comp_win_shadow_setup(cw); e_mod_comp_win_cb_setup(cw); evas_object_show(cw->obj); evas_object_pass_events_set(cw->obj, 1); evas_object_pass_events_set(cw->shobj, 1); /* restore stack */ if (bottom) below_obj = evas_object_below_get(cw->shobj); evas_object_stack_above(cw->shobj, below_obj); L(LT_EVENT_X, "[COMP] %31s w:0x%08x bd:%s shobj restore stack.\n", "PIX_ROT", e_mod_comp_util_client_xid_get(cw), cw->bd ? "O" : "X"); e_mod_comp_pixmap_rotation_done_send (win, ATOM_CM_PIXMAP_ROTATION_RESIZE_PIXMAP); return EINA_TRUE; }
//--// callbacks static int _dnd_sorter(const void *d1, const void *d2) { Evas_Object *o1 = (Evas_Object *)d1; Evas_Object *o2 = (Evas_Object *)d2; Eina_List *o1l = NULL, *o2l = NULL, *l1, *l2, *list, *l; Evas_Object *common = NULL, *o; while (o1) { o1l = eina_list_prepend(o1l, o1); o1 = evas_object_smart_parent_get(o1); } while (o2) { o2l = eina_list_prepend(o2l, o2); o2 = evas_object_smart_parent_get(o2); } o1 = o1l->data; o2 = o2l->data; if (o1 != o2) { // different toplevels o = evas_object_bottom_get(evas_object_evas_get(o1)); while (o) { if (o1 == o) { // o1 below o2 eina_list_free(o1l); eina_list_free(o2l); return -1; } if (o2 == o) { // o2 below o1 eina_list_free(o1l); eina_list_free(o2l); return 1; } o = evas_object_above_get(o); } } for (l1 = o1l, l2 = o2l; l1 && l2; l1 = l1->next, l2 = l2->next) { o1 = l1->data; o2 = l2->data; if (o1 != o2) { // children differ, thus parent is common list = evas_object_smart_members_get(common); for (l = list; l; l = l->next) { o = l->data; if (o1 == o) { // o1 below o2 eina_list_free(list); eina_list_free(o1l); eina_list_free(o2l); return -1; } if (o2 == o) { // o2 below o1 eina_list_free(list); eina_list_free(o1l); eina_list_free(o2l); return 1; } } eina_list_free(list); break; } common = o1; } eina_list_free(o1l); eina_list_free(o2l); return 0; }
EvasObject* EvasCanvas::objectAtBottom() const { return EvasObject::objectLink( evas_object_bottom_get( o ) ); }