fix shape change handling to... skip same shape changes

SVN revision: 22389
This commit is contained in:
Carsten Haitzler 2006-04-29 01:19:56 +00:00
parent c95c6eb12e
commit 3295ab33b7
2 changed files with 1369 additions and 768 deletions

View File

@ -3,6 +3,9 @@
*/
#include "e.h"
/* FIXME: this code is quite bad.. formatting, correctness, list management -
* overly long and complex... */
typedef struct _E_Maximize_Rect E_Maximize_Rect;
struct _E_Maximize_Rect
@ -27,21 +30,18 @@ struct _m_zone
}
static void _e_maximize_border_rects_fill(E_Border *bd, Evas_List *list, int *x1, int *y1, int *x2, int *y2);
static int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Client *gmc);
int _e_mzone_cb_square_reverse_sort(void *e1, void *e2);
int _e_mzone_cb_width_reverse_sort(void *e1, void *e2);
int _e_mzone_cb_height_reverse_sort(void *e1, void *e2); // not used yet
static int _e_mzone_gadman_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Client *gmc);
static int _e_mzone_shelf_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Shelf *es);
static int _e_mzone_cb_square_reverse_sort(void *e1, void *e2);
static int _e_mzone_cb_width_reverse_sort(void *e1, void *e2);
static int _e_mzone_cb_height_reverse_sort(void *e1, void *e2); // not used yet
EAPI void
e_maximize_border_gadman_fit(E_Border *bd, int *x1, int *y1, int *x2, int *y2)
{
Evas_List *l, *ll;
Evas_List *mzones = NULL;
Evas_List *tmp_mzones = NULL;
struct _m_zone *mzone = NULL;
mzone = (struct _m_zone *)malloc(sizeof(struct _m_zone));
@ -62,12 +62,13 @@ e_maximize_border_gadman_fit(E_Border *bd, int *x1, int *y1, int *x2, int *y2)
mzones = evas_list_append(mzones, mzone);
for(l = bd->zone->container->gadman->clients; l; l = l->next)
for (l = bd->zone->container->gadman->clients; l; l = l->next)
{
E_Gadman_Client *gmc;
gmc = l->data;
if (gmc->zone != bd->zone || gmc->policy & E_GADMAN_POLICY_ALLOW_OVERLAP) continue;
if ((gmc->zone != bd->zone) ||
(gmc->policy & E_GADMAN_POLICY_ALLOW_OVERLAP)) continue;
tmp_mzones = mzones;
mzones = NULL;
@ -77,13 +78,43 @@ e_maximize_border_gadman_fit(E_Border *bd, int *x1, int *y1, int *x2, int *y2)
int res;
mzone = ll->data;
res = _e_mzone_split(&mzones, mzone, gmc);
res = _e_mzone_gadman_split(&mzones, mzone, gmc);
if (res == 0)
{
mzones = evas_list_append(mzones, mzone);
ll->data = NULL;
}
else if (res == 2)
;
else if (res == -1)
; /* mem problems. Let ignor them yet */
if (ll->data != NULL)
{
free(ll->data);
ll->data = NULL;
}
}
evas_list_free(tmp_mzones);
tmp_mzones = NULL;
}
for (l = e_shelf_list(); l; l = l->next)
{
E_Shelf *es;
es = l->data;
if (es->zone != bd->zone) continue;
printf("ES\n");
for (ll = tmp_mzones; ll; ll = ll->next)
{
int res;
mzone = ll->data;
res = _e_mzone_shelf_split(&mzones, mzone, es);
if (res == 0)
{
if(mzones == NULL)
mzones = evas_list_append(mzones, mzone);
else
evas_list_append(mzones , mzone);
ll->data = NULL;
}
else if (res == 2)
@ -116,7 +147,7 @@ e_maximize_border_gadman_fit(E_Border *bd, int *x1, int *y1, int *x2, int *y2)
{
if ( ((struct _m_zone *)l->data)->area ==
((struct _m_zone *)mzones->data)->area)
evas_list_append(mzones, l->data);
mzones = evas_list_append(mzones, l->data);
else
free(l->data);
}
@ -267,6 +298,15 @@ e_maximize_border_gadman_fill(E_Border *bd, int *x1, int *y1, int *x2, int *y2)
if ((gmc->zone != bd->zone)) continue;
OBSTACLE(gmc->x, gmc->y, gmc->x + gmc->w, gmc->y + gmc->h);
}
for (l = e_shelf_list(); l; l = l->next)
{
E_Shelf *es;
es = l->data;
if (es->zone != bd->zone) continue;
printf("OBS: %i %i %ix%i\n", es->x, es->y, es->w, es->h);
OBSTACLE(es->x, es->y, es->x + es->w, es->y + es->h);
}
if (rects)
{
_e_maximize_border_rects_fill(bd, rects, x1, y1, x2, y2);
@ -302,7 +342,7 @@ e_maximize_border_border_fill(E_Border *bd, int *x1, int *y1, int *x2, int *y2)
}
}
void
static void
_e_maximize_border_rects_fill(E_Border *bd, Evas_List *rects, int *x1, int *y1, int *x2, int *y2)
{
Evas_List *l;
@ -388,7 +428,8 @@ _e_maximize_border_rects_fill(E_Border *bd, Evas_List *rects, int *x1, int *y1,
if (y2) *y2 = cy2;
}
int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Client *gmc)
static int
_e_mzone_gadman_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Client *gmc)
{
int ii;
int mzone_splitted = 0;
@ -407,7 +448,7 @@ int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Cl
for (ii = 0; ii < 8; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if(mzone_split == NULL)
if (mzone_split == NULL)
return -1;
switch(ii)
@ -461,10 +502,7 @@ int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Cl
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
} // if
else if (gmc->x + gmc->w > mzone->x1 && gmc->x + gmc->w < mzone->x2 &&
@ -505,10 +543,7 @@ int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Cl
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x > mzone->x1 && gmc->y <= mzone->y1 &&
@ -561,10 +596,7 @@ int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Cl
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x > mzone->x1 && gmc->x < mzone->x2 &&
@ -606,10 +638,7 @@ int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Cl
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x > mzone->x1 && gmc->x < mzone->x2 &&
@ -663,10 +692,7 @@ int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Cl
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x > mzone->x1 && gmc->x < mzone->x2 &&
@ -708,10 +734,7 @@ int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Cl
mzone_split->y2 = gmc->y;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x > mzone->x1 &&
@ -765,10 +788,7 @@ int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Cl
mzone_split->y2 = mzone->y2;
break;
}
if(*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x <= mzone->x1 &&
@ -810,10 +830,7 @@ int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Cl
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x <= mzone->x1 &&
@ -867,10 +884,7 @@ int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Cl
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x <= mzone->x1 && gmc->y <= mzone->y1 &&
@ -888,10 +902,7 @@ int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Cl
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
else if (gmc->x <= mzone->x1 &&
gmc->x + gmc->w >= mzone->x2 &&
@ -940,10 +951,7 @@ int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Cl
mzone_split->x2 = mzone->x2;
mzone_split->y2 = gmc->y;
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
else if (gmc->x <= mzone->x1 &&
gmc->y <= mzone->y1 &&
@ -960,10 +968,7 @@ int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Cl
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
else if (gmc->x > mzone->x1 &&
gmc->x + gmc->w < mzone->x2 &&
@ -992,10 +997,7 @@ int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Cl
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (gmc->x > mzone->x1 && gmc->x < mzone->x2 &&
@ -1013,10 +1015,7 @@ int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Cl
mzone_split->x2 = gmc->x;
mzone_split->y2 = mzone->y2;
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
else if (gmc->x <= mzone->x1 && gmc->y <= mzone->y1 &&
gmc->x + gmc->w >= mzone->x2 && gmc->y + gmc->h >= mzone->y2)
@ -1026,7 +1025,607 @@ int _e_mzone_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Gadman_Cl
return mzone_splitted;
}
int _e_mzone_cb_square_reverse_sort(void *e1, void *e2)
static int
_e_mzone_shelf_split(Evas_List **add_splits_to, struct _m_zone *mzone, E_Shelf *es)
{
int ii;
int mzone_splitted = 0;
struct _m_zone *mzone_split = NULL;
if (mzone == NULL || es == NULL)
return -1;
if ((mzone->x2 - mzone->x1) <= 0 || (mzone->y2 - mzone->y1) <= 0)
return 1;
if (es->x > mzone->x1 && es->y > mzone->y1 &&
es->x + es->w < mzone->x2 && es->y + es->h < mzone->y2)
{
mzone_splitted = 1;
for (ii = 0; ii < 8; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = es->y;
break;
case 1:
mzone_split->x1 = es->x + es->w;
mzone_split->y1 = es->y;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = es->y + es->h;
break;
case 2:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = es->y + es->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 3:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = es->y;
mzone_split->x2 = es->x;
mzone_split->y2 = es->y + es->h;
break;
case 4:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = es->x;
mzone_split->y2 = mzone->y2;
break;
case 5:
mzone_split->x1 = es->x;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = es->x + es->w;
mzone_split->y2 = es->y;
break;
case 6:
mzone_split->x1 = es->x + es->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 7:
mzone_split->x1 = es->x;
mzone_split->y1 = es->y + es->h;
mzone_split->x2 = es->x + es->w;
mzone_split->y2 = mzone->y2;
break;
}
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
}
} // if
else if (es->x + es->w > mzone->x1 && es->x + es->w < mzone->x2 &&
es->y + es->h > mzone->y1 && es->y + es->h < mzone->y2 &&
es->x <= mzone->x1 && es->y <= mzone->y1)
{
mzone_splitted = 1;
for (ii = 0; ii < 4; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = es->x + es->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = es->y + es->h;
break;
case 1:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = es->y + es->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 2:
mzone_split->x1 = es->x + es->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 3:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = es->y + es->h;
mzone_split->x2 = es->x + es->w;
mzone_split->y2 = mzone->y2;
break;
}
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
}
}
else if (es->x > mzone->x1 && es->y <= mzone->y1 &&
es->x + es->w < mzone->x2 &&
es->y + es->h > mzone->y1 && es->y + es->h < mzone->y2)
{
mzone_splitted = 1;
for (ii = 0; ii < 6; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = es->x;
mzone_split->y2 = es->y + es->h;
break;
case 1:
mzone_split->x1 = es->x + es->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = es->y + es->h;
break;
case 2:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = es->y + es->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 3:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = es->x;
mzone_split->y2 = mzone->y2;
break;
case 4:
mzone_split->x1 = es->x;
mzone_split->y1 = es->y + es->h;
mzone_split->x2 = es->x + es->w;
mzone_split->y2 = mzone->y2;
break;
case 5:
mzone_split->x1 = es->x + es->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
}
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
}
}
else if (es->x > mzone->x1 && es->x < mzone->x2 &&
es->y + es->h > mzone->y1 && es->y + es->h < mzone->y2 &&
es->y <= mzone->y1 &&
es->x + es->w >= mzone->x2)
{
mzone_splitted = 1;
for (ii = 0; ii < 4; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = es->x;
mzone_split->y2 = es->y + es->h;
break;
case 1:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = es->y + es->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 2:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = es->x;
mzone_split->y2 = mzone->y2;
break;
case 3:
mzone_split->x1 = es->x;
mzone_split->y1 = es->y + es->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
}
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
}
}
else if (es->x > mzone->x1 && es->x < mzone->x2 &&
es->y > mzone->y1 &&
es->y + es->h < mzone->y2 &&
es->x + es->w >= mzone->x2)
{
mzone_splitted = 1;
for (ii = 0; ii < 6; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = es->y;
break;
case 1:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = es->y;
mzone_split->x2 = es->x;
mzone_split->y2 = es->y + es->h;
break;
case 2:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = es->y + es->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 3:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = es->x;
mzone_split->y2 = mzone->y2;
break;
case 4:
mzone_split->x1 = es->x;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = es->y;
break;
case 5:
mzone_split->x1 = es->x;
mzone_split->y1 = es->y + es->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
}
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
}
}
else if (es->x > mzone->x1 && es->x < mzone->x2 &&
es->y > mzone->y1 && es->y < mzone->y2 &&
es->x + es->w >= mzone->x2 &&
es->y + es->h >= mzone->y2)
{
mzone_splitted = 1;
for (ii = 0; ii < 4; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = es->y;
break;
case 1:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = es->y;
mzone_split->x2 = es->x;
mzone_split->y2 = mzone->y2;
break;
case 2:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = es->x;
mzone_split->y2 = mzone->y2;
break;
case 3:
mzone_split->x1 = es->x;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = es->y;
break;
}
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
}
}
else if (es->x > mzone->x1 &&
es->y > mzone->y1 && es->y < mzone->y2 &&
es->x + es->w < mzone->x2 &&
es->y + es->h >= mzone->y2)
{
mzone_splitted = 1;
for (ii = 0; ii < 6; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = es->y;
break;
case 1:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = es->y;
mzone_split->x2 = es->x;
mzone_split->y2 = mzone->y2;
break;
case 2:
mzone_split->x1 = es->x + es->w;
mzone_split->y1 = es->y;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 3:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = es->x;
mzone_split->y2 = mzone->y2;
break;
case 4:
mzone_split->x1 = es->x;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = es->x + es->w;
mzone_split->y2 = es->y;
break;
case 5:
mzone_split->x1 = es->x + es->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
}
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
}
}
else if (es->x <= mzone->x1 &&
es->y > mzone->y1 && es->y < mzone->y2 &&
es->x + es->w > mzone->x1 && es->x + es->w < mzone->x2 &&
es->y + es->h >= mzone->y2)
{
mzone_splitted = 1;
for (ii = 0; ii < 4; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = es->y;
break;
case 1:
mzone_split->x1 = es->x + es->w;
mzone_split->y1 = es->y;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 2:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = es->x + es->w;
mzone_split->y2 = es->y;
break;
case 3:
mzone_split->x1 = es->x + es->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
}
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
}
}
else if (es->x <= mzone->x1 &&
es->y > mzone->y1 &&
es->y + es->h < mzone->y2 &&
es->x + es->w > mzone->x1 && es->x + es->w < mzone->x2)
{
mzone_splitted = 1;
for (ii = 0; ii < 6; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = es->y;
break;
case 1:
mzone_split->x1 = es->x + es->w;
mzone_split->y1 = es->y;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = es->y + es->h;
break;
case 2:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = es->y + es->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 3:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = es->x + es->w;
mzone_split->y2 = es->y;
break;
case 4:
mzone_split->x1 = es->x + es->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
case 5:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = es->y + es->h;
mzone_split->x2 = es->x + es->w;
mzone_split->y2 = mzone->y2;
break;
}
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
}
}
else if (es->x <= mzone->x1 && es->y <= mzone->y1 &&
es->x + es->w >= mzone->x2 &&
es->y + es->h > mzone->y1 &&
es->y + es->h < mzone->y2)
{
mzone_splitted = 1;
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
mzone_split->x1 = mzone->x1;
mzone_split->y1 = es->y + es->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
}
else if (es->x <= mzone->x1 &&
es->x + es->w >= mzone->x2 &&
es->y > mzone->y1 && es->y < mzone->y2)
{
mzone_splitted = 1;
for (ii = 0; ii < 2; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = es->y;
break;
case 1:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = es->y + es->h;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
}
if (*add_splits_to == NULL)
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
else
evas_list_append(*add_splits_to, mzone_split);
}
}
else if (es->x <= mzone->x1 &&
es->x + es->w >= mzone->x2 &&
es->y > mzone->y1 && es->y < mzone->y2 &&
es->y + es->h >= mzone->y2)
{
mzone_splitted = 1;
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = es->y;
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
}
else if (es->x <= mzone->x1 &&
es->y <= mzone->y1 &&
es->y + es->h >= mzone->y2 &&
es->x + es->w > mzone->x1 && es->x + es->w < mzone->x2)
{
mzone_splitted = 1;
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
mzone_split->x1 = es->x + es->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
}
else if (es->x > mzone->x1 &&
es->x + es->w < mzone->x2 &&
es->y <= mzone->y1 &&
es->y + es->h >= mzone->y2)
{
mzone_splitted = 1;
for (ii = 0; ii < 2; ii ++)
{
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
switch(ii)
{
case 0:
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = es->x;
mzone_split->y2 = mzone->y2;
break;
case 1:
mzone_split->x1 = es->x + es->w;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = mzone->x2;
mzone_split->y2 = mzone->y2;
break;
}
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
}
}
else if (es->x > mzone->x1 && es->x < mzone->x2 &&
es->y <= mzone->y1 &&
es->x + es->w >= mzone->x2 &&
es->y + es->h >= mzone->y2)
{
mzone_splitted = 1;
mzone_split = (struct _m_zone *)malloc(sizeof(struct _m_zone));
if (mzone_split == NULL)
return -1;
mzone_split->x1 = mzone->x1;
mzone_split->y1 = mzone->y1;
mzone_split->x2 = es->x;
mzone_split->y2 = mzone->y2;
*add_splits_to = evas_list_append(*add_splits_to, mzone_split);
}
else if (es->x <= mzone->x1 && es->y <= mzone->y1 &&
es->x + es->w >= mzone->x2 && es->y + es->h >= mzone->y2)
{
mzone_splitted = 2;
}
return mzone_splitted;
}
static int
_e_mzone_cb_square_reverse_sort(void *e1, void *e2)
{
struct _m_zone *mz1 = (struct _m_zone *)e1;
struct _m_zone *mz2 = (struct _m_zone *)e2;
@ -1042,7 +1641,8 @@ int _e_mzone_cb_square_reverse_sort(void *e1, void *e2)
return 0;
}
int _e_mzone_cb_width_reverse_sort(void *e1, void *e2)
static int
_e_mzone_cb_width_reverse_sort(void *e1, void *e2)
{
int w1, w2;
struct _m_zone *mz1 = (struct _m_zone *)e1;
@ -1062,7 +1662,8 @@ int _e_mzone_cb_width_reverse_sort(void *e1, void *e2)
return 0;
}
int _e_mzone_cb_height_reverse_sort(void *e1, void *e2)
static int
_e_mzone_cb_height_reverse_sort(void *e1, void *e2)
{
int h1, h2;
struct _m_zone *mz1 = (struct _m_zone *)e1;

View File

@ -205,6 +205,7 @@ e_popup_idler_before(void)
int i;
orects = pop->shape_rects;
changed = 0;
for (i = 0; i < num; i++)
{
if (rects[i].x < 0)
@ -231,7 +232,6 @@ e_popup_idler_before(void)
break;
}
}
// changed = 0;
}
if (changed)
{