forked from enlightenment/enlightenment
break out X shape rect check loop into helper function
This commit is contained in:
parent
ae4e98b856
commit
c24d3c60aa
|
@ -2536,6 +2536,46 @@ _e_comp_x_hook_client_eval_end(void *d EINA_UNUSED, E_Client *ec)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_e_comp_x_client_shape_rects_check(E_Client *ec, Ecore_X_Rectangle *rects, int num)
|
||||||
|
{
|
||||||
|
Eina_Bool changed = 1;
|
||||||
|
Ecore_X_Rectangle *orects;
|
||||||
|
|
||||||
|
if (((unsigned int)num == ec->shape_rects_num) && (ec->shape_rects))
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
orects = (Ecore_X_Rectangle*)ec->shape_rects;
|
||||||
|
changed = 0;
|
||||||
|
for (i = 0; i < num; i++)
|
||||||
|
{
|
||||||
|
E_RECTS_CLIP_TO_RECT(rects[i].x, rects[i].y,
|
||||||
|
rects[i].width, rects[i].height, 0, 0, ec->client.w, ec->client.h);
|
||||||
|
|
||||||
|
if ((orects[i].x != rects[i].x) ||
|
||||||
|
(orects[i].y != rects[i].y) ||
|
||||||
|
(orects[i].width != rects[i].width) ||
|
||||||
|
(orects[i].height != rects[i].height))
|
||||||
|
{
|
||||||
|
changed = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (changed)
|
||||||
|
{
|
||||||
|
E_FREE(ec->shape_rects);
|
||||||
|
ec->shape_rects = (Eina_Rectangle*)rects;
|
||||||
|
ec->shape_rects_num = num;
|
||||||
|
ec->shape_changed = 1;
|
||||||
|
e_comp_shape_queue(ec->comp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
free(rects);
|
||||||
|
return changed;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_comp_x_hook_client_post_new_client(void *d EINA_UNUSED, E_Client *ec)
|
_e_comp_x_hook_client_post_new_client(void *d EINA_UNUSED, E_Client *ec)
|
||||||
{
|
{
|
||||||
|
@ -2585,46 +2625,12 @@ _e_comp_x_hook_client_post_new_client(void *d EINA_UNUSED, E_Client *ec)
|
||||||
|
|
||||||
if (ec->need_shape_export)
|
if (ec->need_shape_export)
|
||||||
{
|
{
|
||||||
Ecore_X_Rectangle *rects, *orects;
|
Ecore_X_Rectangle *rects;
|
||||||
int num;
|
int num;
|
||||||
|
|
||||||
rects = ecore_x_window_shape_rectangles_get(e_client_util_win_get(ec), &num);
|
rects = ecore_x_window_shape_rectangles_get(e_client_util_win_get(ec), &num);
|
||||||
if (rects)
|
if (rects)
|
||||||
{
|
_e_comp_x_client_shape_rects_check(ec, rects, num);
|
||||||
int changed = 1;
|
|
||||||
|
|
||||||
if (((unsigned int)num == ec->shape_rects_num) && (ec->shape_rects))
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
orects = (Ecore_X_Rectangle*)ec->shape_rects;
|
|
||||||
changed = 0;
|
|
||||||
for (i = 0; i < num; i++)
|
|
||||||
{
|
|
||||||
E_RECTS_CLIP_TO_RECT(rects[i].x, rects[i].y,
|
|
||||||
rects[i].width, rects[i].height, 0, 0, ec->client.w, ec->client.h);
|
|
||||||
|
|
||||||
if ((orects[i].x != rects[i].x) ||
|
|
||||||
(orects[i].y != rects[i].y) ||
|
|
||||||
(orects[i].width != rects[i].width) ||
|
|
||||||
(orects[i].height != rects[i].height))
|
|
||||||
{
|
|
||||||
changed = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (changed)
|
|
||||||
{
|
|
||||||
E_FREE(ec->shape_rects);
|
|
||||||
ec->shape_rects = (Eina_Rectangle*)rects;
|
|
||||||
ec->shape_rects_num = num;
|
|
||||||
ec->shape_changed = 1;
|
|
||||||
e_comp_shape_queue(ec->comp);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
free(rects);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
E_FREE(ec->shape_rects);
|
E_FREE(ec->shape_rects);
|
||||||
|
|
Loading…
Reference in New Issue