e_desk_area: make E_Desk_Area be E_Object 51/301251/3
authorSooChan Lim <sc1.lim@samsung.com>
Sun, 12 Nov 2023 04:58:04 +0000 (13:58 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Mon, 13 Nov 2023 05:55:08 +0000 (05:55 +0000)
E_Desk_Area is E_Object now and it also gets the E_Desk_Area_Private.

Change-Id: I342187198879ed97faa4a4092ce819c021ebc6eb

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

index 2da9bb1..f75c210 100644 (file)
@@ -1451,7 +1451,7 @@ _e_desk_free(E_Desk *desk)
           {
              EINA_LIST_FOREACH(desk->desk_area.list[i], l, eda)
                {
-                  e_desk_area_del(eda);
+                  e_object_del(E_OBJECT(eda));
                }
              eina_list_free(desk->desk_area.list[i]);
              desk->desk_area.list[i] = NULL;
index edad0b6..f6f7127 100644 (file)
@@ -1,5 +1,19 @@
 #include "e.h"
 
+typedef struct _E_Desk_Area_Private    E_Desk_Area_Private;
+
+#define PRI(eda) ((E_Desk_Area_Private *)e_object_data_get(E_OBJECT(eda)))
+
+#define API_ENTRY \
+   EINA_SAFETY_ON_NULL_RETURN(eda); \
+   E_Desk_Area_Private *priv = PRI(eda)
+
+#define API_ENTRY_VAL(ret) \
+   EINA_SAFETY_ON_NULL_RETURN_VAL(eda, ret); \
+   E_Desk_Area_Private *priv = PRI(eda)
+
+typedef struct _E_Desk_Area_Private    E_Desk_Area_Private;
+
 static int _e_desk_area_hooks_delete = 0;
 static int _e_desk_area_hooks_walking = 0;
 
@@ -8,6 +22,11 @@ static Eina_Inlist *_e_desk_area_hooks[] =
    [E_DESK_AREA_HOOK_SET_APPID] = NULL,
 };
 
+struct _E_Desk_Area_Private
+{
+   E_Desk_Area *eda;
+};
+
 struct _E_Desk_Area_Hook
 {
    EINA_INLIST;
@@ -182,6 +201,52 @@ e_desk_area_shutdown(void)
    return 1;
 }
 
+static Eina_Bool
+_e_desk_area_private_init(E_Desk_Area *eda)
+{
+   E_Desk_Area_Private *priv;
+
+   priv = E_NEW(E_Desk_Area_Private, 1);
+   if (!priv)
+     return EINA_FALSE;
+
+   priv->eda = eda;
+
+   e_object_data_set(E_OBJECT(eda), priv);
+
+   return EINA_TRUE;
+}
+
+static void
+_e_desk_area_private_finish(E_Desk_Area *eda)
+{
+   E_Desk_Area_Private *priv;
+
+   priv = PRI(eda);
+   e_object_data_set(E_OBJECT(eda), NULL);
+
+   priv->eda = NULL;
+
+   free(priv);
+}
+
+static void
+_e_desk_area_free(E_Desk_Area *eda)
+{
+   for (int i = 0; i < E_DESK_AREA_CLIENT_LAYER_MAX; i++)
+     {
+        eina_list_free(eda->ec_lists[i]);
+     }
+
+   if (eda->active)
+     _e_desk_area_active_change(NULL, eda->desk);
+
+   E_FREE_FUNC(eda->hook_subsurf_create, e_comp_wl_hook_del);
+
+   _e_desk_area_private_finish(eda);
+   free(eda);
+}
+
 EINTERN E_Desk_Area *
 e_desk_area_new(E_Desk *desk, int id, int x, int y, int w, int h, E_Desk_Area_Layer layer)
 {
@@ -190,9 +255,15 @@ e_desk_area_new(E_Desk *desk, int id, int x, int y, int w, int h, E_Desk_Area_La
    E_OBJECT_CHECK_RETURN(desk, NULL);
    E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, NULL);
 
-   eda = E_NEW(E_Desk_Area, 1);
+   eda = E_OBJECT_ALLOC(E_Desk_Area, E_DESK_AREA_TYPE, _e_desk_area_free);
    if (!eda) return NULL;
 
+   if (!_e_desk_area_private_init(eda))
+     {
+        e_object_del(E_OBJECT(eda));
+        return NULL;
+     }
+
    eda->desk = desk;
    eda->id = id;
 
@@ -207,24 +278,6 @@ e_desk_area_new(E_Desk *desk, int id, int x, int y, int w, int h, E_Desk_Area_La
    return eda;
 }
 
-EINTERN void
-e_desk_area_del(E_Desk_Area *eda)
-{
-   if (!eda) return;
-
-   for (int i=0; i<E_DESK_AREA_CLIENT_LAYER_MAX; i++)
-     {
-        eina_list_free(eda->ec_lists[i]);
-     }
-
-   if (eda->active)
-     _e_desk_area_active_change(NULL, eda->desk);
-
-   E_FREE_FUNC(eda->hook_subsurf_create, e_comp_wl_hook_del);
-
-   E_FREE(eda);
-}
-
 void _e_desk_area_ec_geometry_apply(E_Desk_Area *eda, E_Client *ec)
 {
    E_Maximize max;
index f735005..a0c48c7 100644 (file)
@@ -21,6 +21,8 @@ typedef enum _E_Desk_Area_Client_Layer
 #ifndef E_DESK_AREA_H
 #define E_DESK_AREA_H
 
+#define E_DESK_AREA_TYPE 0xE0b01006
+
 typedef struct _E_Desk_Area_Hook E_Desk_Area_Hook;
 
 typedef enum _E_Desk_Area_Hook_Point
@@ -63,7 +65,6 @@ EINTERN int e_desk_area_init(void);
 EINTERN int e_desk_area_shutdown(void);
 
 EINTERN E_Desk_Area *e_desk_area_new(E_Desk *desk, int id, int x, int y, int w, int h, E_Desk_Area_Layer layer);
-EINTERN void          e_desk_area_del(E_Desk_Area *eda);
 
 EINTERN Eina_Bool     e_desk_area_enable_set(E_Desk_Area *eda, Eina_Bool enable);