src/bin/windowmgr/e_policy_zone.c \
src/bin/windowmgr/e_policy_desk.c \
src/bin/windowmgr/e_policy_desk_area.c \
+src/bin/windowmgr/e_policy_desk_area_layer.c \
src/bin/windowmgr/e_policy_stack.c \
src/bin/windowmgr/e_policy_visibility.c \
src/bin/windowmgr/e_policy_conformant.c \
#include "e_policy_zone_intern.h"
#include "e_policy_desk_intern.h"
#include "e_policy_desk_area_intern.h"
+#include "e_policy_desk_area_layer_intern.h"
#include <tbm_bufmgr.h>
#include <tbm_debug.h>
if (impl == &zone_tree_impl) return "zone_tree";
if (impl == &desk_tree_impl) return "desk_tree";
if (impl == &desk_area_tree_impl) return "desk_area_tree";
+ if (impl == &desk_area_layer_tree_impl) return "desk_area_layer_tree";
return "tree";
}
#include "e_view_intern.h"
#include "e_view_client_intern.h"
#include "e_policy_wl_intern.h"
+#include "e_policy_desk_area_layer_intern.h"
typedef struct _E_Policy_Desk_Area_Private_Client E_Policy_Desk_Area_Private_Client;
E_Desk_Area *desk_area;
+ E_Policy_Desk_Area_Layer *layers[E_LAYER_COUNT];
+
struct wl_listener geometry_set;
struct wl_listener activate;
struct wl_listener raise;
.child_remove = _e_policy_desk_area_tree_child_remove,
};
-EINTERN E_Policy_Desk_Area *
-e_policy_desk_area_new(E_Desk_Area *eda)
+static void
+_e_policy_desk_area_init_layer(E_Policy_Desk_Area *pda)
{
- E_Policy_Desk_Area *pda;
- E_Policy_Desk *pd;
- E_Desk *desk;
- E_Layer ec_layer;
+ E_Policy_Desk_Area_Layer *pdal;
+ E_Canvas_Layer layer;
Evas_Object *obj;
#ifdef NEED_REFINE_EDA_LAYERS_LIST
E_Comp *comp;
comp = e_comp_get();
#endif
+ /* init client's layers */
+ for (layer = e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); layer <= e_comp_canvas_layer_map(E_LAYER_CLIENT_CURSOR); layer++)
+ {
+
+#ifdef NEED_REFINE_EDA_LAYERS_LIST
+ obj = comp->layers[layer].obj = evas_object_rectangle_add(e_comp_evas_get());
+#else
+ obj = eda->layers[layer].obj = evas_object_rectangle_add(e_comp_evas_get());
+#endif
+ pdal = e_policy_desk_area_layer_new(pda, e_comp_canvas_layer_map_to(layer));
+ if (pdal) pda->layers[layer] = pdal;
+ evas_object_layer_set(obj, e_comp_canvas_layer_map_to(layer));
+ evas_object_name_set(obj, "layer_obj");
+ }
+}
+
+EINTERN E_Policy_Desk_Area *
+e_policy_desk_area_new(E_Desk_Area *eda)
+{
+ E_Policy_Desk_Area *pda;
+ E_Policy_Desk *pd;
+ E_Desk *desk;
+
EINA_SAFETY_ON_NULL_RETURN_VAL(eda, NULL);
- pda = eina_hash_find(hash_policy_desk_area, &eda);
+ pda = e_policy_desk_area_get(eda);
if (pda)
{
ELOGF("POLICY_DESK_AREA", "Already exist policy desk area. | DESK_AREA:%p", NULL, eda);
}
pda->desk_area = eda;
-
eina_hash_add(hash_policy_desk_area, &eda, pda);
- /* init client's layers */
- for (ec_layer = e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); ec_layer <= e_comp_canvas_layer_map(E_LAYER_CLIENT_CURSOR); ec_layer++)
- {
-
-#ifdef NEED_REFINE_EDA_LAYERS_LIST
- obj = comp->layers[ec_layer].obj = evas_object_rectangle_add(e_comp_evas_get());
-#else
- obj = eda->layers[ec_layer].obj = evas_object_rectangle_add(e_comp_evas_get());
-#endif
- evas_object_layer_set(obj, e_comp_canvas_layer_map_to(ec_layer));
- evas_object_name_set(obj, "layer_obj");
- }
+ _e_policy_desk_area_init_layer(pda);
eda->hook_subsurf_create = e_comp_wl_hook_add(E_COMP_WL_HOOK_SUBSURFACE_CREATE,
_e_policy_desk_area_cb_hook_subsurface_create,
E_FREE_FUNC(eda->hook_client_free, e_client_hook_del);
#endif // CLIENT_DEL_STACK_ISSUE
+ e_policy_container_view_tree_shutdown(e_policy_container_get(pda));
+
eina_hash_del_by_key(hash_policy_desk_area, &pda->desk_area);
E_FREE(pda);
return eina_hash_find(hash_policy_desk_area, &eda);
}
+EINTERN E_Desk_Area *
+e_policy_desk_area_get_desk_area(E_Policy_Desk_Area *pda)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pda, NULL);
+
+ return pda->desk_area;
+}
+
EINTERN void
e_policy_desk_area_init(void)
{
EINTERN E_Policy_Desk_Area * e_policy_desk_area_new(E_Desk_Area *eda);
EINTERN void e_policy_desk_area_del(E_Policy_Desk_Area *pda);
EINTERN E_Policy_Desk_Area *e_policy_desk_area_get(E_Desk_Area *eda);
+EINTERN E_Desk_Area *e_policy_desk_area_get_desk_area(E_Policy_Desk_Area *eda);
EINTERN void e_policy_desk_area_init(void);
EINTERN void e_policy_desk_area_shutdown(void);
#endif
--- /dev/null
+#include "e_policy_desk_area_layer_intern.h"
+
+#include "e_desk_area_intern.h"
+#include "e_policy_desk_area_intern.h"
+#include "e_policy_container_intern.h"
+#include "e_view_intern.h"
+#include "e_view_rect.h"
+
+
+struct _E_Policy_Desk_Area_Layer
+{
+ E_Policy_Container container;
+
+ E_Policy_Desk_Area *pda;
+ E_Layer layer;
+ E_View *layer_bottom;
+};
+E_POLICY_CONTAINER_INIT(E_Policy_Desk_Area_Layer);
+
+//typedef unsigned int E_Layer_Order;
+typedef E_Canvas_Layer E_Layer_Order;
+
+
+static void
+_e_policy_desk_area_layer_tree_destroy(E_View_Tree *tree)
+{
+ // doing something
+}
+
+static void
+_e_policy_desk_area_layer_tree_child_add(E_View_Tree *tree, E_View *child)
+{
+ if (!child->eo)
+ return;
+ // doing something
+}
+
+static void
+_e_policy_desk_area_layer_tree_child_remove(E_View_Tree *tree, E_View *child)
+{
+ if (!child->eo)
+ return;
+
+ // doing something
+}
+
+EINTERN E_View_Tree_Impl desk_area_layer_tree_impl = {
+ .destroy = _e_policy_desk_area_layer_tree_destroy,
+ .child_add = _e_policy_desk_area_layer_tree_child_add,
+ .child_remove = _e_policy_desk_area_layer_tree_child_remove,
+};
+
+EINTERN E_Policy_Desk_Area_Layer *
+e_policy_desk_area_layer_new(E_Policy_Desk_Area *pda, E_Layer layer)
+{
+ E_Policy_Desk_Area_Layer * pdal = NULL;
+ E_Desk_Area *eda;
+ E_View_Rect *layer_bottom_rect;
+ int color[4] = {0, 0, 0, 255};
+
+ EINA_SAFETY_ON_NULL_GOTO(pda, err);
+
+ eda = e_policy_desk_area_get_desk_area(pda);
+ EINA_SAFETY_ON_NULL_GOTO(eda, err);
+
+ pdal = E_NEW(E_Policy_Desk_Area_Layer, 1);
+ EINA_SAFETY_ON_NULL_GOTO(pdal, err);
+
+ ELOGF("POL_LAYER", "Create Policy_desk_area_layer, desk_area(ID:%d):%p, policy_desk_area:%p, policy_desk_area_layer:%p, layer:%d",
+ NULL, eda->id, eda, pda, pdal, layer);
+
+ if (!e_policy_container_view_tree_init(e_policy_container_get(pdal), &desk_area_layer_tree_impl, e_policy_container_general_get(pda)))
+ {
+ ERR("Failed to init view tree of desk area layer:%p / layer:%d", pdal, layer);
+ goto err;
+ }
+ layer_bottom_rect = e_view_rect_create(&e_policy_container_get(pdal)->tree, eda->w, eda->h, color);
+ if (!layer_bottom_rect)
+ {
+ ERR("Failed to init view tree of desk area layer:%p / layer:%d", pdal, layer);
+ goto err;
+ }
+
+ pdal->pda = pda;
+ pdal->layer = layer;
+ pdal->layer_bottom = e_view_rect_view_get(layer_bottom_rect);
+
+ // TODO: set layer
+ //evas_object_layer_set(pdal->layer_bottom->eo, layer);
+ evas_object_name_set(pdal->layer_bottom->eo, "layer_obj");
+ return pdal;
+
+err:
+ if (pdal) e_policy_desk_area_layer_del(pdal);
+ return NULL;
+}
+
+EINTERN void
+e_policy_desk_area_layer_del(E_Policy_Desk_Area_Layer *pdal)
+{
+ EINA_SAFETY_ON_NULL_RETURN(pdal);
+
+ ELOGF("POL_LAYER", "Delete Policy_desk_area_layer, policy_desk_area_layer:%p, layer:%d", NULL, pdal, pdal->layer);
+
+ if (pdal->layer_bottom) e_view_destroy(pdal->layer_bottom);
+ e_policy_container_view_tree_shutdown(e_policy_container_get(pdal));
+
+ E_FREE(pdal);
+}
\ No newline at end of file
--- /dev/null
+#ifndef E_POLICY_DESK_AREA_LAYER_INTERN_H
+#define E_POLICY_DESK_AREA_LAYER_INTERN_H
+
+#include "e_intern.h"
+#include "e_policy_desk_area_intern.h"
+#include "e_view_intern.h"
+
+typedef struct _E_Policy_Desk_Area_Layer E_Policy_Desk_Area_Layer;
+
+extern EINTERN E_View_Tree_Impl desk_area_layer_tree_impl;
+
+EINTERN E_Policy_Desk_Area_Layer *e_policy_desk_area_layer_new(E_Policy_Desk_Area *pda, E_Layer layer);
+EINTERN void e_policy_desk_area_layer_del(E_Policy_Desk_Area_Layer *pdal);
+
+#endif //E_POLICY_DESK_AREA_LAYER_INTERN_H