e_desk: remove ec from desk_area 49/304749/1
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 21 Dec 2023 01:41:34 +0000 (10:41 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 23 Jan 2024 09:19:22 +0000 (18:19 +0900)
e_desk_client_del() also remove the ec from desk_area.

Change-Id: I06495f7098c1286ac95266ee0e8922957fbeaf9c

src/bin/e_desk.c
src/bin/e_desk.h

index 07f8ce1..1798478 100644 (file)
@@ -917,6 +917,7 @@ e_desk_client_del(E_Desk *desk, E_Client *ec)
 {
 #ifdef REFACTOR_DESK_AREA
    E_Desk_Private_Client *desk_client;
+   E_Desk_Area *eda;
 #endif
    E_OBJECT_CHECK(desk);
    E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
@@ -925,11 +926,18 @@ e_desk_client_del(E_Desk *desk, E_Client *ec)
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
 
 #ifdef REFACTOR_DESK_AREA
+   if (!e_desk_has_ec(desk, ec)) return;
+
    ELOGF("DESK", "CLIENT REMOVE. desk:%p", ec, desk);
 
    desk_client = _e_desk_private_client_get(ec);
    EINA_SAFETY_ON_NULL_RETURN(desk_client);
 
+   eda = e_desk_desk_area_find_by_ec(desk, ec);
+   EINA_SAFETY_ON_NULL_RETURN(eda);
+
+   e_desk_area_ec_remove(eda, ec);
+
    _e_desk_private_client_del(desk_client);
 #else
    _e_desk_smart_client_del(desk->smart_obj, ec);
@@ -2480,6 +2488,24 @@ e_desk_bottom_ec_get(E_Desk *desk)
 
    return e_desk_area_bottom_ec_get(eda);
 }
+
+EINTERN E_Desk_Area *
+e_desk_desk_area_find_by_ec(E_Desk *desk, E_Client *ec)
+{
+   E_Desk_Area *eda;
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(desk, NULL);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(ec, NULL);
+
+   if (!e_desk_has_ec(desk, ec)) return NULL;
+
+   // TODO: find the desk_area which has the ec among the desk_areas in this desk
+   eda = desk->desk_area.base;
+   if (e_desk_area_has_ec(eda, ec))
+     return eda;
+
+   return NULL;
+}
 #endif
 
 EINTERN void
index 6ee89d7..508eb47 100644 (file)
@@ -173,6 +173,7 @@ EINTERN Eina_Bool e_desk_has_ec(E_Desk *desk, E_Client *ec);
 //#ifdef REFACTOR_DESK_AREA
 EINTERN E_Client *e_desk_top_ec_get(E_Desk *desk);
 EINTERN E_Client *e_desk_bottom_ec_get(E_Desk *desk);
+EINTERN E_Desk_Area *e_desk_desk_area_find_by_ec(E_Desk *desk, E_Client *ec);
 //#endif
 
 extern EINTERN int E_EVENT_DESK_SHOW;