e_desk: use cloned list of ECs in check_ec_in_desk_group func 76/237276/1
authorJunseok, Kim <juns.kim@samsung.com>
Fri, 26 Jun 2020 12:56:24 +0000 (21:56 +0900)
committerJunseok, Kim <juns.kim@samsung.com>
Fri, 26 Jun 2020 12:56:24 +0000 (21:56 +0900)
If using E_CLIENT_FOREACH in this function, it could cause miss out some ECs during stack changing.
for prevent it, use cloned list.

Change-Id: If68ecc00c92224e45afd2452b64795b13ad6404f
Signed-off-by: Junseok, Kim <juns.kim@samsung.com>
src/bin/e_desk.c

index 55ec7ee79756ebfd18c15588c47af5dfbfeda779..6f214b236e87d599ff24c5db7624cd322abbaadf 100644 (file)
@@ -1741,6 +1741,7 @@ static void
 _e_desk_desk_group_check_ec_in_desk_group(E_Desk *desk)
 {
    E_Client *ec;
+   Eina_List *ec_list;
 
    E_CLIENT_FOREACH(ec)
      {
@@ -1748,8 +1749,11 @@ _e_desk_desk_group_check_ec_in_desk_group(E_Desk *desk)
         if (e_object_is_del(E_OBJECT(ec))) continue;
         if (ec->desk_group.desk_group) continue;
 
-        e_client_desk_group_set(ec, desk->desk_group.base);
+        ec_list = eina_list_append(ec_list, ec);
      }
+
+   EINA_LIST_FREE(ec_list, ec)
+      e_client_desk_group_set(ec, desk->desk_group.base);
 }
 
 E_API Eina_Bool