EINTERN Eina_Bool
e_comp_wl_subsurface_global_coord_get(E_Client *ec, int *x, int *y)
{
+ E_Client *parent;
E_Comp_Wl_Subsurf_Data *sdata;
+ int ret_x = 0, ret_y = 0;
EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(ec->comp_data, EINA_FALSE);
sdata = ec->comp_data->sub.data;
EINA_SAFETY_ON_NULL_RETURN_VAL(sdata, EINA_FALSE);
+ while (1)
+ {
+ ret_x += sdata->position.x;
+ ret_y += sdata->position.y;
+
+ parent = sdata->parent;
+ if (!parent)
+ break;
+
+ sdata = _e_comp_wl_subsurface_data_get(parent);
+ if (!sdata)
+ {
+ ret_x += parent->x;
+ ret_y += parent->y;
+ break;
+ }
+ }
+
if (x)
- *x = sdata->position.x + (sdata->parent ? sdata->parent->x : 0);
+ *x = ret_x;
if (y)
- *y = sdata->position.y + (sdata->parent ? sdata->parent->y : 0);
+ *y = ret_y;
return EINA_TRUE;
}