e_zone: move desk code to E_CLIENT_HOOK_DEL callback 17/298217/1
authorSooChan Lim <sc1.lim@samsung.com>
Sun, 27 Aug 2023 02:23:56 +0000 (11:23 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 4 Sep 2023 02:36:41 +0000 (11:36 +0900)
For removing the dependency of the desk at e_client

Change-Id: Ia87f8fe92f50ec3d86c3e031282ea54211083f4d

src/bin/e_client.c
src/bin/e_zone.c

index 54ef233..95a1402 100644 (file)
@@ -1027,12 +1027,7 @@ _e_client_free(E_Client *ec)
    e_comp_object_render_update_del(ec->frame);
 
    E_OBJECT(ec)->references++;
-   if (ec->fullscreen)
-     {
-        ec->desk->fullscreen_clients = eina_list_remove(ec->desk->fullscreen_clients, ec);
-        if (!ec->desk->fullscreen_clients)
-          e_comp_render_queue();
-     }
+
    if (ec->new_client)
      e_comp->new_clients--;
 
@@ -1114,8 +1109,6 @@ _e_client_free(E_Client *ec)
 
    e_uuid_store_entry_del(ec->uuid);
 
-   e_desk_client_del(ec->desk, ec);
-
    free(ec);
 }
 
@@ -1133,7 +1126,6 @@ _e_client_del(E_Client *ec)
    focus_stack = eina_list_remove(focus_stack, ec);
    e_client_focus_defer_unset(ec);
 #endif
-   e_desk_visible_client_iconified_list_remove(ec->desk, ec);
 
    if (ec == e_comp_object_dim_client_get())
      {
@@ -1192,12 +1184,6 @@ _e_client_del(E_Client *ec)
    ec->base_output_resolution.transform = NULL;
    E_FREE_FUNC(ec->base_output_resolution.hook_subsurf_create, e_comp_wl_hook_del);
 
-   // desk_zoom
-   e_client_transform_core_remove(ec, ec->desk_zoom.transform);
-   e_util_transform_del(ec->desk_zoom.transform);
-   ec->desk_zoom.transform = NULL;
-   E_FREE_FUNC(ec->desk_zoom.hook_subsurf_create, e_comp_wl_hook_del);
-
    if (ec->transform_core.transform_list)
      {
         E_Util_Transform *transform;
@@ -1210,10 +1196,6 @@ _e_client_del(E_Client *ec)
 
    ec->transform_core.result.enable = EINA_FALSE;
 
-   e_client_desk_area_set(ec, NULL);
-   e_util_transform_del(ec->desk_area.transform);
-   ec->desk_area.transform = NULL;
-
    _e_client_resize_object_del(ec);
 
    e_comp_visibility_calculation_set(EINA_TRUE);
index c00e152..8e7c0d0 100644 (file)
@@ -163,7 +163,41 @@ _e_zone_client_apply_auto_placement(E_Zone *zone, E_Client *ec)
 static void
 _e_zone_cb_hook_client_del(void *d, E_Client *ec)
 {
-   evas_object_data_del(ec->frame, ZONE_EC_DATA_KEY);
+   E_Zone *zone;
+   E_Desk *desk;
+
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+
+   zone = (E_Zone *)d;
+   EINA_SAFETY_ON_NULL_RETURN(zone);
+
+   // FIXME: A ec is set the current zone now.
+   //        We need to make a policy for the placement of the ec at the zone.
+   if (zone != e_zone_current_get()) return;
+
+   desk = e_zone_desk_find_by_ec(zone, ec);
+   EINA_SAFETY_ON_NULL_RETURN(desk);
+
+   e_desk_visible_client_iconified_list_remove(desk, ec);
+
+   // desk_zoom
+   e_client_transform_core_remove(ec, ec->desk_zoom.transform);
+   e_util_transform_del(ec->desk_zoom.transform);
+   ec->desk_zoom.transform = NULL;
+   E_FREE_FUNC(ec->desk_zoom.hook_subsurf_create, e_comp_wl_hook_del);
+
+   e_client_desk_area_set(ec, NULL);
+   e_util_transform_del(ec->desk_area.transform);
+   ec->desk_area.transform = NULL;
+
+   if (ec->fullscreen)
+     {
+        desk->fullscreen_clients = eina_list_remove(desk->fullscreen_clients, ec);
+        if (!desk->fullscreen_clients)
+          e_comp_render_queue();
+     }
+
+   e_desk_client_del(desk, ec);
 }
 
 static void