add comp util functions for returning the layer and effective layer of a comp object

This commit is contained in:
Mike Blumenkrantz 2013-02-20 10:51:58 +00:00
parent 35d246bbf4
commit 159373a340
2 changed files with 62 additions and 0 deletions

View File

@ -5208,3 +5208,53 @@ e_comp_block_window_del(void)
c->block_win = 0;
}
}
EAPI unsigned int
e_comp_e_object_layer_get(const E_Object *obj)
{
if (!obj) return 0;
switch (obj->type)
{
E_Gadcon *gc;
case E_GADCON_TYPE:
gc = (E_Gadcon *)obj;
if (gc->shelf)
{
if (gc->shelf->popup)
return E_COMP_CANVAS_LAYER_LAYOUT + gc->shelf->popup->layer;
return E_COMP_CANVAS_LAYER_DESKTOP_TOP;
}
if (!gc->toolbar) return E_COMP_CANVAS_LAYER_DESKTOP;
return E_COMP_CANVAS_LAYER_LAYOUT + gc->toolbar->fwin->border->layer;
case E_GADCON_CLIENT_TYPE:
gc = ((E_Gadcon_Client *)(obj))->gadcon;
if (gc->shelf)
{
if (gc->shelf->popup)
return E_COMP_CANVAS_LAYER_LAYOUT + gc->shelf->popup->layer;
return E_COMP_CANVAS_LAYER_DESKTOP_TOP;
}
if (!gc->toolbar) return E_COMP_CANVAS_LAYER_DESKTOP;
return E_COMP_CANVAS_LAYER_LAYOUT + gc->toolbar->fwin->border->layer;
case E_WIN_TYPE:
return E_COMP_CANVAS_LAYER_LAYOUT + ((E_Win *)(obj))->border->layer;
case E_ZONE_TYPE:
return E_COMP_CANVAS_LAYER_DESKTOP;
case E_BORDER_TYPE:
return E_COMP_CANVAS_LAYER_LAYOUT + ((E_Win *)(obj))->border->layer;
case E_POPUP_TYPE:
return ((E_Popup *)(obj))->comp_layer + ((E_Popup *)(obj))->layer;
/* FIXME: add more types as needed */
default:
break;
}
return 0;
}

View File

@ -256,6 +256,7 @@ EAPI void e_comp_ignore_win_add(Ecore_X_Window win);
#define E_LAYER_LAYOUT_ADD_ABOVE(obj, layer) e_comp_canvas_layer_set(obj, E_COMP_CANVAS_LAYER_LAYOUT, layer, E_COMP_CANVAS_STACK_ABOVE)
EAPI void e_comp_canvas_layer_set(Evas_Object *obj, E_Comp_Canvas_Layer comp_layer, E_Layer layer, E_Comp_Canvas_Stack stack);
EAPI unsigned int e_comp_e_object_layer_get(const E_Object *obj);
static inline E_Comp *
e_comp_util_evas_object_comp_get(Evas_Object *obj)
@ -281,6 +282,17 @@ e_comp_win_ignore_events_set(E_Comp_Win *cw, Eina_Bool ignore)
evas_object_pass_events_set(cw->shobj, ignore);
}
static inline unsigned int
e_comp_e_object_layer_effective_get(const E_Object *obj)
{
unsigned int layer;
layer = e_comp_e_object_layer_get(obj);
if ((layer > E_COMP_CANVAS_LAYER_LAYOUT) && (layer < E_COMP_CANVAS_LAYER_POPUP))
layer = E_COMP_CANVAS_LAYER_LAYOUT;
return layer;
}
EAPI void e_comp_util_wins_print(const E_Comp *c);
#endif