Utility functions to find the border above and below the current on a desk.

SVN revision: 16831
This commit is contained in:
sebastid 2005-09-21 18:02:04 +00:00 committed by sebastid
parent 13ed74ed46
commit 3ca4c4e2ae
2 changed files with 86 additions and 0 deletions

View File

@ -396,3 +396,87 @@ e_util_container_window_find(Ecore_X_Window win)
}
return NULL;
}
E_Border *
e_util_desk_border_above(E_Border *bd)
{
E_Border *above = NULL;
Evas_List *l;
int pos, i;
if (bd->layer == 0) pos = 0;
else if ((bd->layer > 0) && (bd->layer <= 50)) pos = 1;
else if ((bd->layer > 50) && (bd->layer <= 100)) pos = 2;
else if ((bd->layer > 100) && (bd->layer <= 150)) pos = 3;
else if ((bd->layer > 150) && (bd->layer <= 200)) pos = 4;
else pos = 5;
for (l = evas_list_find_list(bd->zone->container->layers[pos].clients, bd);
(l) && (l->next) && (!above);
l = l->next)
{
above = l->next->data;
if ((above->desk != bd->desk) && (!above->sticky))
above = NULL;
}
if (!above)
{
/* Need to check the layers above */
for (i = pos + 1; (i < 7) && (!above); i++)
{
for (l = bd->zone->container->layers[i].clients;
(l) && (!above);
l = l->next)
{
above = l->data;
if ((above->desk != bd->desk) && (!above->sticky))
above = NULL;
}
}
}
return above;
}
E_Border *
e_util_desk_border_below(E_Border *bd)
{
E_Border *below = NULL;
Evas_List *l;
int pos, i;
if (bd->layer == 0) pos = 0;
else if ((bd->layer > 0) && (bd->layer <= 50)) pos = 1;
else if ((bd->layer > 50) && (bd->layer <= 100)) pos = 2;
else if ((bd->layer > 100) && (bd->layer <= 150)) pos = 3;
else if ((bd->layer > 150) && (bd->layer <= 200)) pos = 4;
else pos = 5;
for (l = evas_list_find_list(bd->zone->container->layers[pos].clients, bd);
(l) && (l->prev) && (!below);
l = l->prev)
{
below = l->prev->data;
if ((below->desk != bd->desk) && (!below->sticky))
below = NULL;
}
if (!below)
{
/* Need to check the layers below */
for (i = pos - 1; (i >= 0) && (!below); i--)
{
if (bd->zone->container->layers[i].clients)
{
for (l = evas_list_last(bd->zone->container->layers[i].clients);
(l) && (!below);
l = l->prev)
{
below = l->data;
if ((below->desk != bd->desk) && (!below->sticky))
below = NULL;
}
}
}
}
return below;
}

View File

@ -25,6 +25,8 @@ EAPI int e_util_menu_item_edje_icon_list_set(E_Menu_Item *mi, char *lis
EAPI int e_util_edje_icon_set(Evas_Object *obj, char *name);
EAPI int e_util_menu_item_edje_icon_set(E_Menu_Item *mi, char *name);
EAPI E_Container *e_util_container_window_find(Ecore_X_Window win);
EAPI E_Border *e_util_desk_border_above(E_Border *bd);
EAPI E_Border *e_util_desk_border_below(E_Border *bd);
#endif
#endif