e_desk_group: fix bug for _e_desk_group_ec_restack 93/235293/2
authorDoyoun Kang <doyoun.kang@samsung.com>
Wed, 3 Jun 2020 10:11:01 +0000 (19:11 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Wed, 3 Jun 2020 10:33:01 +0000 (10:33 +0000)
Change-Id: I17ceea00f73a099875593f3ab683305099db8fba

src/bin/e_desk_group.c

index 8179fce77ea4c73bca239657e683e085882a3d90..1c2375655bbaf6d5892a2eab1a27925aec1906c1 100644 (file)
@@ -381,57 +381,6 @@ e_desk_group_ec_remove(E_Desk_Group *edg, E_Client *ec)
    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)
 {
@@ -750,136 +699,54 @@ e_desk_group_ec_layer_set(E_Desk_Group *edg, E_Client *ec, E_Layer layer)
    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;
 }