e_maximize_client_dock_fit(E_Client *ec, int *x1, int *yy1, int *x2, int *y2)
{
E_Client *ec2;
+ E_Zone *zone, *ec2_zone;
int cx1, cx2, cy1, cy2;
- cx1 = ec->zone->x;
+ zone = e_comp_zone_find_by_ec(ec);
+ if (!zone) return;
+
+ cx1 = zone->x;
if (x1) cx1 = *x1;
- cy1 = ec->zone->y;
+ cy1 = zone->y;
if (yy1) cy1 = *yy1;
- cx2 = ec->zone->x + ec->zone->w;
+ cx2 = zone->x + zone->w;
if (x2) cx2 = *x2;
- cy2 = ec->zone->y + ec->zone->h;
+ cy2 = zone->y + zone->h;
if (y2) cy2 = *y2;
E_CLIENT_FOREACH(ec2)
LEFT
} edge = NONE;
- if ((ec2->zone != ec->zone) || (ec2 == ec) ||
+ ec2_zone = e_comp_zone_find_by_ec(ec2);
+ if ((ec2_zone != zone) || (ec2 == ec) ||
(ec2->netwm.type != E_WINDOW_TYPE_DOCK))
continue;
- if (((ec2->x == ec2->zone->x) || ((ec2->x + ec2->w) == (ec2->zone->x + ec2->zone->w))) &&
- ((ec2->y == ec2->zone->y) || ((ec2->x + ec2->h) == (ec2->zone->x + ec2->zone->h))))
+ if (((ec2->x == ec2_zone->x) || ((ec2->x + ec2->w) == (ec2_zone->x + ec2_zone->w))) &&
+ ((ec2->y == ec2_zone->y) || ((ec2->x + ec2->h) == (ec2_zone->x + ec2_zone->h))))
{
/* corner */
if (ec2->w > ec2->h)
{
- if (ec2->y == ec2->zone->y)
+ if (ec2->y == ec2_zone->y)
edge = TOP;
- else if ((ec2->y + ec2->h) == (ec2->zone->y + ec2->zone->h))
+ else if ((ec2->y + ec2->h) == (ec2_zone->y + ec2_zone->h))
edge = BOTTOM;
}
else
{
- if ((ec2->x + ec2->w) == (ec2->zone->x + ec2->zone->w))
+ if ((ec2->x + ec2->w) == (ec2_zone->x + ec2_zone->w))
edge = RIGHT;
- else if (ec2->x == ec2->zone->x)
+ else if (ec2->x == ec2_zone->x)
edge = LEFT;
}
}
else
{
- if (ec2->y == ec2->zone->y)
+ if (ec2->y == ec2_zone->y)
edge = TOP;
- else if ((ec2->y + ec2->h) == (ec2->zone->y + ec2->zone->h))
+ else if ((ec2->y + ec2->h) == (ec2_zone->y + ec2_zone->h))
edge = BOTTOM;
- else if (ec2->x == ec2->zone->x)
+ else if (ec2->x == ec2_zone->x)
edge = LEFT;
- else if ((ec2->x + ec2->w) == (ec2->zone->x + ec2->zone->w))
+ else if ((ec2->x + ec2->w) == (ec2_zone->x + ec2_zone->w))
edge = RIGHT;
}
Eina_List *rects = NULL;
E_Maximize_Rect *r;
E_Client *ec2;
+ E_Zone *zone, *ec2_zone;
+
+ zone = e_comp_zone_find_by_ec(ec);
+ if (!zone) return;
E_CLIENT_FOREACH(ec2)
{
- if ((ec2->zone != ec->zone) || (ec == ec2) || (ec2->desk != ec->desk && !ec2->sticky) || (ec2->iconic))
+ ec2_zone = e_comp_zone_find_by_ec(ec2);
+ if ((ec2_zone != zone) || (ec == ec2) || (ec2->desk != ec->desk && !ec2->sticky) || (ec2->iconic))
continue;
OBSTACLE(ec2->x, ec2->y, ec2->x + ec2->w, ec2->y + ec2->h);
}
else
{
int bx, by, bw, bh;
+ E_Zone *zone;
+
+ zone = e_comp_zone_find_by_ec(ec);
+ if (!zone) return;
- bx = E_CLAMP(ec->x, ec->zone->x, ec->zone->x + ec->zone->w);
- by = E_CLAMP(ec->y, ec->zone->y, ec->zone->y + ec->zone->h);
- bw = E_CLAMP(ec->w, 0, ec->zone->w);
- bh = E_CLAMP(ec->h, 0, ec->zone->h);
+ bx = E_CLAMP(ec->x, zone->x, zone->x + zone->w);
+ by = E_CLAMP(ec->y, zone->y, zone->y + zone->h);
+ bw = E_CLAMP(ec->w, 0, zone->w);
+ bh = E_CLAMP(ec->h, 0, zone->h);
if ((dir & E_MAXIMIZE_DIRECTION) == E_MAXIMIZE_HORIZONTAL)
_e_maximize_client_rects_fill_horiz(ec, rects, x1, x2, &bx, &by, &bw, &bh);
int hx1, hy1, hx2, hy2;
int vx1, vy1, vx2, vy2;
int bx, by, bw, bh;
+ E_Zone *zone;
- hx1 = vx1 = ec->zone->x;
+ zone = e_comp_zone_find_by_ec(ec);
+ if (!zone) return;
+
+ hx1 = vx1 = zone->x;
if (x1) hx1 = vx1 = *x1;
- hy1 = vy1 = ec->zone->y;
+ hy1 = vy1 = zone->y;
if (yy1) hy1 = vy1 = *yy1;
- hx2 = vx2 = ec->zone->x + ec->zone->w;
+ hx2 = vx2 = zone->x + zone->w;
if (x2) hx2 = vx2 = *x2;
- hy2 = vy2 = ec->zone->y + ec->zone->h;
+ hy2 = vy2 = zone->y + zone->h;
if (y2) hy2 = vy2 = *y2;
/* Init working values, try maximizing horizontally first */
Eina_List *l;
E_Maximize_Rect *rect;
int cx1, cx2;
+ E_Zone *zone;
+
+ zone = e_comp_zone_find_by_ec(ec);
+ if (!zone) return;
- cx1 = ec->zone->x;
+ cx1 = zone->x;
if (x1) cx1 = *x1;
- cx2 = ec->zone->x + ec->zone->w;
+ cx2 = zone->x + zone->w;
if (x2) cx2 = *x2;
/* Expand left */
EINA_LIST_FOREACH(rects, l, rect)
{
if ((rect->x2 > cx1) && (rect->x2 <= *bx) &&
- E_INTERSECTS(0, rect->yy1, ec->zone->w, (rect->y2 - rect->yy1), 0, *by, ec->zone->w, *bh))
+ E_INTERSECTS(0, rect->yy1, zone->w, (rect->y2 - rect->yy1), 0, *by, zone->w, *bh))
{
cx1 = rect->x2;
}
EINA_LIST_FOREACH(rects, l, rect)
{
if ((rect->x1 < cx2) && (rect->x1 >= (*bx + *bw)) &&
- E_INTERSECTS(0, rect->yy1, ec->zone->w, (rect->y2 - rect->yy1), 0, *by, ec->zone->w, *bh))
+ E_INTERSECTS(0, rect->yy1, zone->w, (rect->y2 - rect->yy1), 0, *by, zone->w, *bh))
{
cx2 = rect->x1;
}
Eina_List *l;
E_Maximize_Rect *rect;
int cy1, cy2;
+ E_Zone *zone;
+
+ zone = e_comp_zone_find_by_ec(ec);
+ if (!zone) return;
- cy1 = ec->zone->y;
+ cy1 = zone->y;
if (yy1) cy1 = *yy1;
- cy2 = ec->zone->y + ec->zone->h;
+ cy2 = zone->y + zone->h;
if (y2) cy2 = *y2;
/* Expand up */
EINA_LIST_FOREACH(rects, l, rect)
{
if ((rect->y2 > cy1) && ((rect->yy1 <= *by) || (rect->y2 <= *by)) &&
- E_INTERSECTS(rect->x1, 0, (rect->x2 - rect->x1), ec->zone->h, *bx, 0, *bw, ec->zone->h))
+ E_INTERSECTS(rect->x1, 0, (rect->x2 - rect->x1), zone->h, *bx, 0, *bw, zone->h))
{
cy1 = rect->y2;
}
EINA_LIST_FOREACH(rects, l, rect)
{
if ((rect->yy1 < cy2) && (rect->yy1 >= (*by + *bh)) &&
- E_INTERSECTS(rect->x1, 0, (rect->x2 - rect->x1), ec->zone->h, *bx, 0, *bw, ec->zone->h))
+ E_INTERSECTS(rect->x1, 0, (rect->x2 - rect->x1), zone->h, *bx, 0, *bw, zone->h))
{
cy2 = rect->yy1;
}