src/bin/e_config.h \
src/bin/e_dbusmenu.h \
src/bin/e_desk.h \
+src/bin/e_desk_group.h \
src/bin/e_dialog.h \
src/bin/e_dnd.h \
src/bin/e_dpms.h \
src/bin/e_config_data.c \
src/bin/e_dbusmenu.c \
src/bin/e_desk.c \
+src/bin/e_desk_group.c \
src/bin/e_dialog.c \
src/bin/e_dpms.c \
src/bin/e_dnd.c \
}
ec->transform_core.result.enable = EINA_FALSE;
+ e_client_desk_group_set(ec, NULL);
e_client_visibility_calculate();
}
_e_client_hook_call(E_CLIENT_HOOK_DESK_SET, ec);
evas_object_smart_callback_call(ec->frame, "desk_change", ec);
+
+ if (ec->desk->desk_group.enable)
+ {
+ if (!ec->desk_group.desk_group)
+ {
+ E_Desk_Group *edg;
+ edg = e_desk_desk_group_base_get(ec->desk);
+ e_client_desk_group_set(ec, edg);
+ }
+ }
}
E_API Eina_Bool
return EINA_TRUE;
}
+EINTERN Eina_Bool
+e_client_desk_group_layer_set(E_Client *ec, E_Desk_Group_Layer layer)
+{
+ E_OBJECT_CHECK_RETURN(ec, EINA_FALSE);
+ E_OBJECT_TYPE_CHECK_RETURN(ec, E_CLIENT_TYPE, EINA_FALSE);
+
+ ec->desk_group.layer = layer;
+ return EINA_TRUE;
+}
+
+EINTERN E_Desk_Group_Layer
+e_client_desk_group_layer_get(E_Client *ec)
+{
+ E_OBJECT_CHECK_RETURN(ec, E_DESK_GROUP_LAYER_BACKGROUND);
+
+ return ec->desk_group.layer;
+}
+
+EINTERN Eina_Bool
+e_client_desk_group_enable_set(E_Client *ec, Eina_Bool enable)
+{
+ E_OBJECT_CHECK_RETURN(ec, EINA_FALSE);
+ E_OBJECT_TYPE_CHECK_RETURN(ec, E_CLIENT_TYPE, EINA_FALSE);
+
+ ec->desk_group.enable = enable;
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_client_desk_group_set(E_Client *ec, E_Desk_Group *edg)
+{
+ E_Desk_Group *old_edg;
+
+ if (!ec) return EINA_FALSE;
+
+ if (ec->desk_group.desk_group == edg)
+ return EINA_TRUE;
+
+ old_edg = ec->desk_group.desk_group;
+ if (old_edg)
+ e_desk_group_ec_remove(old_edg, ec);
+
+ ec->desk_group.desk_group = edg;
+ e_desk_group_ec_add(edg, ec);
+
+ return EINA_TRUE;
+}
+
E_API void
e_client_raise(E_Client *ec)
{
if (!ec) return;
+
+ if (ec->desk_group.enable)
+ {
+ E_Desk_Group *edg;
+ edg = ec->desk_group.desk_group;
+ if (edg)
+ {
+ e_desk_group_ec_raise(edg, ec);
+ return;
+ }
+ }
+
evas_object_raise(ec->frame);
}
e_client_lower(E_Client *ec)
{
if (!ec) return;
+
+ if (ec->desk_group.enable)
+ {
+ E_Desk_Group *edg;
+ edg = ec->desk_group.desk_group;
+ if (edg)
+ {
+ e_desk_group_ec_lower(edg, ec);
+ return;
+ }
+ }
+
evas_object_lower(ec->frame);
}
} base_output_resolution;
Eina_Bool hwc_visible_skip : 1;
+
+ struct
+ {
+ Eina_Bool enable;
+ E_Desk_Group *desk_group;
+ int layer;
+ int layer_backup;
+ } desk_group;
};
#define e_client_focus_policy_click(ec) \
E_API void e_client_frame_focus_set(E_Client *ec, Eina_Bool focus);
E_API Eina_Bool e_client_layer_set(E_Client *ec, E_Layer layer);
+
+EINTERN Eina_Bool e_client_desk_group_layer_set(E_Client *ec, E_Desk_Group_Layer layer);
+EINTERN E_Desk_Group_Layer e_client_desk_group_layer_get(E_Client *ec);
+EINTERN Eina_Bool e_client_desk_group_enable_set(E_Client *ec, Eina_Bool enable);
+
+E_API Eina_Bool e_client_desk_group_set(E_Client *ec, E_Desk_Group *edg);
+
E_API void e_client_raise(E_Client *ec);
E_API void e_client_lower(E_Client *ec);
E_CONFIG_VAL(D, T, configured_output_resolution.h, INT);
E_CONFIG_VAL(D, T, global_object_not_provide.launch_effect, UCHAR);
E_CONFIG_VAL(D, T, use_thread_max_cpu, UCHAR);
+ E_CONFIG_VAL(D, T, use_desk_group, UCHAR);
}
static Eina_Bool
E_CONFIG_LIMIT(e_config->configured_output_resolution.use, 0, 1);
E_CONFIG_LIMIT(e_config->global_object_not_provide.launch_effect, 0, 1);
E_CONFIG_LIMIT(e_config->use_thread_max_cpu, 0, 1);
+ E_CONFIG_LIMIT(e_config->use_desk_group, 0, 1);
}
E_API int
} global_object_not_provide;
Eina_Bool use_thread_max_cpu; //set cpu count to ecore thread max
+ Eina_Bool use_desk_group;
};
struct _E_Config_Desklock_Background
if (!ok)
desk->window_profile = eina_stringshare_ref(e_config->desktop_default_window_profile);
+
+ if (e_config->use_desk_group)
+ {
+ // Add a base e_desk_group
+ desk->desk_group.base = e_desk_desk_group_add(desk, desk->geom.x, desk->geom.y, desk->geom.w, desk->geom.h, E_DESK_GROUP_LAYER_NORMAL);
+ }
+
return desk;
}
static void
_e_desk_free(E_Desk *desk)
{
+ Eina_List *l;
+ E_Desk_Group *edg;
+
+ if (e_config->use_desk_group)
+ {
+ EINA_LIST_FOREACH(desk->desk_group.list, l, edg)
+ {
+ e_desk_group_del(edg);
+ }
+ eina_list_free(desk->desk_group.list);
+ desk->desk_group.list = NULL;
+ desk->desk_group.base = NULL;
+ desk->desk_group.active = NULL;
+ }
+
E_FREE_FUNC(desk->smart_obj, evas_object_del);
eina_stringshare_del(desk->name);
desk->name = NULL;
e_comp_object_render(ec->frame);
}
}
+
+E_API E_Desk_Group *
+e_desk_desk_group_add(E_Desk *desk, int x, int y, int w, int h, E_Desk_Group_Layer layer)
+{
+ E_Desk_Group *edg;
+ int id;
+
+ if (!e_config->use_desk_group) return NULL;
+
+ E_OBJECT_CHECK_RETURN(desk, NULL);
+ E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, NULL);
+
+ id = desk->desk_group.id;
+
+ edg = e_desk_group_new(desk, id, x, y, w, h, layer);
+ if (!edg)
+ {
+ return NULL;
+ }
+
+ desk->desk_group.list = eina_list_append(desk->desk_group.list, edg);
+ desk->desk_group.id++;
+
+ return edg;
+}
+
+E_API void
+e_desk_desk_group_del(E_Desk *desk, E_Desk_Group *edg)
+{
+ E_OBJECT_CHECK(desk);
+ E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
+
+ if (!e_config->use_desk_group) return;
+
+ if (!edg) return;
+
+ desk->desk_group.list = eina_list_remove(desk->desk_group.list, edg);
+}
+
+E_API E_Desk_Group *
+e_desk_desk_group_get_by_id(E_Desk *desk, int id)
+{
+ E_Desk_Group *edg = NULL;
+ Eina_List *l;
+
+ E_OBJECT_CHECK_RETURN(desk, NULL);
+ E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, NULL);
+
+ EINA_LIST_FOREACH(desk->desk_group.list, l, edg)
+ {
+ if (edg->id == id)
+ break;
+ }
+
+ return edg;
+}
+
+E_API E_Desk_Group *
+e_desk_desk_group_base_get(E_Desk *desk)
+{
+ E_OBJECT_CHECK_RETURN(desk, NULL);
+ E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, NULL);
+
+ if (!e_config->use_desk_group) return NULL;
+
+ return desk->desk_group.base;
+}
+
+E_API E_Desk_Group *
+e_desk_desk_group_active_get(E_Desk *desk)
+{
+ E_OBJECT_CHECK_RETURN(desk, NULL);
+ E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, NULL);
+
+ if (!e_config->use_desk_group) return NULL;
+
+ return desk->desk_group.active;
+}
+
+static void
+_e_desk_desk_group_check_ec_in_desk_group(E_Desk *desk)
+{
+ E_Client *ec;
+
+ E_CLIENT_FOREACH(ec)
+ {
+ if (ec->desk != desk) continue;
+ if (e_object_is_del(E_OBJECT(ec))) continue;
+ if (ec->desk_group.desk_group) continue;
+
+ e_client_desk_group_set(ec, desk->desk_group.base);
+ }
+}
+
+E_API Eina_Bool
+e_desk_desk_group_enable(E_Desk *desk)
+{
+ E_Desk_Group *edg = NULL;
+ Eina_List *l;
+
+ if (!e_config->use_desk_group) return EINA_FALSE;
+
+ E_OBJECT_CHECK_RETURN(desk, EINA_FALSE);
+ E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, EINA_FALSE);
+
+ ELOGF("EDG", "Enable Desk_Group...", NULL);
+ if (desk->desk_group.enable) return EINA_TRUE;
+ desk->desk_group.enable = EINA_TRUE;
+
+ // check all ec is included in desk group
+ _e_desk_desk_group_check_ec_in_desk_group(desk);
+
+ EINA_LIST_FOREACH(desk->desk_group.list, l, edg)
+ {
+ e_desk_group_enable_set(edg, EINA_TRUE);
+ }
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_desk_desk_group_disable(E_Desk *desk)
+{
+ E_Desk_Group *edg = NULL;
+ Eina_List *l;
+
+ if (!e_config->use_desk_group) return EINA_FALSE;
+
+ E_OBJECT_CHECK_RETURN(desk, EINA_FALSE);
+ E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, EINA_FALSE);
+
+ ELOGF("EDG", "Disable Desk_Group...", NULL);
+ if (!desk->desk_group.enable) return EINA_TRUE;
+ desk->desk_group.enable = EINA_FALSE;
+
+ EINA_LIST_FOREACH(desk->desk_group.list, l, edg)
+ {
+ e_desk_group_enable_set(edg, EINA_FALSE);
+ }
+
+ return EINA_TRUE;
+}
+
+EINTERN void
+e_desk_desk_group_info_print(E_Desk *desk)
+{
+ E_Desk_Group *edg = NULL;
+ Eina_List *l;
+
+ E_OBJECT_CHECK(desk);
+ E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
+
+ EINA_LIST_FOREACH(desk->desk_group.list, l, edg)
+ {
+ e_desk_group_info_print(edg);
+ }
+}
unsigned int animate_count;
Eina_List *handlers;
+
+ struct
+ {
+ Eina_Bool enable;
+ int id;
+ Eina_List *list;
+ E_Desk_Group *base;
+ E_Desk_Group *active;
+ } desk_group;
};
struct _E_Event_Desk
EINTERN void e_desk_client_zoom_apply(E_Desk *desk, E_Client *ec);
+E_API E_Desk_Group *e_desk_desk_group_add(E_Desk *desk, int x, int y, int w, int h, E_Desk_Group_Layer layer);
+E_API void e_desk_desk_group_del(E_Desk *desk, E_Desk_Group *edg);
+E_API E_Desk_Group *e_desk_desk_group_get_by_id(E_Desk *desk, int id);
+E_API E_Desk_Group *e_desk_desk_group_base_get(E_Desk *desk);
+E_API E_Desk_Group *e_desk_desk_group_active_get(E_Desk *desk);
+E_API Eina_Bool e_desk_desk_group_enable(E_Desk *desk);
+E_API Eina_Bool e_desk_desk_group_disable(E_Desk *desk);
+EINTERN void e_desk_desk_group_info_print(E_Desk *desk);
+
+
extern E_API int E_EVENT_DESK_SHOW;
extern E_API int E_EVENT_DESK_BEFORE_SHOW;
extern E_API int E_EVENT_DESK_AFTER_SHOW;
--- /dev/null
+#include "e.h"
+
+EINTERN int
+e_desk_group_init(void)
+{
+ return 1;
+}
+
+EINTERN int
+e_desk_group_shutdown(void)
+{
+ return 1;
+}
+
+EINTERN E_Desk_Group *
+e_desk_group_new(E_Desk *desk, int id, int x, int y, int w, int h, E_Desk_Group_Layer layer)
+{
+ E_Desk_Group *edg;
+
+ E_OBJECT_CHECK_RETURN(desk, NULL);
+ E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, NULL);
+
+ edg = E_NEW(E_Desk_Group, 1);
+ if (!edg) return NULL;
+
+ edg->desk = desk;
+ edg->id = id;
+
+ edg->x = x;
+ edg->y = y;
+ edg->w = w;
+ edg->h = h;
+
+ edg->layer = layer;
+
+ return edg;
+}
+
+EINTERN void
+e_desk_group_del(E_Desk_Group *edg)
+{
+ if (!edg) return;
+
+ for (int i=0; i<E_DESK_GROUP_LAYER_COUNT; i++)
+ {
+ eina_list_free(edg->ec_lists[i]);
+ }
+
+ E_FREE(edg);
+}
+
+void _e_desk_group_enable(E_Desk_Group *edg)
+{
+ int i;
+ E_Client *ec;
+ Eina_List *l;
+
+ for (i=0; i<E_DESK_GROUP_LAYER_COUNT; i++)
+ {
+ EINA_LIST_FOREACH(edg->ec_lists[i], l, ec)
+ {
+ e_client_desk_group_enable_set(ec, EINA_TRUE);
+ }
+ }
+
+ e_desk_group_all_ec_update(edg);
+}
+
+void _e_desk_group_disable(E_Desk_Group *edg)
+{
+ int i;
+ E_Client *ec;
+ Eina_List *l;
+
+ for (i=0; i<E_DESK_GROUP_LAYER_COUNT; i++)
+ {
+ EINA_LIST_FOREACH(edg->ec_lists[i], l, ec)
+ {
+ e_client_desk_group_enable_set(ec, EINA_FALSE);
+ }
+ }
+}
+
+EINTERN Eina_Bool
+e_desk_group_enable_set(E_Desk_Group *edg, Eina_Bool enable)
+{
+ if (!edg) return EINA_FALSE;
+
+ edg->enable = enable;
+ if (enable)
+ {
+ _e_desk_group_enable(edg);
+ }
+ else
+ {
+ _e_desk_group_disable(edg);
+ }
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_desk_group_geometry_set(E_Desk_Group *edg, int x, int y, int w, int h)
+{
+ if (!edg) return EINA_FALSE;
+
+ edg->x = x;
+ edg->y = y;
+ edg->w = w;
+ edg->h = h;
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_desk_group_geometry_get(E_Desk_Group *edg, int *x, int *y, int *w, int *h)
+{
+ if (!edg) return EINA_FALSE;
+
+ if (x) *x = edg->x;
+ if (y) *y = edg->y;
+ if (w) *w = edg->w;
+ if (h) *h = edg->h;
+
+ return EINA_TRUE;
+}
+
+EINTERN Eina_Bool
+e_desk_group_layer_set(E_Desk_Group *edg, E_Desk_Group_Layer layer)
+{
+ if (!edg) return EINA_FALSE;
+
+ edg->layer = layer;
+ return EINA_TRUE;
+}
+
+E_API E_Desk_Group_Layer
+e_desk_group_layer_get(E_Desk_Group *edg)
+{
+ if (!edg) return E_DESK_GROUP_LAYER_NORMAL;
+
+ return edg->layer;
+}
+
+E_API void
+e_desk_group_activate(E_Desk_Group *edg)
+{
+ if (!edg) return;
+}
+
+E_API Eina_Bool
+e_desk_group_is_activate(E_Desk_Group *edg)
+{
+ if (!edg) return EINA_FALSE;
+
+ return EINA_TRUE;
+}
+
+E_API void
+e_desk_group_raise(E_Desk_Group *edg)
+{
+ int i;
+ E_Client *ec;
+ Eina_List *l;
+
+ if (!edg) return;
+
+ for (i=0; i<E_DESK_GROUP_LAYER_COUNT; i++)
+ {
+ EINA_LIST_FOREACH(edg->ec_lists[i], l, ec)
+ {
+ evas_object_raise(ec->frame);
+ }
+ }
+}
+
+E_API void
+e_desk_group_lower(E_Desk_Group *edg)
+{
+ int i;
+ E_Client *ec;
+ Eina_List *l;
+
+ if (!edg) return;
+
+ for (i=E_DESK_GROUP_LAYER_COUNT-1; i>=0; i--)
+ {
+ EINA_LIST_FOREACH(edg->ec_lists[i], l, ec)
+ {
+ evas_object_lower(ec->frame);
+ }
+ }
+}
+
+static unsigned int
+_e_desk_group_layer_map(E_Desk_Group_Layer layer)
+{
+ switch (layer)
+ {
+ case E_DESK_GROUP_LAYER_BACKGROUND: return 0;
+ case E_DESK_GROUP_LAYER_NORMAL_BELOW: return 1;
+ case E_DESK_GROUP_LAYER_NORMAL: return 2;
+ case E_DESK_GROUP_LAYER_NORMAL_ABOVE: return 3;
+ case E_DESK_GROUP_LAYER_NOTIFICATION_LOW: return 4;
+ case E_DESK_GROUP_LAYER_NOTIFICATION_NORMAL: return 5;
+ case E_DESK_GROUP_LAYER_NOTIFICATION_HIGH: return 6;
+ case E_DESK_GROUP_LAYER_NOTIFICATION_TOP: return 7;
+ case E_DESK_GROUP_LAYER_SYSTEM: return 7;
+ default: return 1;
+ }
+}
+
+static E_Desk_Group_Layer
+_e_desk_group_layer_convert_from_elayer(E_Layer elayer)
+{
+ E_Desk_Group_Layer edg_layer;
+
+ if (elayer < E_LAYER_CLIENT_BELOW)
+ edg_layer = E_DESK_GROUP_LAYER_BACKGROUND;
+ else if (elayer < E_LAYER_CLIENT_NORMAL)
+ edg_layer = E_DESK_GROUP_LAYER_NORMAL_BELOW;
+ else if (elayer < E_LAYER_CLIENT_ABOVE)
+ edg_layer = E_DESK_GROUP_LAYER_NORMAL;
+ else if (elayer < E_LAYER_CLIENT_NOTIFICATION_LOW)
+ edg_layer = E_DESK_GROUP_LAYER_NORMAL_ABOVE;
+ else if (elayer < E_LAYER_CLIENT_NOTIFICATION_NORMAL)
+ edg_layer = E_DESK_GROUP_LAYER_NOTIFICATION_LOW;
+ else if (elayer < E_LAYER_CLIENT_NOTIFICATION_HIGH)
+ edg_layer = E_DESK_GROUP_LAYER_NOTIFICATION_NORMAL;
+ else if (elayer < E_LAYER_CLIENT_NOTIFICATION_TOP)
+ edg_layer = E_DESK_GROUP_LAYER_NOTIFICATION_HIGH;
+ else if (elayer < E_LAYER_CLIENT_ALERT_LOW)
+ edg_layer = E_DESK_GROUP_LAYER_NOTIFICATION_TOP;
+ else
+ edg_layer = E_DESK_GROUP_LAYER_SYSTEM;
+
+ return edg_layer;
+}
+
+E_API Eina_Bool
+e_desk_group_ec_add(E_Desk_Group *edg, E_Client *ec)
+{
+ int edg_layer;
+ int index;
+
+ if (!edg) return EINA_FALSE;
+ if (!ec) return EINA_FALSE;
+
+ edg_layer = _e_desk_group_layer_convert_from_elayer(ec->layer);
+ index = _e_desk_group_layer_map(edg_layer);
+
+ edg->ec_lists[index] = eina_list_prepend(edg->ec_lists[index], ec);
+
+ e_client_desk_group_layer_set(ec, edg_layer);
+
+ return EINA_TRUE;
+}
+
+E_API void
+e_desk_group_ec_remove(E_Desk_Group *edg, E_Client *ec)
+{
+ int edg_layer;
+ int index;
+
+ if (!edg) return;
+ if (!ec) return;
+
+ edg_layer = e_client_desk_group_layer_get(ec);
+ index = _e_desk_group_layer_map(edg_layer);
+
+ edg->ec_lists[index] = eina_list_remove(edg->ec_lists[index], ec);
+}
+
+EINTERN void
+e_desk_group_ec_raise(E_Desk_Group *edg, E_Client *ec)
+{
+ if (!edg) return;
+ if (!ec) return;
+
+ evas_object_raise(ec->frame);
+
+ // update edg's ec_list order
+}
+
+EINTERN void
+e_desk_group_ec_lower(E_Desk_Group *edg, E_Client *ec)
+{
+ if (!edg) return;
+ if (!ec) return;
+
+ evas_object_lower(ec->frame);
+
+ // update edg's ec_list order
+}
+
+E_API void
+e_desk_group_ec_update(E_Desk_Group *edg, E_Client *ec)
+{
+ if (!edg) return;
+ if (!ec) return;
+
+ e_client_pos_set(ec, edg->x, edg->y);
+ e_client_size_set(ec, edg->w, edg->h);
+ ec->changes.pos = 1;
+}
+
+E_API void
+e_desk_group_all_ec_update(E_Desk_Group *edg)
+{
+ int i;
+ E_Client *ec;
+ Eina_List *l;
+
+ if (!edg) return;
+
+ for (i=0; i<E_DESK_GROUP_LAYER_COUNT; i++)
+ {
+ EINA_LIST_FOREACH(edg->ec_lists[i], l, ec)
+ {
+ e_desk_group_ec_update(edg, ec);
+ }
+ }
+}
+
+E_API Eina_List *
+e_desk_group_ec_list_get(E_Desk_Group *edg)
+{
+ if (!edg) return NULL;
+
+ return NULL;
+}
+
+
+// for debug
+EINTERN void
+e_desk_group_info_print(E_Desk_Group *edg)
+{
+ Eina_List *l;
+ E_Client *ec;
+
+ if (!edg) return;
+
+ ELOGF("EDG_INFO", "===========================================", NULL);
+ ELOGF("EDG_INFO", "E_Desk_Group(%p), ID(%d), Geo(%d,%d,%d,%d), Layer:%d", NULL, edg, edg->id, edg->x, edg->y, edg->w, edg->h, edg->layer);
+ ELOGF("EDG_INFO", "-------------------------------------------", NULL);
+ for (int i=E_DESK_GROUP_LAYER_COUNT-1; i>=0; i--)
+ {
+ EINA_LIST_FOREACH(edg->ec_lists[i], l, ec)
+ {
+ ELOGF("EDG_INFO", "EDG_Layer[%d] EC(win:%x, ec:%p), ec->layer:%d, org_layer:%d", NULL, i, e_client_util_win_get(ec), ec, ec->layer, ec->desk_group.layer_backup);
+ }
+ }
+ ELOGF("EDG_INFO", "===========================================", NULL);
+}
--- /dev/null
+#ifdef E_TYPEDEFS
+
+typedef struct _E_Desk_Group E_Desk_Group;
+typedef struct _E_Event_Desk_Group E_Event_Desk_Group;
+
+typedef enum _E_Desk_Group_Layer
+{
+ E_DESK_GROUP_LAYER_BACKGROUND = 0,
+ E_DESK_GROUP_LAYER_NORMAL_BELOW = 150,
+ E_DESK_GROUP_LAYER_NORMAL = 200,
+ E_DESK_GROUP_LAYER_NORMAL_ABOVE = 250,
+ E_DESK_GROUP_LAYER_NOTIFICATION_LOW = 650,
+ E_DESK_GROUP_LAYER_NOTIFICATION_NORMAL = 700,
+ E_DESK_GROUP_LAYER_NOTIFICATION_HIGH = 750,
+ E_DESK_GROUP_LAYER_NOTIFICATION_TOP = 800,
+ E_DESK_GROUP_LAYER_SYSTEM = 990,
+} E_Desk_Group_Layer;
+
+# define E_DESK_GROUP_LAYER_COUNT 9
+
+#else
+#ifndef E_DESK_GROUP_H
+#define E_DESK_GROUP_H
+
+struct _E_Desk_Group
+{
+ E_Object e_obj_inherit;
+
+ E_Desk *desk;
+ int id;
+ E_Desk_Group_Layer layer;
+ Eina_Stringshare *name;
+
+ int x, y, w, h;
+
+ unsigned char enable : 1;
+ unsigned char visible : 1;
+ Eina_List *ec_lists[E_DESK_GROUP_LAYER_COUNT];
+
+ Eina_List *handlers;
+};
+
+struct _E_Event_Desk_Group
+{
+ E_Desk_Group *edg;
+};
+
+EINTERN int e_desk_group_init(void);
+EINTERN int e_desk_group_shutdown(void);
+
+EINTERN E_Desk_Group *e_desk_group_new(E_Desk *desk, int id, int x, int y, int w, int h, E_Desk_Group_Layer layer);
+EINTERN void e_desk_group_del(E_Desk_Group *edg);
+
+EINTERN Eina_Bool e_desk_group_enable_set(E_Desk_Group *edg, Eina_Bool enable);
+
+E_API Eina_Bool e_desk_group_geometry_set(E_Desk_Group *edg, int x, int y, int w, int h);
+E_API Eina_Bool e_desk_group_geometry_get(E_Desk_Group *edg, int *x, int *y, int *w, int *h);
+
+EINTERN Eina_Bool e_desk_group_layer_set(E_Desk_Group *edg, E_Desk_Group_Layer layer);
+E_API E_Desk_Group_Layer e_desk_group_layer_get(E_Desk_Group *edg);
+
+E_API void e_desk_group_activate(E_Desk_Group *edg);
+E_API Eina_Bool e_desk_group_is_activate(E_Desk_Group *edg);
+
+E_API void e_desk_group_raise(E_Desk_Group *edg);
+E_API void e_desk_group_lower(E_Desk_Group *edg);
+
+
+E_API Eina_Bool e_desk_group_ec_add(E_Desk_Group *edg, E_Client *ec);
+E_API void e_desk_group_ec_remove(E_Desk_Group *edg, E_Client *ec);
+EINTERN void e_desk_group_ec_raise(E_Desk_Group *edg, E_Client *ec);
+EINTERN void e_desk_group_ec_lower(E_Desk_Group *edg, E_Client *ec);
+
+
+E_API void e_desk_group_ec_update(E_Desk_Group *edg, E_Client *ec);
+E_API void e_desk_group_all_ec_update(E_Desk_Group *edg);
+
+E_API Eina_List *e_desk_group_ec_list_get(E_Desk_Group *edg);
+
+// for debug
+EINTERN void e_desk_group_info_print(E_Desk_Group *edg);
+#endif
+#endif
#include "e_error.h"
#include "e_zone.h"
#include "e_desk.h"
+#include "e_desk_group.h"
#include "e_pixmap.h"
#include "e_comp_object.h"
#include "e_util_transform.h"