#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;
[E_DESK_AREA_HOOK_SET_APPID] = NULL,
};
+struct _E_Desk_Area_Private
+{
+ E_Desk_Area *eda;
+};
+
struct _E_Desk_Area_Hook
{
EINA_INLIST;
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)
{
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;
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;
#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
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);