edg->ec_lists[edgc_layer] = eina_list_remove(edg->ec_lists[edgc_layer], ec);
}
-static E_Client *
-_get_bottom_ec_of_above_edg(E_Desk_Group *edg)
-{
- E_Desk_Group *prev_edg = NULL;
- E_Client *bottom = NULL;
-
- prev_edg = e_desk_desk_group_above_get(edg->desk, edg);
- if (prev_edg)
- {
- Eina_List *l;
- int i;
-
- for (i=0; i<E_DESK_GROUP_CLIENT_LAYER_MAX; i++)
- {
- EINA_LIST_REVERSE_FOREACH(prev_edg->ec_lists[i], l, bottom)
- {
- if (bottom)
- goto find_bottom;
- }
- }
- }
-
-find_bottom:
- return bottom;
-}
-
-static E_Client *
-_get_top_ec_of_below_edg(E_Desk_Group *edg)
-{
- E_Desk_Group *next_edg = NULL;
- E_Client *top = NULL;
- Eina_List *l;
- int i;
-
- next_edg = e_desk_desk_group_below_get(edg->desk, edg);
- if (next_edg)
- {
- for (i=E_DESK_GROUP_CLIENT_LAYER_MAX-1; i>=0; i--)
- {
- EINA_LIST_FOREACH(next_edg->ec_lists[i], l, top)
- {
- if (top)
- goto find_top;
- }
- }
- }
-
-find_top:
- return top;
-}
-
static E_Client *
_find_above_ec_in_same_edgc_layer(E_Desk_Group *edg, E_Client *ec)
{
evas_object_layer_set(ec->frame, edg_layer);
}
-static E_Client *
-_find_above_ec(E_Desk_Group *edg, E_Client *ec)
+static void
+_e_desk_group_ec_restack(E_Desk_Group *edg, E_Client *ec)
{
- E_Client *above = NULL;
- E_Desk_Group_Client_Layer edgc_layer;
- Eina_List *l;
- int index;
- int i;
-
- edgc_layer = e_client_desk_group_client_layer_get(ec);
-
- index = eina_list_data_idx(edg->ec_lists[edgc_layer], ec);
- if (index < 0)
- {
- // error...
- return NULL;
- }
- else if (index > 0)
- {
- above = eina_list_nth(edg->ec_lists[edgc_layer], index-1);
- if (above && above->frame)
- {
- // find above ec in same layer
- return above;
- }
- }
+ E_Client *above = NULL, *below = NULL;
- // search for above layer
- for (i=edgc_layer+1; i<E_DESK_GROUP_CLIENT_LAYER_MAX; i++)
- {
- EINA_LIST_REVERSE_FOREACH(edg->ec_lists[i], l, above)
- {
- if (above && above->frame)
- {
- // find above ec
- return above;
- }
- }
- }
+ // 1. find below ec in same edgc layer in same edg
+ below = _find_below_ec_in_same_edgc_layer(edg, ec);
+ if (below) goto find_below;
- return NULL;
-}
+ // 2. find above ec in same edgc layer in same edg
+ above = _find_above_ec_in_same_edgc_layer(edg, ec);
+ if (above) goto find_above;
-static E_Client *
-_find_below_ec(E_Desk_Group *edg, E_Client *ec)
-{
- E_Client *below = NULL;
- E_Desk_Group_Client_Layer edgc_layer;
- Eina_List *l;
- int index;
- int i;
+ // 3. find bottom ec in above edgc layer in same edg
+ above = _find_bottom_ec_in_above_edgc_layer(edg, ec);
+ if (above) goto find_above;
- edgc_layer = e_client_desk_group_client_layer_get(ec);
+ // 4. find bottom ec in above edg
+ above = _find_bottom_ec_in_above_edg(edg);
+ if (above) goto find_above;
- index = eina_list_data_idx(edg->ec_lists[edgc_layer], ec);
- if (index < 0)
- {
- // error...
- return NULL;
- }
- else
- {
- below = eina_list_nth(edg->ec_lists[edgc_layer], index+1);
- if (below && below->frame)
- {
- // find below ec in same layer
- return below;
- }
- }
+ // 5. if not found, just evas_object_raise
+ ELOGF("EDG", "RESTACK raise... call evas_object_raise", ec);
+ evas_object_raise(ec->frame);
+ return;
- // search for below layer
- for (i=edgc_layer-1; i>=E_DESK_GROUP_CLIENT_LAYER_DESKTOP; i--)
+find_below:
+ if (below)
{
- EINA_LIST_FOREACH(edg->ec_lists[i], l, below)
+ ELOGF("EDG", "STACK_ABOVE... below(win:0x%08zx, ec:%p)", ec, e_client_util_win_get(below), below);
+ if (below->frame)
{
- if (below && below->frame)
- {
- // find below ec
- return below;
- }
+ ELOGF("EDG", "STACK_ABOVE... call evas_object_stack_above", ec);
+ evas_object_stack_above(ec->frame, below->frame);
}
}
+ return;
- return NULL;
-}
-
-static void
-_e_desk_group_ec_restack(E_Desk_Group *edg, E_Client *ec)
-{
- E_Client *above = NULL, *below = NULL;
-
- above = _find_above_ec(edg, ec);
+find_above:
if (above)
{
- evas_object_stack_below(ec->frame, above->frame);
- goto end;
- }
-
- below = _find_below_ec(edg, ec);
- if (below)
- {
- evas_object_stack_above(ec->frame, below->frame);
- goto end;
- }
-
- if (!above && !below)
- {
- // check another edg...
- above = _get_bottom_ec_of_above_edg(edg);
- if (above)
- {
- if (above->frame)
- {
- evas_object_stack_below(ec->frame, above->frame);
- goto end;
- }
- }
-
- below = _get_top_ec_of_below_edg(edg);
- if (below)
+ ELOGF("EDG", "STACK_BELOW... above(win:0x%08zx, ec:%p)", ec, e_client_util_win_get(above), above);
+ if (above->frame)
{
- if (below->frame)
- {
- evas_object_stack_above(ec->frame, below->frame);
- goto end;
- }
+ ELOGF("EDG", "STACK_BELOW... call evas_object_stack_below", ec);
+ evas_object_stack_below(ec->frame, above->frame);
}
}
-
-end:
return;
}