struct wl_signal stick;
struct wl_signal unstick;
-#ifdef REFACTOR_DESK_AREA
struct wl_signal get_above;
struct wl_signal get_below;
struct wl_signal get_visible_above;
struct wl_signal get_visible_below;
struct wl_signal subsurface_stack_update;
-#endif
struct wl_signal delete_request;
struct wl_signal kill_request;
wl_signal_init(&priv->events.stack_transient_for_done);
wl_signal_init(&priv->events.stick);
wl_signal_init(&priv->events.unstick);
-#ifdef REFACTOR_DESK_AREA
wl_signal_init(&priv->events.get_above);
wl_signal_init(&priv->events.get_below);
wl_signal_init(&priv->events.get_visible_above);
wl_signal_init(&priv->events.get_visible_below);
wl_signal_init(&priv->events.subsurface_stack_update);
-#endif
wl_signal_init(&priv->events.delete_request);
wl_signal_init(&priv->events.kill_request);
E_API E_Client *
e_client_above_get(const E_Client *ec)
{
-#ifdef REFACTOR_DESK_AREA
API_ENTRY_VAL(NULL);
E_Client_Data_Get_Above data;
wl_signal_emit(&priv->events.get_above, &data);
return data.above_ec;
-#else
- unsigned int x;
- E_Client *ec2;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(ec, NULL);
- if (EINA_INLIST_GET(ec)->next) //check current layer
- {
- EINA_INLIST_FOREACH(EINA_INLIST_GET(ec)->next, ec2)
- {
- if (ec == ec2)
- {
- ELOGF("FATAL", "CHECK the ec inlist next", ec);
- continue;
- }
- if (!e_object_is_del(E_OBJECT(ec2)))
- return ec2;
- }
- }
- if (ec->layer == E_LAYER_CLIENT_CURSOR) return NULL;
- if (e_comp_canvas_client_layer_map(ec->layer) == 9999) return NULL;
-
- g_rec_mutex_lock(&e_comp->ec_list_mutex);
- /* go up the layers until we find one */
- for (x = e_comp_canvas_layer_map(ec->layer) + 1; x <= e_comp_canvas_layer_map(E_LAYER_CLIENT_CURSOR); x++)
- {
- if (!e_comp->layers[x].clients) continue;
- EINA_INLIST_FOREACH(e_comp->layers[x].clients, ec2)
- {
- if (ec == ec2)
- {
- ELOGF("FATAL", "EC exist above layer. ec layer_map:%d, cur layer_map:%d",
- ec, e_comp_canvas_layer_map(ec->layer), x);
- continue;
- }
- if (!e_object_is_del(E_OBJECT(ec2)))
- {
- g_rec_mutex_unlock(&e_comp->ec_list_mutex);
- return ec2;
- }
- }
- }
- g_rec_mutex_unlock(&e_comp->ec_list_mutex);
-
- return NULL;
-#endif
}
E_API E_Client *
e_client_below_get(const E_Client *ec)
{
-#ifdef REFACTOR_DESK_AREA
API_ENTRY_VAL(NULL);
E_Client_Data_Get_Below data;
wl_signal_emit(&priv->events.get_below, &data);
return data.below_ec;
-#else
- unsigned int x;
- E_Client *ec2;
- Eina_Inlist *l;
- E_Layer ec_layer, ec_layer_cw;
- int cw_layer;
-
- E_OBJECT_CHECK_RETURN(ec, NULL);
- E_OBJECT_TYPE_CHECK_RETURN(ec, E_CLIENT_TYPE, NULL);
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(ec, NULL);
- if (EINA_INLIST_GET(ec)->prev) //check current layer
- {
- for (l = EINA_INLIST_GET(ec)->prev; l; l = l->prev)
- {
- ec2 = EINA_INLIST_CONTAINER_GET(l, E_Client);
- if (ec == ec2)
- {
- ELOGF("FATAL", "CHECK the ec inlist prev", ec);
- continue;
- }
- if (!e_object_is_del(E_OBJECT(ec2)))
- return ec2;
- }
- }
-
- // check layer validation
- ec_layer = ec->layer;
- if (ec->layer_block || ec->layer_pending)
- {
- cw_layer = e_comp_object_layer_get(ec->frame);
- if (cw_layer >= 0)
- {
- ec_layer_cw = e_comp_canvas_layer_map_to(cw_layer);
- if (ec_layer != ec_layer_cw)
- {
- ELOGF("COMP", "LAYER is not same. USE obj layer! (ec->layer:%d, obj:%d). block:%d, pending:%d)", ec, ec_layer, ec_layer_cw, ec->layer_block, ec->layer_pending);
- ec_layer = ec_layer_cw;
- }
- }
- }
-
- if (ec_layer == E_LAYER_CLIENT_DESKTOP) return NULL;
- if (e_comp_canvas_client_layer_map(ec_layer) == 9999) return NULL;
-
- /* go down the layers until we find one */
- x = e_comp_canvas_layer_map(ec_layer);
- if (x > 0) x--;
-
- g_rec_mutex_lock(&e_comp->ec_list_mutex);
- for (; x >= e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); x--)
- {
- if (!e_comp->layers[x].clients) continue;
- EINA_INLIST_REVERSE_FOREACH(e_comp->layers[x].clients, ec2)
- {
- if (ec == ec2)
- {
- ELOGF("FATAL", "EC exist below layer. ec layer_map:%d, cur layer_map:%d",
- ec, e_comp_canvas_layer_map(ec_layer), x);
- continue;
- }
- if (!e_object_is_del(E_OBJECT(ec2)))
- {
- g_rec_mutex_unlock(&e_comp->ec_list_mutex);
- return ec2;
- }
- }
- }
- g_rec_mutex_unlock(&e_comp->ec_list_mutex);
-
- return NULL;
-#endif
}
EINTERN E_Client *
e_client_visible_above_get(E_Client *ec)
{
-#ifdef REFACTOR_DESK_AREA
API_ENTRY_VAL(NULL);
E_Client_Data_Get_Visible_Above data;
wl_signal_emit(&priv->events.get_visible_above, &data);
return data.above_ec;
-#else
- unsigned int x;
- E_Client *ec2;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(ec, NULL);
- if (EINA_INLIST_GET(ec)->next) //check current layer
- {
- EINA_INLIST_FOREACH(EINA_INLIST_GET(ec)->next, ec2)
- {
- if (ec == ec2) continue;
- if ((!e_object_is_del(E_OBJECT(ec2))) &&
- (!e_client_util_ignored_get(ec2)) &&
- (ec2->visible) &&
- (ec2->frame))
- return ec2;
- }
- }
-
- if (ec->layer == E_LAYER_CLIENT_CURSOR) return NULL;
- if (e_comp_canvas_client_layer_map(ec->layer) == 9999) return NULL;
-
- /* go up the layers until we find one */
- for (x = e_comp_canvas_layer_map(ec->layer) + 1; x <= e_comp_canvas_layer_map(E_LAYER_CLIENT_CURSOR); x++)
- {
- if (!e_comp->layers[x].clients) continue;
- EINA_INLIST_FOREACH(e_comp->layers[x].clients, ec2)
- {
- if (ec == ec2) continue;
- if ((!e_object_is_del(E_OBJECT(ec2))) &&
- (!e_client_util_ignored_get(ec2)) &&
- (ec2->visible) &&
- (ec2->frame))
- return ec2;
- }
- }
-
- return NULL;
-#endif
}
EINTERN E_Client *
e_client_visible_below_get(E_Client *ec)
{
-#ifdef REFACTOR_DESK_AREA
API_ENTRY_VAL(NULL);
E_Client_Data_Get_Visible_Below data;
wl_signal_emit(&priv->events.get_visible_below, &data);
return data.below_ec;
-#else
- unsigned int x;
- E_Client *ec2;
- Eina_Inlist *l;
- E_Layer ec_layer, ec_layer_cw;
- int cw_layer;
-
- E_OBJECT_CHECK_RETURN(ec, NULL);
- E_OBJECT_TYPE_CHECK_RETURN(ec, E_CLIENT_TYPE, NULL);
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(ec, NULL);
- if (EINA_INLIST_GET(ec)->prev) //check current layer
- {
- for (l = EINA_INLIST_GET(ec)->prev; l; l = l->prev)
- {
- ec2 = EINA_INLIST_CONTAINER_GET(l, E_Client);
- if (ec == ec2) continue;
- if ((!e_object_is_del(E_OBJECT(ec2))) &&
- (!e_client_util_ignored_get(ec2)) &&
- (ec2->visible) &&
- (ec2->frame))
- return ec2;
- }
- }
-
- // check layer validation
- ec_layer = ec->layer;
- if (ec->layer_block || ec->layer_pending)
- {
- cw_layer = e_comp_object_layer_get(ec->frame);
- if (cw_layer >= 0)
- {
- ec_layer_cw = e_comp_canvas_layer_map_to(cw_layer);
- if (ec_layer != ec_layer_cw)
- {
- ELOGF("COMP", "LAYER is not same. USE obj layer! (ec->layer:%d, obj:%d). block:%d, pending:%d)", ec, ec_layer, ec_layer_cw, ec->layer_block, ec->layer_pending);
- ec_layer = ec_layer_cw;
- }
- }
- }
-
- /* go down the layers until we find one */
- if (e_comp_canvas_layer_map(ec->layer) > e_comp_canvas_layer_map(E_LAYER_MAX)) return NULL;
- x = e_comp_canvas_layer_map(ec->layer);
- if (x > 0) x--;
-
- for (; x >= e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); x--)
- {
- if (!e_comp->layers[x].clients) continue;
- EINA_INLIST_REVERSE_FOREACH(e_comp->layers[x].clients, ec2)
- {
- if (ec == ec2) continue;
- if ((!e_object_is_del(E_OBJECT(ec2))) &&
- (!e_client_util_ignored_get(ec2)) &&
- (ec2->visible) &&
- (ec2->frame))
- return ec2;
- }
- }
-
- return NULL;
-#endif
}
E_API E_Client *
e_client_bottom_get(void)
{
-#ifdef REFACTOR_DESK_AREA
E_Zone *zone;
E_Desk *desk;
desk = e_desk_current_get(zone);
return e_desk_bottom_ec_get(desk);
-#else
- unsigned int x;
- g_rec_mutex_lock(&e_comp->ec_list_mutex);
- for (x = e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); x <= e_comp_canvas_layer_map(E_LAYER_CLIENT_CURSOR); x++)
- {
- E_Client *ec2;
-
- if (!e_comp->layers[x].clients) continue;
- EINA_INLIST_FOREACH(e_comp->layers[x].clients, ec2)
- if (!e_object_is_del(E_OBJECT(ec2)))
- {
- g_rec_mutex_unlock(&e_comp->ec_list_mutex);
- return ec2;
- }
- }
- g_rec_mutex_unlock(&e_comp->ec_list_mutex);
-
- return NULL;
-#endif
}
E_API E_Client *
e_client_top_get(void)
{
-#ifdef REFACTOR_DESK_AREA
E_Zone *zone;
E_Desk *desk;
desk = e_desk_current_get(zone);
return e_desk_top_ec_get(desk);
-#else
- unsigned int x;
- g_rec_mutex_lock(&e_comp->ec_list_mutex);
- for (x = e_comp_canvas_layer_map(E_LAYER_CLIENT_CURSOR); x >= e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); x--)
- {
- E_Client *ec2;
-
- if (!e_comp->layers[x].clients) continue;
- EINA_INLIST_REVERSE_FOREACH(e_comp->layers[x].clients, ec2)
- if (!e_object_is_del(E_OBJECT(ec2)))
- {
- g_rec_mutex_unlock(&e_comp->ec_list_mutex);
- return ec2;
- }
- }
- g_rec_mutex_unlock(&e_comp->ec_list_mutex);
-
- return NULL;
-#endif
}
EINTERN unsigned int
if (e_comp_canvas_client_layer_map(layer) == 9999)
return EINA_FALSE; //invalid layer is not allowed
-#ifdef REFACTOR_DESK_AREA
-#else
- if (ec->desk_area.enable)
- {
- if (e_client_layer_set_by_desk_area(ec, layer))
- {
- // restack according to desk group rule
- e_desk_area_ec_rearrange(ec->desk_area.desk_area, ec);
- return EINA_TRUE;
- }
- }
- ec->desk_area.layer_backup = layer;
-#endif
-
evas_object_layer_set(ec->frame, layer);
if (ec->layer != layer)
{
return ec->layer;
}
-#ifdef REFACTOR_DESK_AREA
-#else
-static void
-_e_client_desk_area_original_layer_save(E_Client *ec, E_Layer layer)
-{
- E_OBJECT_CHECK(ec);
- E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
- ec->desk_area.layer_backup = layer;
-}
-
-EINTERN Eina_Bool
-e_client_layer_set_by_desk_area(E_Client *ec, E_Layer layer)
-{
- E_Desk_Area *eda;
- E_Layer edg_layer;
- E_Layer org_layer;
-
- if (!ec) return EINA_FALSE;
- if (!ec->frame) return EINA_FALSE;
- if (!ec->desk_area.enable) return EINA_FALSE;
- if (!ec->desk_area.desk_area) return EINA_FALSE;
-
- eda = ec->desk_area.desk_area;
-
- // save original layer
- _e_client_desk_area_original_layer_save(ec, layer);
-
- // get desk_area layer
- edg_layer = (E_Layer)e_desk_area_layer_get(eda);
- org_layer = e_client_desk_area_original_layer_get(ec);
-
- ELOGF("EDG", "layer_set by desk_area... layer:%d, org_layer:%d, new_layer:%d", ec, layer, org_layer, edg_layer);
- if (org_layer == edg_layer)
- {
- e_client_raise(ec);
- }
- else
- {
- evas_object_layer_set(ec->frame, edg_layer);
- if (edg_layer == ec->layer)
- e_client_raise(ec);
- }
-
- return EINA_TRUE;
-}
-
-EINTERN void
-e_client_desk_area_original_layer_restore(E_Client *ec)
-{
- if (!ec) return;
-
- // Do we need to check ec->desk_area.enable?
- // if ec->desk_area.enable is true, then e_client_layer_set calls
- // e_desk_area_ec_edg_layer_set(). that's too bad. :(
- // so, we MUST make a policy for ordering of the desk group layer restore
- // and the desk group enable.
- if (ec->desk_area.enable) return;
- e_client_layer_set(ec, ec->desk_area.layer_backup);
-}
-
-EINTERN E_Layer
-e_client_desk_area_original_layer_get(E_Client *ec)
-{
- if (!ec) return E_LAYER_DESKTOP;
-
- if (ec->desk_area.enable)
- return ec->desk_area.layer_backup;
- else
- return ec->layer;
-}
-
-EINTERN Eina_Bool
-e_client_desk_area_client_layer_set(E_Client *ec, E_Desk_Area_Client_Layer edgc_layer)
-{
- E_OBJECT_CHECK_RETURN(ec, EINA_FALSE);
- E_OBJECT_TYPE_CHECK_RETURN(ec, E_CLIENT_TYPE, EINA_FALSE);
- if ((edgc_layer < E_DESK_AREA_CLIENT_LAYER_DESKTOP) ||
- (edgc_layer >= E_DESK_AREA_CLIENT_LAYER_MAX))
- return EINA_FALSE;
-
- ec->desk_area.edgc_layer = edgc_layer;
- return EINA_TRUE;
-}
-
-EINTERN E_Desk_Area_Client_Layer
-e_client_desk_area_client_layer_get(E_Client *ec)
-{
- E_OBJECT_CHECK_RETURN(ec, E_DESK_AREA_CLIENT_LAYER_DESKTOP);
-
- return ec->desk_area.edgc_layer;
-}
-
-//FIXME: use e_desk_area_ec_reassign(eda, ec) instead of this api
-E_API Eina_Bool
-e_client_desk_area_set(E_Client *ec, E_Desk_Area *eda)
-{
- E_Desk_Area *old_edg;
-
- if (!ec) return EINA_FALSE;
-
-#if 0 // if this is removed.. then below if (eda != old_edg) is removed also...
- if (ec->desk_area.desk_area == eda)
- return EINA_TRUE;
-#endif
-
- ELOGF("EDG", "Desk Group Set (new:%p, old:%p)", ec, eda, ec->desk_area.desk_area);
- old_edg = ec->desk_area.desk_area;
- if (old_edg)
- e_desk_area_ec_remove(old_edg, ec);
-
- ec->desk_area.desk_area = eda;
- e_desk_area_ec_add(eda, ec);
-
-#if 0 // if this is removed.. then above if (ec->desk_area.desk_area == eda) is removed also...
- if (eda != old_edg)
-#endif
- {
- e_desk_area_ec_update(eda, ec);
- e_desk_area_ec_rearrange(ec->desk_area.desk_area, ec);
- }
-
- return EINA_TRUE;
-}
-#endif
-
static void
_raise_between_sibling_under_parent(E_Client *ec)
{
{
if (!ec) return;
-#ifdef REFACTOR_DESK_AREA
-#else
- if (ec->desk_area.enable)
- {
- E_Desk_Area *eda;
- eda = ec->desk_area.desk_area;
- if (eda)
- {
- e_desk_area_ec_raise(eda, ec);
- return;
- }
- }
-#endif
-
if (ec->parent && e_client_is_belong_to_parent(ec))
_raise_belong_to_parent(ec);
else
{
if (!ec) return;
-#ifdef REFACTOR_DESK_AREA
-#else
- if (ec->desk_area.enable)
- {
- E_Desk_Area *eda;
- eda = ec->desk_area.desk_area;
- if (eda)
- {
- e_desk_area_ec_lower(eda, ec);
-
- wl_signal_emit(&PRI(ec)->events.lower, NULL);
- return;
- }
- }
-#endif
-
if (ec->parent && e_client_is_belong_to_parent(ec))
_lower_belong_to_parent(ec);
else
if (!above) return;
if (!above->frame) return;
-#ifdef REFACTOR_DESK_AREA
-#else
- if (ec->desk_area.enable)
- {
- E_Desk_Area *eda;
- eda = ec->desk_area.desk_area;
- if (eda)
- {
- e_desk_area_ec_stack_above(eda, ec, above);
- return;
- }
- }
-#endif
-
evas_object_stack_above(ec->frame, above->frame);
wl_signal_emit(&PRI(ec)->events.stack_above, NULL);
if (!below) return;
if (!below->frame) return;
-#ifdef REFACTOR_DESK_AREA
-#else
- if (ec->desk_area.enable)
- {
- E_Desk_Area *eda;
- eda = ec->desk_area.desk_area;
- if (eda)
- {
- e_desk_area_ec_stack_below(eda, ec, below);
- return;
- }
- }
-#endif
-
evas_object_stack_below(ec->frame, below->frame);
wl_signal_emit(&PRI(ec)->events.stack_below, NULL);
wl_signal_emit(&PRI(ec)->events.stack_transient_for_done, NULL);
}
-#ifdef REFACTOR_DESK_AREA
EINTERN void
e_client_subsurface_stack_update(E_Client *ec)
{
wl_signal_emit(&PRI(ec)->events.subsurface_stack_update, ec);
}
-#endif
EINTERN void
e_client_eval_pre_fetch_listener_add(E_Client *ec, struct wl_listener *listener)
return wl_signal_get(&priv->events.destroy, notify);
}
-#ifdef REFACTOR_DESK_AREA
EINTERN void
e_client_get_above_listener_add(E_Client *ec, struct wl_listener *listener)
{
API_ENTRY;
wl_signal_add(&priv->events.subsurface_stack_update, listener);
}
-#endif
EINTERN void
e_client_delete_request_listener_add(E_Client *ec, struct wl_listener *listener)
#include <wayland-server.h>
-//#ifdef REFACTOR_DESK_AREA
typedef struct _E_Client_Data_Get_Above
{
E_Client *above_ec; // returned above_ec
{
E_Client *below_ec; // returned below_ec
} E_Client_Data_Get_Visible_Below;
-//#endif
static inline Ecore_Window
e_client_util_pwin_get(const E_Client *ec)
EINTERN Eina_Bool e_client_pending_geometry_has(E_Client *ec);
EINTERN void e_client_pending_geometry_last_geometry_get(E_Client *ec, int *x, int *y, int *w, int *h);
-//#ifdef REFACTOR_DESK_AREA
-//#else
-EINTERN Eina_Bool e_client_layer_set_by_desk_area(E_Client *ec, E_Layer layer);
-EINTERN void e_client_desk_area_original_layer_restore(E_Client *ec);
-EINTERN E_Layer e_client_desk_area_original_layer_get(E_Client *ec);
-EINTERN Eina_Bool e_client_desk_area_client_layer_set(E_Client *ec, E_Desk_Area_Client_Layer edgc_layer);
-EINTERN E_Desk_Area_Client_Layer e_client_desk_area_client_layer_get(E_Client *ec);
-//#endif
-
EINTERN void e_client_input_thread_layer_set(E_Client *ec, E_Layer layer);
// get a comp_data from a ec
EINTERN void e_client_stack_transient_for_done_notify(E_Client *ec);
-//#ifdef REFACTOR_DESK_AREA
EINTERN void e_client_subsurface_stack_update(E_Client *ec);
-//#endif
// listeners
EINTERN void e_client_eval_pre_fetch_listener_add(E_Client *ec, struct wl_listener *listener);
EINTERN void e_client_stack_transient_for_done_listener_add(E_Client *ec, struct wl_listener *listener);
EINTERN void e_client_stick_listener_add(E_Client *ec, struct wl_listener *listener);
EINTERN void e_client_unstick_listener_add(E_Client *ec, struct wl_listener *listener);
-//#ifdef REFACTOR_DESK_AREA
EINTERN void e_client_get_above_listener_add(E_Client *ec, struct wl_listener *listener);
EINTERN void e_client_get_below_listener_add(E_Client *ec, struct wl_listener *listener);
EINTERN void e_client_get_visible_above_listener_add(E_Client *ec, struct wl_listener *listener);
EINTERN void e_client_get_visible_below_listener_add(E_Client *ec, struct wl_listener *listener);
EINTERN void e_client_subsurface_stack_update_listener_add(E_Client *ec, struct wl_listener *listener);
-//#endif
EINTERN void e_client_delete_request_listener_add(E_Client *ec, struct wl_listener *listener);
EINTERN void e_client_kill_request_listener_add(E_Client *ec, struct wl_listener *listener);
e_comp->commit_handler_timer.interval = conf->commit_handler_timer.interval;
}
-#ifdef REFACTOR_DESK_AREA
-#else
- e_comp_canvas_fake_layers_init();
-#endif
-
E_LIST_HANDLER_APPEND(handlers, E_EVENT_SCREENSAVER_ON, _e_comp_screensaver_on, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_SCREENSAVER_OFF, _e_comp_screensaver_off, NULL);
E_LIST_HANDLER_APPEND(handlers, ECORE_EVENT_SIGNAL_USER, _e_comp_signal_user, NULL);
return e_zone_desk_find_by_ec(zone, ec);
}
-#ifdef REFACTOR_DESK_AREA
E_API E_Desk_Area *
e_comp_desk_area_find_by_ec(E_Client *ec)
{
return e_desk_desk_area_find_by_ec(desk, ec);
}
-#endif
EINTERN Eina_Bool
e_comp_client_zone_is_displaying(E_Client *ec)
Eina_List *l, *screens, *zones = NULL, *ll;
E_Zone *zone;
E_Screen *scr;
-#ifdef REFACTOR_DESK_AREA
-#else
- int i;
-#endif
Eina_Bool changed = EINA_FALSE;
screens = (Eina_List *)e_comp_screen_e_screens_get(e_comp->e_comp_screen);
e_comp_canvas_zone_update(zone);
}
-#ifdef REFACTOR_DESK_AREA
// TODO: update all zones -> desks -> desk_areas -> ecs
-#else
- for (i = 0; i < 11; i++)
- {
- Eina_List *tmp = NULL;
- E_Client *ec;
-
- if (!e_comp->layers[i].clients) continue;
- /* Make temporary list as e_client_res_change_geometry_restore
- * rearranges the order. */
- EINA_INLIST_FOREACH(e_comp->layers[i].clients, ec)
- {
- if (!e_client_util_ignored_get(ec))
- tmp = eina_list_append(tmp, ec);
- }
-
- EINA_LIST_FREE(tmp, ec)
- {
- e_client_res_change_geometry_save(ec);
- e_client_res_change_geometry_restore(ec);
- }
- }
-#endif
-}
-
-#ifdef REFACTOR_DESK_AREA
-#else
-EINTERN void
-e_comp_canvas_fake_layers_init(void)
-{
- unsigned int layer;
-
- /* init layers */
- for (layer = e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); layer <= e_comp_canvas_layer_map(E_LAYER_CLIENT_CURSOR); layer++)
- {
- Evas_Object *o2;
-
- o2 = e_comp->layers[layer].obj = evas_object_rectangle_add(e_comp->evas);
- evas_object_layer_set(o2, e_comp_canvas_layer_map_to(layer));
- evas_object_name_set(o2, "layer_obj");
- }
}
-#endif
EINTERN void
e_comp_canvas_fps_toggle(void)
EINTERN E_Zone *e_comp_zone_id_get(int id);
EINTERN void e_comp_canvas_zone_update(E_Zone *zone);
EINTERN void e_comp_canvas_update(void);
-//#ifdef REFACTOR_DESK_AREA
-//#else
-EINTERN void e_comp_canvas_fake_layers_init(void);
-//#endif
EINTERN void e_comp_canvas_fps_toggle(void);
EINTERN E_Layer e_comp_canvas_client_layer_map_nearest(int layer);
EINTERN void e_comp_canvas_keys_grab(void);
static Eina_Bool _e_comp_object_dim_enable_get(E_Client *ec, Evas_Object *obj);
static void _e_comp_object_dim_update(E_Comp_Object *cw);
static void _e_comp_object_native_surface_set(E_Comp_Object *cw, Evas_Native_Surface *ns, Eina_Bool with_mirror);
-#ifdef REFACTOR_DESK_AREA
-#else
-static void _e_comp_object_lower(E_Comp_Object *cw, Evas_Object *obj);
-static void _e_comp_object_raise(Evas_Object *obj);
-static void _e_comp_object_layer_set(Evas_Object *obj, short layer);
-static void _e_comp_object_stack_above(Evas_Object *obj, Evas_Object *target);
-static void _e_comp_object_stack_below(Evas_Object *obj, Evas_Object *target);
-static void _e_comp_object_transform_obj_stack_update(Evas_Object *obj);
-#endif
static E_Client *dim_client = NULL;
/////////////////////////////////////
-#ifdef REFACTOR_DESK_AREA
EINTERN void
e_comp_object_transform_obj_stack_update(Evas_Object *obj)
-#else
-static void
-_e_comp_object_transform_obj_stack_update(Evas_Object *obj)
-#endif
{
int layer = 0;
API_ENTRY;
/////////////////////////////////////
-/* add a client to the layer-client list */
-#ifdef REFACTOR_DESK_AREA
-#else
-static void
-_e_comp_input_thread_layers_update(void *data)
-{
- E_Comp_Input_Layer_Data *layer_data = data;
- EINA_SAFETY_ON_NULL_RETURN(layer_data);
-
- INF("[input thread|%s] layer(%u), function type(%d), item(%p), relative(%p)\n",
- __func__, layer_data->layer, layer_data->type, layer_data->item, layer_data->relative);
- e_comp_input_layers_update(layer_data);
-}
-
-static void
-_e_comp_object_layers_update(unsigned int layer, E_Comp_Input_Inlist_Function_Type type, E_Client *item, E_Client *relative)
-{
- E_Comp_Input_Layer_Data layer_data;
- memset(&layer_data, 0, sizeof(E_Comp_Input_Layer_Data));
-
- layer_data.layer = layer;
- layer_data.type = type;
- layer_data.item = item;
- layer_data.relative = relative;
-
- INF("[%s] layer(%u), function type(%d), item(%p), relative(%p)\n", __func__, layer, type, item, relative);
- e_input_thread_safe_call(_e_comp_input_thread_layers_update, &layer_data, sizeof(E_Comp_Input_Layer_Data));
-}
-
-static void
-_e_comp_object_layers_add(E_Comp_Object *cw, E_Comp_Object *above, E_Comp_Object *below, Eina_Bool prepend)
-{
- g_rec_mutex_lock(&e_comp->ec_list_mutex);
-
- if (above)
- {
- e_comp->layers[above->layer].clients = eina_inlist_append_relative(e_comp->layers[above->layer].clients, EINA_INLIST_GET(cw->ec), EINA_INLIST_GET(above->ec));
- _e_comp_object_layers_update(above->layer, E_COMP_INPUT_INLIST_APPEND_RELATIVE, e_comp->layers[above->layer].clients, cw->ec, above->ec);
- }
- else if (below)
- {
- e_comp->layers[below->layer].clients = eina_inlist_prepend_relative(e_comp->layers[below->layer].clients, EINA_INLIST_GET(cw->ec), EINA_INLIST_GET(below->ec));
- _e_comp_object_layers_update(above->layer, E_COMP_INPUT_INLIST_APPEND_RELATIVE, cw->ec, above->ec);
- }
- if ((!above) && (!below))
- {
- if (prepend)
- {
- e_comp->layers[cw->layer].clients = eina_inlist_prepend(e_comp->layers[cw->layer].clients, EINA_INLIST_GET(cw->ec));
- _e_comp_object_layers_update(cw->layer, E_COMP_INPUT_INLIST_PREPEND, cw->ec, NULL);
- }
- else //this is either the layer object or a tough actin tinactin^W^W^Wfast stacking client
- {
- e_comp->layers[cw->layer].clients = eina_inlist_append(e_comp->layers[cw->layer].clients, EINA_INLIST_GET(cw->ec));
- _e_comp_object_layers_update(cw->layer, E_COMP_INPUT_INLIST_APPEND, cw->ec, NULL);
- }
- }
- e_comp->layers[cw->layer].clients_count++;
-
- g_rec_mutex_unlock(&e_comp->ec_list_mutex);
-}
-
-static void
-_e_comp_object_layers_remove(E_Comp_Object *cw)
-{
- g_rec_mutex_lock(&e_comp->ec_list_mutex);
-
- if (cw->ec && e_comp->layers[cw->layer].clients)
- {
- e_comp->layers[cw->layer].clients = eina_inlist_remove(e_comp->layers[cw->layer].clients, EINA_INLIST_GET(cw->ec));
- _e_comp_object_layers_update(cw->layer, E_COMP_INPUT_INLIST_REMOVE, cw->ec, NULL);
- e_comp->layers[cw->layer].clients_count--;
- }
-
- g_rec_mutex_unlock(&e_comp->ec_list_mutex);
-}
-#endif
-
-/////////////////////////////////////
static void
_e_comp_object_alpha_set(E_Comp_Object *cw)
{
static void
_e_comp_intercept_layer_set(void *data, Evas_Object *obj, int layer)
{
-#ifdef REFACTOR_DESK_AREA
E_Comp_Object *cw = data;
E_Comp_Object_Data_Set_Layer layer_set_data;
e_comp_render_queue();
e_comp_object_transform_obj_stack_update(obj);
}
-
-#else
- E_Comp_Object *cw = data;
- E_Comp_Wl_Client_Data *child_cdata;
- unsigned int l = e_comp_canvas_layer_map(layer);
- int oldraise;
-
- if ((cw->ec->layer_block) || (cw->ec->layer_pending))
- {
- /* doing a compositor effect, follow directions */
- _e_comp_object_layer_set(obj, layer);
- if (layer == cw->ec->layer) //trying to put layer back
- {
- E_Client *ec;
-
- /* if ec->layer and layer are the same but the client is not belong to the given(l)
- that means, layer is changed during layer_pending. in this case, need to update layer inlist*/
- if (cw->layer != l) goto layer_set;
-
- if (cw->visible)
- {
- e_comp_render_queue();
- }
- ec = e_client_above_get(cw->ec);
- /* skip subsurface: stacking subsurface is handled by e_comp_wl */
- while ((ec) && (e_comp_wl_subsurface_check(ec)))
- ec = e_client_above_get(ec);
- if (ec && (evas_object_layer_get(ec->frame) != evas_object_layer_get(obj)))
- {
- ec = e_client_below_get(cw->ec);
- /* skip subsurface: stacking subsurface is handled by e_comp_wl */
- while ((ec) && (e_comp_wl_subsurface_check(ec)))
- ec = e_client_below_get(ec);
- if (ec && (evas_object_layer_get(ec->frame) == evas_object_layer_get(cw->smart_obj)))
- {
- evas_object_stack_above(obj, ec->frame);
- return;
- }
- ec = NULL;
- }
- if (ec && (cw->ec->parent == ec))
- {
- if (e_client_transient_policy_get(cw->ec) == E_TRANSIENT_ABOVE)
- evas_object_stack_above(obj, ec->frame);
- else
- evas_object_stack_below(obj, ec->frame);
- }
- else
- evas_object_stack_below(obj, ec ? ec->frame : e_comp->layers[cw->layer].obj);
- }
- return;
- }
-
-layer_set:
- if (cw->layer == l) return;
- if (e_comp_canvas_client_layer_map(layer) == 9999)
- return; //invalid layer for clients not doing comp effects
- if (cw->ec->fullscreen)
- {
- cw->ec->saved.layer = layer;
- return;
- }
- oldraise = e_config->transient.raise;
-
- /* clamp to valid client layer */
- layer = e_comp_canvas_client_layer_map_nearest(layer);
- cw->ec->layer = layer;
- e_client_input_thread_layer_set(cw->ec, layer);
- if (e_config->transient.layer)
- {
- E_Client *child;
- Eina_List *list = eina_list_clone(cw->ec->transients);
-
- /* We need to set raise to one, else the child wont
- * follow to the new layer. It should be like this,
- * even if the user usually doesn't want to raise
- * the transients.
- */
- e_config->transient.raise = 1;
- EINA_LIST_FREE(list, child)
- {
- child_cdata = e_client_cdata_get(child);
- if (child_cdata && !child_cdata->mapped)
- {
- ELOGF("COMP", "LAYER_SET CHILD. BUT not mapped. skip. child(ec:%p, win:0x%08zx)", cw->ec, child, e_client_util_win_get(child));
- continue;
- }
- e_client_layer_set(child, layer);
- }
- }
-
- e_config->transient.raise = oldraise;
-
- _e_comp_object_layers_remove(cw);
- cw->layer = e_comp_canvas_layer_map(layer);
- _e_comp_object_layers_add(cw, NULL, NULL, 0);
- //if (cw->ec->new_client)
- //INF("CLIENT STACKED %p: %u", cw->ec, layer);
- _e_comp_object_layer_set(obj, layer);
- if (!e_comp->layers[cw->layer].obj) return; //this is a layer marker
- evas_object_stack_below(obj, e_comp->layers[cw->layer].obj);
- if (evas_object_below_get(obj) == e_comp->layers[cw->layer].obj)
- {
- /* can't stack a client above its own layer marker */
- CRI("STACKING ERROR!!! ec:%p (cw->layer:%d, ec->layer:%d)", cw->ec, cw->layer, cw->ec->layer);
- }
- if (!cw->visible) return;
- e_comp_render_queue();
- _e_comp_object_transform_obj_stack_update(obj);
-#endif
}
-#ifdef REFACTOR_DESK_AREA
-#else
-typedef void (*E_Comp_Object_Stack_Func)(Evas_Object *obj, Evas_Object *stack);
-#endif
-
-#ifdef REFACTOR_DESK_AREA
EINTERN void
e_comp_object_raise(Evas_Object *obj)
-#else
-static void
-_e_comp_object_raise(Evas_Object *obj)
-#endif
{
evas_object_raise(obj);
}
}
-#ifdef REFACTOR_DESK_AREA
EINTERN void
e_comp_object_lower(E_Comp_Object *cw, Evas_Object *obj)
-#else
-static void
-_e_comp_object_lower(E_Comp_Object *cw, Evas_Object *obj)
-#endif
{
evas_object_lower(obj);
if (ec)
{
_e_comp_object_hook_call(E_COMP_OBJECT_HOOK_RESTACK, ec);
-#ifdef REFACTOR_DESK_AREA
wl_signal_emit(&cw->events.lower_done, NULL);
-#else
- wl_signal_emit(&cw->events.lower, NULL);
-#endif
}
}
}
-#ifdef REFACTOR_DESK_AREA
EINTERN void
e_comp_object_stack_above(Evas_Object *obj, Evas_Object *target)
-#else
-static void
-_e_comp_object_stack_above(Evas_Object *obj, Evas_Object *target)
-#endif
{
evas_object_stack_above(obj, target);
}
}
-#ifdef REFACTOR_DESK_AREA
EINTERN void
e_comp_object_stack_below(Evas_Object *obj, Evas_Object *target)
-#else
-static void
-_e_comp_object_stack_below(Evas_Object *obj, Evas_Object *target)
-#endif
{
evas_object_stack_below(obj, target);
}
}
-#ifdef REFACTOR_DESK_AREA
EINTERN void
e_comp_object_layer_set(Evas_Object *obj, short layer)
-#else
-static void
-_e_comp_object_layer_set(Evas_Object *obj, short layer)
-#endif
{
evas_object_layer_set(obj, layer);
}
}
-#ifdef REFACTOR_DESK_AREA
-#else
-static Eina_Bool
-_e_comp_object_is_pending(E_Client *ec)
-{
- E_Client *topmost;
-
- if (!ec) return EINA_FALSE;
-
- topmost = e_comp_wl_topmost_parent_get(ec);
-
- return (topmost) ? topmost->layer_pending : EINA_FALSE;
-}
-
-static void
-_e_comp_intercept_stack_helper(E_Comp_Object *cw, Evas_Object *stack, E_Comp_Object_Stack_Func stack_cb)
-{
- E_Comp_Object *cw2 = NULL;
- E_Client *ecstack;
- short layer;
- Evas_Object *o = stack;
-#ifdef REFACTOR_DESK_AREA
- Eina_Bool raising = stack_cb == e_comp_object_stack_above;
-#else
- Eina_Bool raising = stack_cb == _e_comp_object_stack_above;
-#endif
-
- /* We should consider topmost's layer_pending for subsurface */
- if ((cw->ec->layer_block) || _e_comp_object_is_pending(cw->ec))
- {
- if (_e_comp_object_is_pending(cw->ec))
- e_comp_object_layer_update(cw->smart_obj,
- raising? stack : NULL,
- raising? NULL : stack);
-
- /* obey compositor effects! */
- if (cw->ec->layer == evas_object_layer_get(cw->smart_obj))
- evas_object_data_set(cw->smart_obj, "client_restack", (void*)1);
- stack_cb(cw->smart_obj, stack);
- if (cw->ec->layer == evas_object_layer_get(cw->smart_obj))
- evas_object_data_del(cw->smart_obj, "client_restack");
- return;
- }
-
- cw2 = evas_object_data_get(o, "comp_obj");
-
- /* assume someone knew what they were doing during client init */
- if (cw->ec->new_client)
- layer = cw->ec->layer;
- else if ((cw2) && _e_comp_object_is_pending(cw2->ec))
- layer = cw2->ec->layer;
- else
- layer = evas_object_layer_get(stack);
- ecstack = e_client_below_get(cw->ec);
- if (layer != e_comp_canvas_layer_map_to(cw->layer))
- {
- evas_object_layer_set(cw->smart_obj, layer);
- /* we got our layer wrangled, return now! */
- if (layer != e_comp_canvas_layer_map_to(cw->layer)) return;
- }
-
- /* check if we're stacking below another client */
- while (!cw2)
- {
- /* check for non-client layer object */
- if (!e_util_strcmp(evas_object_name_get(o), "layer_obj"))
- break;
- /* find an existing client to use for layering
- * by walking up the object stack
- *
- * this is guaranteed to be pretty quick since we'll either:
- * - run out of client layers
- * - find a stacking client
- */
- o = evas_object_above_get(o);
- if ((!o) || (o == cw->smart_obj)) break;
- if (evas_object_layer_get(o) != layer)
- {
- /* reached the top client layer somehow
- * use top client object
- */
- o = e_comp->layers[e_comp_canvas_layer_map(E_LAYER_CLIENT_CURSOR)].obj;
- }
- if (!o)
- /* top client layer window hasn't been stacked yet. this probably shouldn't happen?
- * return here since the top client layer window
- */
- {
- E_Client *ec;
-
- ec = e_client_top_get();
- if (ec)
- o = ec->frame;
- //else //wat
- }
- if (o) cw2 = evas_object_data_get(o, "comp_obj");
- }
-
- if (cw2 && cw->layer != cw2->layer)
- return;
-
- /* remove existing layers */
- _e_comp_object_layers_remove(cw);
- if (cw2)
- {
- if (o == stack) //if stacking above, cw2 is above; else cw2 is below
- _e_comp_object_layers_add(cw, raising ? cw2 : NULL, raising ? NULL : cw2, 0);
- else if (o == cw->smart_obj) //prepend (lower) if not stacking above
- _e_comp_object_layers_add(cw, NULL, NULL, !raising);
- else //if no stacking objects found, either raise or lower
- _e_comp_object_layers_add(cw, raising ? NULL : cw2, raising ? cw2 : NULL, 0);
- }
- else
- _e_comp_object_layers_add(cw, NULL, NULL, 0);
-
- /* find new object for stacking if cw2 is on state of layer_pending */
- if ((cw2) && _e_comp_object_is_pending(cw2->ec))
- {
- E_Client *new_stack = NULL, *current_ec = NULL;
- current_ec = cw2->ec;
- if (raising)
- {
- while ((new_stack = e_client_below_get(current_ec)))
- {
- current_ec = new_stack;
- if (new_stack == cw->ec) continue;
- if (new_stack->layer != cw2->ec->layer) break;
- if (!_e_comp_object_is_pending(new_stack)) break;
- }
- if ((new_stack) && (new_stack->layer == cw2->ec->layer))
- stack = new_stack->frame;
- else
- {
- /* stack it above layer object */
- int below_layer;
- below_layer = (cw2->layer <= 0)? 0 : cw2->layer - 1 ;
- stack = e_comp->layers[below_layer].obj;
- }
- }
- else
- {
- while ((new_stack = e_client_above_get(current_ec)))
- {
- current_ec = new_stack;
- if (new_stack == cw->ec) continue;
- if (new_stack->layer != cw2->ec->layer) break;
- if (!_e_comp_object_is_pending(new_stack)) break;
- }
- if ((new_stack) && (new_stack->layer == cw2->ec->layer))
- stack = new_stack->frame;
- else
- stack = e_comp->layers[cw2->layer].obj;
- }
- }
-
- /* set restack if stacking has changed */
- if (cw->ec->new_client || (!ecstack) || (ecstack->frame != o))
- evas_object_data_set(cw->smart_obj, "client_restack", (void*)1);
- stack_cb(cw->smart_obj, stack);
- if (e_comp->layers[cw->layer].obj)
- if (evas_object_below_get(cw->smart_obj) == e_comp->layers[cw->layer].obj)
- {
- CRI("STACKING ERROR!!! ec:%p (cw->layer:%d, ec->layer:%d)", cw->ec, cw->layer, cw->ec->layer);
- }
- if (cw->ec->new_client || (!ecstack) || (ecstack->frame != o))
- evas_object_data_del(cw->smart_obj, "client_restack");
- if (!cw->visible) return;
- e_comp_render_queue();
-}
-#endif
-
static void
_e_comp_intercept_stack_above(void *data, Evas_Object *obj, Evas_Object *above)
{
TRACE_DS_BEGIN(COMP:INTERCEPT STACK ABOVE);
-#ifdef REFACTOR_DESK_AREA
E_Comp_Object *cw = data;
E_Comp_Object_Data_Stack_Above stack_above_data;
stack_above_data.above_obj = above;
wl_signal_emit(&cw->events.stack_above, &stack_above_data);
-#else
- if (evas_object_below_get(obj) == above)
- {
- e_comp_object_layer_update(obj, above, NULL);
- return;
- }
-
- _e_comp_intercept_stack_helper(data, above, _e_comp_object_stack_above);
-
- _e_comp_object_transform_obj_stack_update(obj);
- _e_comp_object_transform_obj_stack_update(above);
-#endif
TRACE_DS_END();
}
TRACE_DS_BEGIN(COMP:INTERCEPT STACK BELOW);
-#ifdef REFACTOR_DESK_AREA
E_Comp_Object *cw = data;
E_Comp_Object_Data_Stack_Below stack_below_data;
if (!cw->visible)
e_comp_render_queue();
-#else
- if (evas_object_above_get(obj) == below)
- {
- e_comp_object_layer_update(obj, NULL, below);
- return;
- }
-
- _e_comp_intercept_stack_helper(data, below, _e_comp_object_stack_below);
-
- if (evas_object_smart_smart_get(obj))
- _e_comp_object_transform_obj_stack_update(obj);
- if (evas_object_smart_smart_get(below))
- _e_comp_object_transform_obj_stack_update(below);
-#endif
TRACE_DS_END();
}
{
E_Comp_Object *cw = data;
-#ifdef REFACTOR_DESK_AREA
-#else
- Evas_Object *o;
-#endif
-
TRACE_DS_BEGIN(COMP:INTERCEPT LOWER);
-#ifdef REFACTOR_DESK_AREA
wl_signal_emit(&cw->events.lower, cw);
-#else
- if ((cw->ec->layer_block) || (cw->ec->layer_pending))
- {
- if (cw->ec->layer_pending)
- e_comp_object_layer_update(obj, NULL, obj);
-
-#ifdef REFACTOR_DESK_AREA
- e_comp_object_lower(cw, obj);
-#else
- _e_comp_object_lower(cw, obj);
-#endif
- goto end;
- }
- if (!EINA_INLIST_GET(cw->ec)->prev) goto end; //already lowest on layer
- o = evas_object_below_get(obj);
- _e_comp_object_layers_remove(cw);
- /* prepend to client list since this client should be the first item now */
- _e_comp_object_layers_add(cw, NULL, NULL, 1);
- if (evas_object_layer_get(o) != evas_object_layer_get(obj)) goto end; //already at bottom!
- evas_object_data_set(obj, "client_restack", (void*)1);
-#ifdef REFACTOR_DESK_AREA
- e_comp_object_lower(cw, obj);
-#else
- _e_comp_object_lower(cw, obj);
-#endif
- evas_object_data_del(obj, "client_restack");
- if (!cw->visible) goto end;
- e_comp_render_queue();
-#ifdef REFACTOR_DESK_AREA
- e_comp_object_transform_obj_stack_update(obj);
-#else
- _e_comp_object_transform_obj_stack_update(obj);
-#endif
-
-end:
-#endif
TRACE_DS_END();
}
_e_comp_intercept_raise(void *data, Evas_Object *obj)
{
E_Comp_Object *cw = data;
-#ifdef REFACTOR_DESK_AREA
-#else
- Evas_Object *o;
- Evas_Object *op;
-#endif
TRACE_DS_BEGIN(COMP:INTERCEPT RAISE);
-#ifdef REFACTOR_DESK_AREA
wl_signal_emit(&cw->events.raise, cw);
-#else
- if ((cw->ec->layer_block) || (cw->ec->layer_pending))
- {
- if (cw->ec->layer_pending)
- {
- int obj_layer = evas_object_layer_get(obj);
- if (cw->ec->layer != obj_layer)
- e_comp_object_layer_update(obj, NULL, NULL);
- }
-#ifdef REFACTOR_DESK_AREA
- e_comp_object_raise(obj);
-#else
- _e_comp_object_raise(obj);
-#endif
- goto end;
- }
- if (!EINA_INLIST_GET(cw->ec)->next) goto end;//already highest on layer
- o = evas_object_above_get(obj);
- if (evas_object_layer_get(o) != evas_object_layer_get(obj)) goto end; //already at top!
-
- /* still stack below override below the layer marker */
- for (op = o = e_comp->layers[cw->layer].obj;
- o && o != e_comp->layers[cw->layer - 1].obj;
- op = o, o = evas_object_below_get(o))
- {
- if (evas_object_smart_smart_get(o))
- {
- E_Client *ec;
-
- ec = e_comp_object_client_get(o);
- if (ec && (!ec->override)) break;
- }
- }
-#ifdef REFACTOR_DESK_AREA
- e_comp_object_stack_below(obj, op);
-#else
- _e_comp_object_stack_below(obj, op);
-#endif
- e_client_focus_defer_set(cw->ec);
-
- if (!cw->visible) goto end;
- e_comp_render_queue();
-#ifdef REFACTOR_DESK_AREA
- e_comp_object_transform_obj_stack_update(obj);
-#else
- _e_comp_object_transform_obj_stack_update(obj);
-#endif
-end:
-#endif
TRACE_DS_END();
}
EINA_SAFETY_ON_NULL_RETURN(cw);
wl_signal_init(&cw->events.lower);
-#ifdef REFACTOR_DESK_AREA
wl_signal_init(&cw->events.lower_done);
wl_signal_init(&cw->events.raise);
-#endif
wl_signal_init(&cw->events.show);
wl_signal_init(&cw->events.hide);
wl_signal_init(&cw->events.hiding);
-#ifdef REFACTOR_DESK_AREA
wl_signal_init(&cw->events.set_layer);
wl_signal_init(&cw->events.stack_above);
wl_signal_init(&cw->events.stack_below);
-#endif
wl_signal_init(&cw->events.image_filter_set);
wl_signal_init(&cw->events.render_op_set);
wl_signal_init(&cw->events.content_type_set);
evas_object_del(o);
}
}
-#ifdef REFACTOR_DESK_AREA
-#else
- _e_comp_object_layers_remove(cw);
-#endif
l = evas_object_data_get(obj, "comp_object-to_del");
E_FREE_LIST(l, evas_object_del);
_e_comp_object_mouse_event_callback_unset(cw);
cw->transform_bg_obj = o;
evas_object_name_set(cw->transform_bg_obj, "cw->transform_bg_obj");
}
-#ifdef REFACTOR_DESK_AREA
e_comp_object_transform_obj_stack_update(obj);
-#else
- _e_comp_object_transform_obj_stack_update(obj);
-#endif
}
else
{
ELOGF("TRANSFORM","transform set: TRUE", cw->ec);
evas_object_name_set(cw->transform_tranp_obj, "cw->transform_trasp_obj");
}
-#ifdef REFACTOR_DESK_AREA
e_comp_object_transform_obj_stack_update(obj);
-#else
- _e_comp_object_transform_obj_stack_update(obj);
-#endif
}
else
{
_e_comp_object_transform_obj_map_set_with_zoom(cw->transform_tranp_obj, vertices, zoom);
}
-#ifdef REFACTOR_DESK_AREA
-#else
-EINTERN void
-e_comp_object_layer_update(Evas_Object *obj,
- Evas_Object *above, Evas_Object *below)
-{
- E_Comp_Object *cw2 = NULL;
- Evas_Object *o = NULL;
- short layer;
-
- API_ENTRY;
-
- if (cw->ec->layer_block) return;
- if ((above) && (below))
- {
- ERR("Invalid layer update request! cw=%p", cw);
- return;
- }
-
- o = above?:below;
-
- if (o)
- {
- layer = evas_object_layer_get(o);
- cw2 = evas_object_data_get(o, "comp_obj");
- while (!cw2)
- {
- if (!e_util_strcmp(evas_object_name_get(o), "layer_obj")) break;
-
- o = evas_object_above_get(o);
- if ((!o) || (o == cw->smart_obj)) break;
- if (evas_object_layer_get(o) != layer)
- {
- o = e_comp->layers[e_comp_canvas_layer_map(E_LAYER_CLIENT_ALERT)].obj;
- }
- if (!o)
- {
- E_Client *ec;
- ec = e_client_top_get();
- if (ec) o = ec->frame;
- }
-
- if (o) cw2 = evas_object_data_get(o, "comp_obj");
- }
- }
-
- _e_comp_object_layers_remove(cw);
- if (cw2)
- {
- if (cw2->layer > cw->layer)
- _e_comp_object_layers_add(cw, NULL, NULL, 0);
- else if (cw2->layer == cw->layer)
- {
- if (above)
- _e_comp_object_layers_add(cw, cw2, NULL, 0);
- else if (o == obj)
- _e_comp_object_layers_add(cw, NULL, NULL, above? 0 : 1);
- else if (below)
- _e_comp_object_layers_add(cw, NULL, cw2, 0);
- }
- else
- _e_comp_object_layers_add(cw, NULL, NULL, 1);
- }
- else
- _e_comp_object_layers_add(cw, NULL, NULL, 0);
-}
-#endif
-
EINTERN int
e_comp_object_layer_get(Evas_Object *obj)
{
wl_signal_add(&cw->events.lower, listener);
}
-#ifdef REFACTOR_DESK_AREA
EINTERN void
e_comp_object_lower_done_listener_add(Evas_Object *obj, struct wl_listener *listener)
{
API_ENTRY;
wl_signal_add(&cw->events.raise, listener);
}
-#endif
EINTERN void
e_comp_object_show_listener_add(Evas_Object *obj, struct wl_listener *listener)
wl_signal_add(&cw->events.hiding, listener);
}
-#ifdef REFACTOR_DESK_AREA
EINTERN void
e_comp_object_set_layer_listener_add(Evas_Object *obj, struct wl_listener *listener)
{
API_ENTRY;
wl_signal_add(&cw->events.stack_below, listener);
}
-#endif
EINTERN void
e_comp_object_image_filter_set_listener_add(Evas_Object *obj, struct wl_listener *listener)
#include <wayland-server.h>
-//#ifdef REFACTOR_DESK_AREA
typedef struct _E_Comp_Object E_Comp_Object;
struct _E_Comp_Object
{
Eina_Bool color_visible;
};
-//#endif
typedef struct _E_Comp_Object_Data_Set_Layer
{
EINTERN void e_comp_object_transform_transp_vertices_set(Evas_Object *obj, E_Util_Transform_Rect_Vertex *vertices);
EINTERN void e_comp_object_transform_transp_vertices_set_with_zoom(Evas_Object *obj, E_Util_Transform_Rect_Vertex *vertices, E_Util_Transform_Zoom zoom);
-//#ifdef REFACTOR_DESK_AREA
-//#else
-EINTERN void e_comp_object_layer_update(Evas_Object *obj, Evas_Object *above, Evas_Object *below);
-//#endif
EINTERN int e_comp_object_layer_get(Evas_Object *obj);
EINTERN Eina_Bool e_comp_object_content_unset(Evas_Object* obj);
EINTERN Evas_Render_Op e_comp_object_render_op_get(Evas_Object *obj);
EINTERN Eina_Bool e_comp_object_render_trace_set(Evas_Object *obj, Eina_Bool set);
-//#ifdef REFACTOR_DESK_AREA
typedef void (*E_Comp_Object_Stack_Func)(Evas_Object *obj, Evas_Object *stack);
-//#endif
-//#ifdef REFACTOR_DESK_AREA
EINTERN void e_comp_object_lower(E_Comp_Object *cw, Evas_Object *obj);
EINTERN void e_comp_object_raise(Evas_Object *obj);
EINTERN void e_comp_object_layer_set(Evas_Object *obj, short layer);
EINTERN void e_comp_object_stack_above(Evas_Object *obj, Evas_Object *target);
EINTERN void e_comp_object_stack_below(Evas_Object *obj, Evas_Object *target);
EINTERN void e_comp_object_transform_obj_stack_update(Evas_Object *obj);
-//#endif
EINTERN void e_comp_object_fullscreen(Evas_Object *obj);
EINTERN void e_comp_object_unfullscreen(Evas_Object *obj);
// listeners
EINTERN void e_comp_object_lower_listener_add(Evas_Object *obj, struct wl_listener *listener);
-//#ifdef REFACTOR_DESK_AREA
EINTERN void e_comp_object_lower_done_listener_add(Evas_Object *obj, struct wl_listener *listener);
EINTERN void e_comp_object_raise_listener_add(Evas_Object *obj, struct wl_listener *listener);
-//#endif
EINTERN void e_comp_object_show_listener_add(Evas_Object *obj, struct wl_listener *listener);
EINTERN void e_comp_object_hide_listener_add(Evas_Object *obj, struct wl_listener *listener);
EINTERN void e_comp_object_hiding_listener_add(Evas_Object *obj, struct wl_listener *listener);
-//#ifdef REFACTOR_DESK_AREA
EINTERN void e_comp_object_set_layer_listener_add(Evas_Object *obj, struct wl_listener *listener);
EINTERN void e_comp_object_stack_above_listener_add(Evas_Object *obj, struct wl_listener *listener);
EINTERN void e_comp_object_stack_below_listener_add(Evas_Object *obj, struct wl_listener *listener);
-//#endif
EINTERN void e_comp_object_image_filter_set_listener_add(Evas_Object *obj, struct wl_listener *listener);
EINTERN void e_comp_object_render_op_set_listener_add(Evas_Object *obj, struct wl_listener *listener);
#include "e_comp_wl_viewport_intern.h"
#include "e_pixmap_intern.h"
#include "e_client_video_intern.h"
-#ifdef REFACTOR_DESK_AREA
#include "e_client_intern.h"
-#endif
#include "e_comp_object_intern.h"
#include <tizen-extension-server-protocol.h>
_e_comp_wl_subsurface_restack(topmost);
_e_comp_wl_subsurface_restack_bg_rectangle(topmost);
-#ifdef REFACTOR_DESK_AREA
e_client_subsurface_stack_update(ec);
-#else
- //To update client stack list
- if ((ec->comp_data->sub.data) &&
- (ec->comp_data->sub.data->parent))
- {
- E_Client *parent;
- Evas_Object *o;
-
- parent = ec->comp_data->sub.data->parent;
-
- if ((parent->comp_data->sub.list) &&
- (eina_list_data_find(parent->comp_data->sub.list, ec)))
- {
- //stack above done
- o = evas_object_below_get(ec->frame);
- e_comp_object_layer_update(ec->frame, o, NULL);
- }
- else if ((parent->comp_data->sub.below_list) &&
- (eina_list_data_find(parent->comp_data->sub.below_list, ec)))
- {
- //stack below done
- o = evas_object_above_get(ec->frame);
- e_comp_object_layer_update(ec->frame, NULL, o);
- }
- }
-#endif
}
*/
typedef struct _E_Desk_Private E_Desk_Private;
-#ifdef REFACTOR_DESK_AREA
typedef struct _E_Desk_Private_Client E_Desk_Private_Client;
-#endif
typedef struct _E_Desk_Smart_Data E_Desk_Smart_Data;
#define DESK_EC_DATA_KEY "E_Desk_Client"
struct wl_listener ds_tizen_splitscreen_deactivate;
};
-#ifdef REFACTOR_DESK_AREA
struct _E_Desk_Private_Client
{
E_Desk *desk;
struct wl_listener client_destroy;
struct wl_listener client_activate_done;
};
-#endif
struct _E_Desk_Smart_Data
{
static void _e_desk_object_zoom(Evas_Object *obj, double zoomx, double zoomy, Evas_Coord cx, Evas_Coord cy);
static void _e_desk_client_zoom(E_Client *ec, double zoomx, double zoomy, Evas_Coord cx, Evas_Coord cy);
-#ifdef REFACTOR_DESK_AREA
-#else
-static Eina_Bool _e_desk_desk_area_base_new(E_Desk *desk);
-#endif
-
static void _e_desk_hooks_clean(void);
static Eina_Bool _e_desk_hook_call(E_Desk_Hook_Point hookpoint, E_Desk *desk);
priv = PRI(desk);
if(!priv) return;
-#ifdef REFACTOR_DESK_AREA
wl_list_remove(&priv->ds_tizen_splitscreen_deactivate.link);
wl_list_remove(&priv->ds_tizen_splitscreen_activate.link);
wl_list_remove(&priv->ds_tizen_splitscreen_destroy.link);
-#endif
e_object_data_set(E_OBJECT(desk), NULL);
}
// new a base e_desk_area
-#ifdef REFACTOR_DESK_AREA
desk->desk_area.base = e_desk_desk_area_add(desk,
desk->geom.x, desk->geom.y, desk->geom.w, desk->geom.h,
E_DESK_AREA_LAYER_NORMAL);
e_object_del(E_OBJECT(desk));
return NULL;
}
-#else
- _e_desk_desk_area_base_new(desk);
-#endif
return desk;
}
evas_object_data_set(ec->frame, DESK_EC_DATA_KEY, desk);
}
-#ifdef REFACTOR_DESK_AREA
-#else
-static void
-_e_client_event_desk_set_free(void *d EINA_UNUSED, E_Event_Client_Desk_Set *ev)
-{
- UNREFD(ev->ec, 4);
- e_object_unref(E_OBJECT(ev->ec));
- e_object_unref(E_OBJECT(ev->desk));
- free(ev);
-}
-#endif
-
static void
_e_desk_client_set(E_Desk *desk, E_Client *ec)
{
-#ifdef REFACTOR_DESK_AREA
-#else
- E_Desk *old_desk;
- E_Event_Client_Desk_Set *ev;
-
- old_desk = e_comp_desk_find_by_ec(ec);
- if (ec->fullscreen)
- {
- if (old_desk)
- old_desk->fullscreen_clients = eina_list_remove(old_desk->fullscreen_clients, ec);
-
- desk->fullscreen_clients = eina_list_append(desk->fullscreen_clients, ec);
- }
-
- if (old_desk)
- e_desk_client_del(old_desk, ec);
-#endif
-
ec->desk = desk; // FIXME: This line must be deleted.
if (!ec->new_client)
e_client_comp_hidden_set(ec, (!desk->visible) && (!ec->sticky));
-#ifdef REFACTOR_DESK_AREA
-#else
- if (old_desk)
- {
- // e_client_desk_set_event_notify(ec);
- ev = E_NEW(E_Event_Client_Desk_Set, 1);
- if (ev)
- {
- ev->ec = ec;
- UNREFD(ec, 4);
- e_object_ref(E_OBJECT(ec));
- ev->desk = old_desk;
- e_object_ref(E_OBJECT(old_desk));
- ecore_event_add(E_EVENT_CLIENT_DESK_SET, ev, (Ecore_End_Cb)_e_client_event_desk_set_free, NULL);
- }
-
- if (e_zone_has_ec(old_desk->zone, ec))
- {
- e_client_res_change_geometry_save(ec);
- e_client_res_change_geometry_restore(ec);
- ec->pre_res_change.valid = 0;
- }
- }
-#endif
-
if (e_config->transient.desktop)
{
E_Client *child;
EINA_LIST_FOREACH(ec->transients, l, child)
e_desk_client_add(desk, child);
}
-
-#ifdef REFACTOR_DESK_AREA
-#else
- if (desk->desk_area.enable)
- {
- if (!ec->desk_area.desk_area)
- {
- E_Desk_Area *eda;
- eda = e_desk_desk_area_base_get(desk);
- e_desk_area_ec_reassign(eda, ec);
- }
-
- e_desk_area_ec_enable_set(desk->desk_area.base, ec, EINA_TRUE);
- }
-#endif
}
-#ifdef REFACTOR_DESK_AREA
static void
_e_desk_private_client_del(E_Desk_Private_Client *desk_client)
{
e_desk_visible_client_iconified_list_remove_all(desk);
}
}
-#endif
EINTERN void
e_desk_client_add(E_Desk *desk, E_Client *ec)
{
-#ifdef REFACTOR_DESK_AREA
E_Desk_Area *eda;
E_Desk_Private_Client *desk_client;
-#endif
+
E_OBJECT_CHECK(desk);
E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
ELOGF("DESK", "CLIENT ADD. desk:%p", ec, desk);
-#ifdef REFACTOR_DESK_AREA
-
desk_client = E_NEW(E_Desk_Private_Client, 1);
EINA_SAFETY_ON_NULL_RETURN(desk_client);
e_client_destroy_listener_add(ec, &desk_client->client_destroy);
desk_client->client_activate_done.notify = _desk_cb_client_activate_done;
e_client_activate_done_listener_add(ec, &desk_client->client_activate_done);
-#endif
_e_desk_client_set(desk, ec);
_e_desk_client_data_set(desk, ec);
-#ifdef REFACTOR_DESK_AREA
eda = e_desk_desk_area_base_get(desk);
e_desk_area_ec_add(eda, ec);
wl_signal_emit(&PRI(desk)->events.client_add, desk);
_e_desk_hook_call(E_DESK_HOOK_CLIENT_ADD, desk);
-#else
- if (desk->desk_area.enable)
- {
- E_Desk_Area *eda;
- eda = e_desk_desk_area_base_get(desk);
-
- e_desk_area_ec_add(eda, ec);
- e_desk_area_ec_enable_set(desk->desk_area.base, ec, EINA_TRUE);
- }
-
-
- _e_desk_smart_client_add(desk->smart_obj, ec);
-
- wl_signal_emit(&PRI(desk)->events.client_add, desk);
- _e_desk_hook_call(E_DESK_HOOK_CLIENT_ADD, desk);
-
-#endif
}
-#ifdef REFACTOR_DESK_AREA
static E_Desk_Private_Client *
_e_desk_private_client_get(E_Client *ec)
{
return wl_container_of(listener, desk_client, client_destroy);
}
-#endif
E_API void
e_desk_client_del(E_Desk *desk, E_Client *ec)
{
-#ifdef REFACTOR_DESK_AREA
E_Desk_Private_Client *desk_client;
E_Desk_Area *eda;
-#endif
+
E_OBJECT_CHECK(desk);
E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
E_OBJECT_CHECK(ec);
E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-#ifdef REFACTOR_DESK_AREA
if (!e_desk_has_ec(desk, ec)) return;
ELOGF("DESK", "CLIENT REMOVE. desk:%p", ec, desk);
e_desk_area_ec_remove(eda, ec);
_e_desk_private_client_del(desk_client);
-#else
- _e_desk_smart_client_del(desk->smart_obj, ec);
-
- if (desk->desk_area.enable)
- {
- E_Desk_Area *eda;
- eda = e_desk_desk_area_base_get(desk);
-
- e_desk_area_ec_enable_set(desk->desk_area.base, ec, EINA_FALSE);
- e_desk_area_ec_remove(eda, ec);
- }
-
- _e_desk_client_data_del(desk, ec);
-#endif
}
E_API void
return desk->desk_area.base;
}
-#ifdef REFACTOR_DESK_AREA
-#else
-static Eina_Bool
-_e_desk_desk_area_base_new(E_Desk *desk)
-{
- if (!desk) return EINA_FALSE;
-
- if (!desk->desk_area.base)
- {
- // Add a base e_desk_area
- desk->desk_area.base = e_desk_desk_area_add(desk, desk->geom.x, desk->geom.y, desk->geom.w, desk->geom.h, E_DESK_AREA_LAYER_NORMAL);
- }
-
- if (!desk->desk_area.base)
- return EINA_FALSE;
- else
- return EINA_TRUE;
-}
-#endif
-
EINTERN void
e_desk_desk_area_active_set(E_Desk *desk, E_Desk_Area *eda)
{
return desk->desk_area.active;
}
-#ifdef REFACTOR_DESK_AREA
-#else
-static void
-_e_desk_desk_area_check_ec_in_desk_area(E_Desk *desk)
-{
- E_Client *ec;
- Eina_List *ec_list = NULL;
-
- E_CLIENT_FOREACH(ec)
- {
- if (!e_desk_has_ec(desk, ec)) continue;
- if (e_object_is_del(E_OBJECT(ec))) continue;
- if (ec->desk_area.desk_area) continue;
-
- ec_list = eina_list_append(ec_list, ec);
- }
-
- EINA_LIST_FREE(ec_list, ec)
- e_desk_area_ec_reassign(desk->desk_area.base, ec);
-}
-
-E_API Eina_Bool
-e_desk_desk_area_enable(E_Desk *desk)
-{
- E_Desk_Area *eda = NULL;
- Eina_List *l;
-
- E_OBJECT_CHECK_RETURN(desk, EINA_FALSE);
- E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, EINA_FALSE);
-
- ELOGF("EDG", "Enable Desk_Area...", NULL);
- if (desk->desk_area.enable) return EINA_TRUE;
- desk->desk_area.enable = EINA_TRUE;
-
- wl_signal_emit(&PRI(desk)->events.desk_area_enable, desk);
- _e_desk_hook_call(E_DESK_HOOK_DESK_AREA_ENABLE, desk);
-
- // check all ec is included in desk group
- _e_desk_desk_area_check_ec_in_desk_area(desk);
-
- for (int i=0; i<E_DESK_AREA_LAYER_COUNT; i++)
- {
- EINA_LIST_REVERSE_FOREACH(desk->desk_area.list[i], l, eda)
- {
- e_desk_area_enable_set(eda, EINA_TRUE);
- }
- }
-
- return EINA_TRUE;
-}
-
-E_API Eina_Bool
-e_desk_desk_area_disable(E_Desk *desk)
-{
- E_Desk_Area *eda = NULL;
- Eina_List *l;
-
- E_OBJECT_CHECK_RETURN(desk, EINA_FALSE);
- E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, EINA_FALSE);
-
- ELOGF("EDG", "Disable Desk_Area...", NULL);
- if (!desk->desk_area.enable) return EINA_TRUE;
- desk->desk_area.enable = EINA_FALSE;
-
- wl_signal_emit(&PRI(desk)->events.desk_area_disable, desk);
- _e_desk_hook_call(E_DESK_HOOK_DESK_AREA_DISABLE, desk);
-
- for (int i=0; i<E_DESK_AREA_LAYER_COUNT; i++)
- {
- EINA_LIST_REVERSE_FOREACH(desk->desk_area.list[i], l, eda)
- {
- e_desk_area_enable_set(eda, EINA_FALSE);
- }
- }
- return EINA_TRUE;
-}
-#endif
-
EINTERN void
e_desk_desk_area_raise(E_Desk *desk, E_Desk_Area *eda)
{
return EINA_FALSE;
}
-#ifdef REFACTOR_DESK_AREA
EINTERN E_Client *
e_desk_top_ec_get(E_Desk *desk)
{
return NULL;
}
-#endif
EINTERN void
e_desk_client_add_listener_add(E_Desk *desk, struct wl_listener *listener)
#include "e_desk_area_intern.h"
#include "e_client_intern.h"
-#ifdef REFACTOR_DESK_AREA
#include "e_comp_object_intern.h"
#include "e_comp_canvas_intern.h"
#include "e_comp_wl_rsm_intern.h"
#include "e_policy_visibility_intern.h"
#include "e_input_intern.h"
#include "e_comp_input_intern.h"
-#endif
#include "e_comp_wl_subsurface_intern.h"
#include "e_zone_intern.h"
#include "e_desk_intern.h"
#include <libds-tizen/screen.h>
typedef struct _E_Desk_Area_Private E_Desk_Area_Private;
-#ifdef REFACTOR_DESK_AREA
typedef struct _E_Desk_Area_Private_Client E_Desk_Area_Private_Client;
#define DESK_AREA_EC_DATA_KEY "E_Desk_Area_Client"
-#endif
#define PRI(eda) ((E_Desk_Area_Private *)e_object_data_get(E_OBJECT(eda)))
E_Desk_Area_Private *priv = PRI(eda); \
EINA_SAFETY_ON_NULL_RETURN_VAL(priv, ret);
-#ifdef REFACTOR_DESK_AREA
typedef struct _E_Desk_Area_Smart_Data E_Desk_Area_Smart_Data;
typedef void (*E_Desk_Area_Stack_Func)(Evas_Object *obj, Evas_Object *stack);
#define E_DESK_AREA_SMART_DATA_GET_OR_RETURN(obj, ptr) \
E_DESK_AREA_SMART_DATA_GET(obj, ptr); \
if (!ptr) return
-#endif
static int _e_desk_area_hooks_delete = 0;
static int _e_desk_area_hooks_walking = 0;
struct wl_listener ds_tizen_splitscreen_region_assign_appid;
};
-#ifdef REFACTOR_DESK_AREA
struct _E_Desk_Area_Private_Client
{
E_Desk_Area *eda;
Eina_List *clients;
Eina_List *handlers;
};
-#endif
struct _E_Desk_Area_Hook
{
static void _e_desk_area_hooks_clean(void);
static Eina_Bool _e_desk_area_hook_call(E_Desk_Area_Hook_Point hookpoint, E_Desk_Area *desk_area, void *appid);
-#ifdef REFACTOR_DESK_AREA
EVAS_SMART_SUBCLASS_NEW(E_DESK_AREA_SMART_OBJ_TYPE, _e_desk_area,
Evas_Smart_Class, Evas_Smart_Class,
evas_object_smart_clipped_class_get, NULL)
-#endif
-#ifdef REFACTOR_DESK_AREA
static void
_e_desk_area_client_data_del(E_Desk_Area *eda, E_Client *ec)
{
if (!cw->visible) return;
e_comp_render_queue();
}
-#else
-static Eina_Bool
-_check_desk_area_client_layer_validation(E_Desk_Area_Client_Layer edgc_layer)
-{
- if ((edgc_layer >= E_DESK_AREA_CLIENT_LAYER_DESKTOP) &&
- (edgc_layer < E_DESK_AREA_CLIENT_LAYER_MAX))
- return EINA_TRUE;
- else
- return EINA_FALSE;
-}
-
-static void
-_e_desk_area_ec_prepend(E_Desk_Area *eda, E_Client *ec)
-{
- E_Desk_Area_Client_Layer edgc_layer;
-
- edgc_layer = e_client_desk_area_client_layer_get(ec);
- if (!_check_desk_area_client_layer_validation(edgc_layer)) return;
-
- eda->ec_lists[edgc_layer] = eina_list_remove(eda->ec_lists[edgc_layer], ec);
- eda->ec_lists[edgc_layer] = eina_list_prepend(eda->ec_lists[edgc_layer], ec);
-
- e_client_desk_area_client_layer_set(ec, edgc_layer);
-}
-
-static void
-_e_desk_area_ec_append(E_Desk_Area *eda, E_Client *ec)
-{
- E_Desk_Area_Client_Layer edgc_layer;
-
- edgc_layer = e_client_desk_area_client_layer_get(ec);
- if (!_check_desk_area_client_layer_validation(edgc_layer)) return;
-
- eda->ec_lists[edgc_layer] = eina_list_remove(eda->ec_lists[edgc_layer], ec);
- eda->ec_lists[edgc_layer] = eina_list_append(eda->ec_lists[edgc_layer], ec);
-
- e_client_desk_area_client_layer_set(ec, edgc_layer);
-}
-
-static void
-_e_desk_area_ec_prepend_relative(E_Desk_Area *eda, E_Client *ec, E_Client *above)
-{
- E_Desk_Area_Client_Layer edgc_layer;
- E_Desk_Area_Client_Layer above_edgc_layer;
-
- // update eda's ec_list order
- edgc_layer = e_client_desk_area_client_layer_get(ec);
- if (!_check_desk_area_client_layer_validation(edgc_layer)) return;
- above_edgc_layer = e_client_desk_area_client_layer_get(above);
- if (!_check_desk_area_client_layer_validation(above_edgc_layer)) return;
-
- ELOGF("EDG", "STACK_ABOVE... eda:%p. layer:%d, above(win:%zx, ec:%p, layer:%d)", ec, eda, edgc_layer, e_client_util_win_get(above), above, above_edgc_layer);
-
- if (edgc_layer == above_edgc_layer)
- {
- eda->ec_lists[edgc_layer] = eina_list_remove(eda->ec_lists[edgc_layer], ec);
- eda->ec_lists[edgc_layer] = eina_list_prepend_relative(eda->ec_lists[edgc_layer], ec, above);
- }
- else
- {
- eda->ec_lists[edgc_layer] = eina_list_remove(eda->ec_lists[edgc_layer], ec);
- eda->ec_lists[above_edgc_layer] = eina_list_prepend_relative(eda->ec_lists[above_edgc_layer], ec, above);
- }
-
- e_client_desk_area_client_layer_set(ec, above_edgc_layer);
-}
-
-static void
-_e_desk_area_ec_append_relative(E_Desk_Area *eda, E_Client *ec, E_Client *below)
-{
- E_Desk_Area_Client_Layer edgc_layer;
- E_Desk_Area_Client_Layer below_edgc_layer;
-
- // update eda's ec_list order
- edgc_layer = e_client_desk_area_client_layer_get(ec);
- if (!_check_desk_area_client_layer_validation(edgc_layer)) return;
- below_edgc_layer = e_client_desk_area_client_layer_get(below);
- if (!_check_desk_area_client_layer_validation(below_edgc_layer)) return;
-
- ELOGF("EDG", "STACK_BELOW... eda:%p. layer:%d, below(win:%zx, ec:%p, layer:%d)", ec, eda, edgc_layer, e_client_util_win_get(below), below, below_edgc_layer);
-
- if (edgc_layer == below_edgc_layer)
- {
- eda->ec_lists[edgc_layer] = eina_list_remove(eda->ec_lists[edgc_layer], ec);
- eda->ec_lists[edgc_layer] = eina_list_append_relative(eda->ec_lists[edgc_layer], ec, below);
- }
- else
- {
- eda->ec_lists[edgc_layer] = eina_list_remove(eda->ec_lists[edgc_layer], ec);
- eda->ec_lists[below_edgc_layer] = eina_list_append_relative(eda->ec_lists[below_edgc_layer], ec, below);
- }
-
- e_client_desk_area_client_layer_set(ec, below_edgc_layer);
-}
-#endif
static void
_e_desk_geometry_info_set(E_Desk_Area *eda, int x, int y, int w, int h)
priv = PRI(eda);
if (!priv) return;
-#ifdef REFACTOR_DESK_AREA
wl_list_remove(&priv->ds_tizen_splitscreen_region_assign_appid.link);
wl_list_remove(&priv->ds_tizen_splitscreen_region_destroy.link);
-#endif
e_object_data_set(E_OBJECT(eda), NULL);
static void
_e_desk_area_free(E_Desk_Area *eda)
{
-#ifdef REFACTOR_DESK_AREA
-#else
- 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);
-#endif
-
E_FREE_FUNC(eda->hook_subsurf_create, e_comp_wl_hook_del);
_e_desk_area_private_finish(eda);
free(eda);
}
-#ifdef REFACTOR_DESK_AREA
static void
_e_desk_area_smart_add(Evas_Object *obj)
{
e_comp_object_transform_obj_stack_update(below);
}
-#endif
-
static void
_desk_area_cb_comp_object_resize(struct wl_listener *listener, void *data)
e_desk_area_new(E_Desk *desk, int id, int x, int y, int w, int h, E_Desk_Area_Layer eda_layer)
{
E_Desk_Area *eda;
-#ifdef REFACTOR_DESK_AREA
Evas_Object *obj;
E_Layer ec_layer;
-#endif
E_OBJECT_CHECK_RETURN(desk, NULL);
E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, NULL);
eda->layer = eda_layer;
-#ifdef REFACTOR_DESK_AREA
/* init smart object */
_e_desk_area_smart_init(eda);
evas_object_layer_set(obj, e_comp_canvas_layer_map_to(ec_layer));
evas_object_name_set(obj, "layer_obj");
}
-#endif
eda->hook_subsurf_create = e_comp_wl_hook_add(E_COMP_WL_HOOK_SUBSURFACE_CREATE,
_e_desk_area_cb_hook_subsurface_create,
return eda;
}
-#ifdef REFACTOR_DESK_AREA
-#else
-void _e_desk_area_ec_geometry_apply(E_Desk_Area *eda, E_Client *ec)
-{
- E_Maximize max;
- E_Util_Transform *transform;
-
- if (e_comp_wl_subsurface_check(ec))
- return;
-
- transform = ec->desk_area.transform;
-
- if (eda->transform_enabled)
- {
- if (!transform) return;
-
- e_util_transform_move(transform, eda->x, eda->y, 0);
- e_util_transform_scale(transform, eda->scale_w, eda->scale_h, 1.0);
- e_client_transform_core_add(ec, transform);
-
- e_client_transform_core_update(ec);
- }
- else
- {
- if (transform)
- {
- e_util_transform_move(transform, 0, 0, 0);
- e_util_transform_scale(transform, 1.0, 1.0, 1.0);
- e_client_transform_core_remove(ec, transform);
-
- e_client_transform_core_update(ec);
- }
-
- if (ec->lock_client_size)
- {
- max = ec->maximized;
- ec->maximized = E_MAXIMIZE_NONE;
- e_client_maximize(ec, max);
- }
- }
-}
-
-void _e_desk_area_ec_geometry_restore(E_Desk_Area *eda, E_Client *ec)
-{
- e_client_transform_core_update(ec);
-}
-
-void _e_desk_area_enable(E_Desk_Area *eda)
-{
- int i;
- E_Client *ec;
- Eina_List *l;
- Eina_List *list;
-
- if (!eda) return;
-
- for (i=0; i<E_DESK_AREA_CLIENT_LAYER_MAX; i++)
- {
- list = eina_list_clone(eda->ec_lists[i]);
- EINA_LIST_REVERSE_FOREACH(list, l, ec)
- {
- e_desk_area_ec_enable_set(eda, ec, EINA_TRUE);
- }
- eina_list_free(list);
- list = NULL;
- }
-}
-
-void _e_desk_area_disable(E_Desk_Area *eda)
-{
- int i;
- E_Client *ec;
- Eina_List *l = NULL;
- Eina_List *list = NULL;
-
- for (i=0; i<E_DESK_AREA_CLIENT_LAYER_MAX; i++)
- {
- list = eina_list_clone(eda->ec_lists[i]);
- EINA_LIST_REVERSE_FOREACH(list, l, ec)
- {
- // unset ec's desk_area enable flag
- e_desk_area_ec_enable_set(eda, ec, EINA_FALSE);
- // restore original ec->layer
- e_client_desk_area_original_layer_restore(ec);
- // restore ec's original geometry (changing real geometry or using transform)
- _e_desk_area_ec_geometry_restore(eda, ec);
-
- e_desk_area_ec_remove(eda, ec);
- }
- eina_list_free(list);
- list = NULL;
-
- eina_list_free(eda->ec_lists[i]);
- eda->ec_lists[i] = NULL;
- }
-}
-
-EINTERN Eina_Bool
-e_desk_area_enable_set(E_Desk_Area *eda, Eina_Bool enable)
-{
- if (!eda) return EINA_FALSE;
-
- eda->enable = enable;
- if (enable)
- {
- _e_desk_area_enable(eda);
- }
- else
- {
- _e_desk_area_disable(eda);
- }
-
- return EINA_TRUE;
-}
-#endif
-
EINTERN const char *
e_desk_area_name_get(E_Desk_Area *eda)
{
return eda->layers[e_comp_canvas_layer_map(layer)].obj;
}
-#ifdef REFACTOR_DESK_AREA
-#else
-static E_Desk_Area_Client_Layer
-_e_desk_area_client_layer_convert_from_layer(E_Layer layer)
-{
- E_Desk_Area_Client_Layer edg_layer;
-
- if (layer <= E_LAYER_CLIENT_DESKTOP)
- edg_layer = E_DESK_AREA_CLIENT_LAYER_DESKTOP;
- else if (layer <= E_LAYER_CLIENT_BELOW)
- edg_layer = E_DESK_AREA_CLIENT_LAYER_BELOW;
- else if (layer <= E_LAYER_CLIENT_NORMAL)
- edg_layer = E_DESK_AREA_CLIENT_LAYER_NORMAL;
- else if (layer <= E_LAYER_CLIENT_ABOVE)
- edg_layer = E_DESK_AREA_CLIENT_LAYER_ABOVE;
- else if (layer <= E_LAYER_CLIENT_NOTIFICATION_LOW)
- edg_layer = E_DESK_AREA_CLIENT_LAYER_NOTIFICATION_LOW;
- else if (layer <= E_LAYER_CLIENT_NOTIFICATION_NORMAL)
- edg_layer = E_DESK_AREA_CLIENT_LAYER_NOTIFICATION_NORMAL;
- else if (layer <= E_LAYER_CLIENT_NOTIFICATION_HIGH)
- edg_layer = E_DESK_AREA_CLIENT_LAYER_NOTIFICATION_HIGH;
- else if (layer <= E_LAYER_CLIENT_NOTIFICATION_TOP)
- edg_layer = E_DESK_AREA_CLIENT_LAYER_NOTIFICATION_TOP;
- else
- edg_layer = E_DESK_AREA_CLIENT_LAYER_ALERT;
-
- return edg_layer;
-}
-#endif
-
-#ifdef REFACTOR_DESK_AREA
static E_Desk_Area_Private_Client *
_e_desk_area_private_client_get(E_Client *ec)
{
return wl_container_of(listener, eda_client, client_destroy);
}
-#endif
E_API Eina_Bool
e_desk_area_ec_add(E_Desk_Area *eda, E_Client *ec)
{
-#ifdef REFACTOR_DESK_AREA
-#else
- E_Desk_Area_Client_Layer edgc_layer;
- E_Layer layer;
-#endif
-
-#ifdef REFACTOR_DESK_AREA
E_Desk_Area_Private_Client *eda_client;
E_OBJECT_CHECK_RETURN(eda, EINA_FALSE);
_e_desk_area_client_data_set(eda, ec);
_e_desk_area_smart_client_add(eda->smart_obj, ec);
-#else
- layer = e_client_desk_area_original_layer_get(ec);
- edgc_layer = _e_desk_area_client_layer_convert_from_layer(layer);
-
- eda->ec_lists[edgc_layer] = eina_list_prepend(eda->ec_lists[edgc_layer], ec);
-
- e_client_desk_area_client_layer_set(ec, edgc_layer);
-#endif
return EINA_TRUE;
}
E_API void
e_desk_area_ec_remove(E_Desk_Area *eda, E_Client *ec)
{
-#ifdef REFACTOR_DESK_AREA
E_Desk_Area_Private_Client *eda_client;
E_OBJECT_CHECK(eda);
EINA_SAFETY_ON_NULL_RETURN(eda_client);
_e_desk_area_private_client_del(eda_client);
-#else
- E_Desk_Area_Client_Layer edgc_layer;
-
- edgc_layer = e_client_desk_area_client_layer_get(ec);
- if (!_check_desk_area_client_layer_validation(edgc_layer)) return;
-
- eda->ec_lists[edgc_layer] = eina_list_remove(eda->ec_lists[edgc_layer], ec);
-#endif
-}
-
-#ifdef REFACTOR_DESK_AREA
-#else
-static E_Client *
-_find_above_ec_in_same_edgc_layer(E_Desk_Area *eda, E_Client *ec)
-{
- Eina_List *l;
- E_Client *above = NULL;
- E_Client *temp = NULL;
- E_Desk_Area_Client_Layer edgc_layer;
- Eina_Bool find = EINA_FALSE;
-
- edgc_layer = e_client_desk_area_client_layer_get(ec);
- if (!_check_desk_area_client_layer_validation(edgc_layer)) return NULL;
-
- EINA_LIST_REVERSE_FOREACH(eda->ec_lists[edgc_layer], l, temp)
- {
- if (find)
- {
- above = temp;
- break;
- }
-
- if (temp == ec)
- {
- find = EINA_TRUE;
- }
- }
-
- // TODO: do we need check below->frame???
-
- return above;
}
-static E_Client *
-_find_bottom_ec_in_above_edgc_layer(E_Desk_Area *eda, E_Client *ec)
-{
- Eina_List *l;
- E_Client *bottom = NULL;
- E_Desk_Area_Client_Layer edgc_layer;
- int i;
-
- edgc_layer = e_client_desk_area_client_layer_get(ec);
- if (!_check_desk_area_client_layer_validation(edgc_layer)) return NULL;
-
- for (i = edgc_layer+1; i < E_DESK_AREA_CLIENT_LAYER_MAX; i++)
- {
- EINA_LIST_REVERSE_FOREACH(eda->ec_lists[i], l, bottom)
- {
- // TODO: do we need check below->frame???
- if (bottom)
- return bottom;
- }
- }
-
- return NULL;
-}
-
-static E_Client *
-_find_bottom_ec_in_above_edg(E_Desk_Area *eda)
-{
- E_Desk_Area *above_edg = NULL;
- E_Client *bottom = NULL;
- Eina_List *l;
- int i;
-
- above_edg = e_desk_desk_area_above_get(eda->desk, eda);
- while (above_edg)
- {
- for (i=E_DESK_AREA_CLIENT_LAYER_DESKTOP; i<E_DESK_AREA_CLIENT_LAYER_MAX; i++)
- {
- EINA_LIST_REVERSE_FOREACH(above_edg->ec_lists[i], l, bottom)
- {
- if (bottom)
- goto find_bottom;
- }
- }
-
- bottom = NULL;
- above_edg = e_desk_desk_area_above_get(above_edg->desk, above_edg);
- }
-
-find_bottom:
- return bottom;
-}
-
-static E_Client *
-_find_below_ec_in_same_edgc_layer(E_Desk_Area *eda, E_Client *ec)
-{
- Eina_List *l;
- E_Client *below = NULL;
- E_Client *temp = NULL;
- E_Desk_Area_Client_Layer edgc_layer;
- Eina_Bool find = EINA_FALSE;
-
- edgc_layer = e_client_desk_area_client_layer_get(ec);
- if (!_check_desk_area_client_layer_validation(edgc_layer)) return NULL;
-
- EINA_LIST_FOREACH(eda->ec_lists[edgc_layer], l, temp)
- {
- if (find)
- {
- below = temp;
- break;
- }
-
- if (temp == ec)
- {
- find = EINA_TRUE;
- }
- }
-
- // TODO: do we need check below->frame???
-
- return below;
-}
-
-static E_Client *
-_find_top_ec_in_below_edgc_layer(E_Desk_Area *eda, E_Client *ec)
-{
- Eina_List *l;
- E_Client *top = NULL;
- E_Desk_Area_Client_Layer edgc_layer;
- int i;
-
- edgc_layer = e_client_desk_area_client_layer_get(ec);
- if (!_check_desk_area_client_layer_validation(edgc_layer)) return NULL;
-
- // if edgc_layer is E_DESK_AREA_CLIENT_LAYER_DESKTOP, then there is no below layer.
- if (edgc_layer == E_DESK_AREA_CLIENT_LAYER_DESKTOP) return NULL;
-
- for (i = edgc_layer-1; i >= E_DESK_AREA_CLIENT_LAYER_DESKTOP; i--)
- {
- EINA_LIST_FOREACH(eda->ec_lists[i], l, top)
- {
- // TODO: do we need check top->frame???
- if (top)
- return top;
- }
- }
-
- return NULL;
-}
-
-static E_Client *
-_find_top_ec_in_below_edg(E_Desk_Area *eda)
-{
- E_Desk_Area *below_edg = NULL;
- E_Client *top = NULL;
- Eina_List *l;
- int i;
-
- below_edg = e_desk_desk_area_below_get(eda->desk, eda);
- while (below_edg)
- {
- for (i=E_DESK_AREA_CLIENT_LAYER_MAX-1; i>=E_DESK_AREA_CLIENT_LAYER_DESKTOP; i--)
- {
- EINA_LIST_FOREACH(below_edg->ec_lists[i], l, top)
- {
- if (top)
- goto find_top;
- }
- }
-
- top = NULL;
- below_edg = e_desk_desk_area_below_get(below_edg->desk, below_edg);
- }
-
-find_top:
- return top;
-}
-
-EINTERN void
-e_desk_area_ec_raise(E_Desk_Area *eda, E_Client *ec)
-{
- E_Client *below = NULL;
- E_Client *above = NULL;
-
- if (!eda) return;
- if (!ec) return;
-
- ELOGF("EDG", "RAISE... eda:%p", ec, eda);
-
- _e_desk_area_ec_prepend(eda, ec);
-
- // 1. find below ec in same edgc layer in same eda
- below = _find_below_ec_in_same_edgc_layer(eda, ec);
- if (below) goto find_below;
-
- // 2. find above ec in same edgc layer in same eda
- above = _find_above_ec_in_same_edgc_layer(eda, ec);
- if (above) goto find_above;
-
- // 3. find bottom ec in above edgc layer in same eda
- above = _find_bottom_ec_in_above_edgc_layer(eda, ec);
- if (above) goto find_above;
-
- // 4. find bottom ec in above eda
- above = _find_bottom_ec_in_above_edg(eda);
- if (above) goto find_above;
-
- // 5. if not found, just evas_object_raise
- ELOGF("EDG", "RAISE... call evas_object_raise", ec);
- evas_object_raise(ec->frame);
- return;
-
-find_below:
- if (below)
- {
- ELOGF("EDG", "STACK_ABOVE... below(win:0x%08zx, ec:%p)", ec, e_client_util_win_get(below), below);
- if (below->frame)
- {
- ELOGF("EDG", "STACK_ABOVE... call evas_object_stack_above", ec);
- evas_object_stack_above(ec->frame, below->frame);
- }
- }
- return;
-
-find_above:
- if (above)
- {
- ELOGF("EDG", "STACK_BELOW... above(win:0x%08zx, ec:%p)", ec, e_client_util_win_get(above), above);
- if (above->frame)
- {
- ELOGF("EDG", "STACK_BELOW... call evas_object_stack_below", ec);
- evas_object_stack_below(ec->frame, above->frame);
- }
- }
- return;
-}
-
-EINTERN void
-e_desk_area_ec_lower(E_Desk_Area *eda, E_Client *ec)
-{
- E_Client *above = NULL;
- E_Client *below = NULL;
-
- if (!eda) return;
- if (!ec) return;
-
- ELOGF("EDG", "LOWER... eda:%p", ec, eda);
-
- _e_desk_area_ec_append(eda, ec);
-
- // 1. find above ec in same edgc layer in same eda
- above = _find_above_ec_in_same_edgc_layer(eda, ec);
- if (above) goto find_above;
-
- // 2. find below ec in same edgc layer in same eda
- below = _find_below_ec_in_same_edgc_layer(eda, ec);
- if (below) goto find_below;
-
- // 3. find top ec in below edgc layer in same eda
- below = _find_top_ec_in_below_edgc_layer(eda, ec);
- if (below) goto find_below;
-
- // 4. find top ec in below eda
- below = _find_top_ec_in_below_edg(eda);
- if (below) goto find_below;
-
- // 5. if not found, just evas_object_raise
- ELOGF("EDG", "LOWER... call evas_object_raise", ec);
- evas_object_lower(ec->frame);
- return;
-
-find_below:
- if (below)
- {
- ELOGF("EDG", "STACK_ABOVE... below(win:0x%08zx, ec:%p)", ec, e_client_util_win_get(below), below);
- if (below->frame)
- {
- ELOGF("EDG", "STACK_ABOVE... call evas_object_stack_above", ec);
- evas_object_stack_above(ec->frame, below->frame);
- }
- }
- return;
-
-find_above:
- if (above)
- {
- ELOGF("EDG", "STACK_BELOW... above(win:0x%08zx, ec:%p)", ec, e_client_util_win_get(above), above);
- if (above->frame)
- {
- ELOGF("EDG", "STACK_BELOW... call evas_object_stack_below", ec);
- evas_object_stack_below(ec->frame, above->frame);
- }
- }
- return;
-}
-
-EINTERN void
-e_desk_area_ec_stack_above(E_Desk_Area *eda, E_Client *ec, E_Client *above)
-{
- if (!eda) return;
- if (!ec) return;
- if (!ec->frame) return;
- if (!above) return;
- if (!above->frame) return;
-
- _e_desk_area_ec_prepend_relative(eda, ec, above);
-
- evas_object_stack_above(ec->frame, above->frame);
-}
-
-EINTERN void
-e_desk_area_ec_stack_below(E_Desk_Area *eda, E_Client *ec, E_Client *below)
-{
- if (!eda) return;
- if (!ec) return;
- if (!ec->frame) return;
- if (!below) return;
- if (!below->frame) return;
-
- _e_desk_area_ec_append_relative(eda, ec, below);
-
- evas_object_stack_below(ec->frame, below->frame);
-}
-
-EINTERN void
-e_desk_area_ec_edg_layer_set(E_Desk_Area *eda, E_Client *ec, E_Layer layer)
-{
- E_Desk_Area_Client_Layer edg_layer;
-
- if (!eda) return;
- if (!ec) return;
-
- // save original layer
-
- edg_layer = eda->layer;
- evas_object_layer_set(ec->frame, edg_layer);
-}
-
-static void
-_e_desk_area_ec_restack(E_Desk_Area *eda, E_Client *ec)
-{
- E_Client *above = NULL, *below = NULL;
-
- // 1. find below ec in same edgc layer in same eda
- below = _find_below_ec_in_same_edgc_layer(eda, ec);
- if (below) goto find_below;
-
- // 2. find above ec in same edgc layer in same eda
- above = _find_above_ec_in_same_edgc_layer(eda, ec);
- if (above) goto find_above;
-
- // 3. find bottom ec in above edgc layer in same eda
- above = _find_bottom_ec_in_above_edgc_layer(eda, ec);
- if (above) goto find_above;
-
- // 4. find bottom ec in above eda
- above = _find_bottom_ec_in_above_edg(eda);
- if (above) goto find_above;
-
- // 5. if not found, just evas_object_raise
- ELOGF("EDG", "RESTACK raise... call evas_object_raise", ec);
- evas_object_raise(ec->frame);
- return;
-
-find_below:
- if (below)
- {
- ELOGF("EDG", "STACK_ABOVE... below(win:0x%08zx, ec:%p)", ec, e_client_util_win_get(below), below);
- if (below->frame)
- {
- ELOGF("EDG", "STACK_ABOVE... call evas_object_stack_above", ec);
- evas_object_stack_above(ec->frame, below->frame);
- }
- }
- return;
-
-find_above:
- if (above)
- {
- ELOGF("EDG", "STACK_BELOW... above(win:0x%08zx, ec:%p)", ec, e_client_util_win_get(above), above);
- if (above->frame)
- {
- ELOGF("EDG", "STACK_BELOW... call evas_object_stack_below", ec);
- evas_object_stack_below(ec->frame, above->frame);
- }
- }
- return;
-}
-
-EINTERN void
-e_desk_area_ec_rearrange(E_Desk_Area *eda, E_Client *ec)
-{
- E_Layer layer;
- E_Desk_Area_Client_Layer edgc_layer, prev_edgc_layer;
-
- ELOGF("EDG", "RE-ARRANGE... eda:%p", ec, eda);
-
- if (!eda) return;
- if (!ec) return;
-
- prev_edgc_layer = e_client_desk_area_client_layer_get(ec);
- if (!_check_desk_area_client_layer_validation(prev_edgc_layer)) return;
-
- eda->ec_lists[prev_edgc_layer] = eina_list_remove(eda->ec_lists[prev_edgc_layer], ec);
-
- layer = e_client_desk_area_original_layer_get(ec);
- edgc_layer = _e_desk_area_client_layer_convert_from_layer(layer);
- eda->ec_lists[edgc_layer] = eina_list_prepend(eda->ec_lists[edgc_layer], ec);
-
- e_client_desk_area_client_layer_set(ec, edgc_layer);
-
- _e_desk_area_ec_restack(eda, ec);
-}
-
-EINTERN void
-e_desk_area_ec_stack_change(E_Desk_Area *eda, E_Client *ec)
-{
-}
-
-E_API void
-e_desk_area_ec_update(E_Desk_Area *eda, E_Client *ec)
-{
- E_Layer layer;
-
- if (!eda) return;
- if (!ec) return;
-
- layer = e_client_desk_area_original_layer_get(ec);
-
- // update stack
- e_client_layer_set_by_desk_area(ec, layer);
-
- // update geometry
- _e_desk_area_ec_geometry_apply(eda, ec);
-}
-
-E_API void
-e_desk_area_all_ec_update(E_Desk_Area *eda)
-{
- int i;
- E_Client *ec;
- Eina_List *l;
- Eina_List *list;
-
- if (!eda) return;
-
- for (i=0; i<E_DESK_AREA_CLIENT_LAYER_MAX; i++)
- {
- list = eina_list_clone(eda->ec_lists[i]);
-
- EINA_LIST_REVERSE_FOREACH(list, l, ec)
- {
- e_desk_area_ec_update(eda, ec);
- }
-
- eina_list_free(list);
- list = NULL;
- }
-}
-
-E_API Eina_List *
-e_desk_area_ec_list_get(E_Desk_Area *eda)
-{
- if (!eda) return NULL;
-
- return NULL;
-}
-
-E_API void
-e_desk_area_transform_enable_set(E_Desk_Area *eda, Eina_Bool enable)
-{
- if (!eda) return;
-
- eda->transform_enabled = enable;
-}
-
-E_API Eina_Bool
-e_desk_area_transform_enable_get(E_Desk_Area *eda)
-{
- if (!eda) return EINA_FALSE;
-
- return eda->transform_enabled;
-}
-#endif
-
// for debug
EINTERN void
e_desk_area_info_print(E_Desk_Area *eda)
{
-#ifdef REFACTOR_DESK_AREA
Eina_List *l;
E_Client *ec;
{
EINA_LIST_FOREACH(eda->ec_lists[i], l, ec)
{
- ELOGF("EDG_INFO", "EDG_Layer[%d] Win:0x%08zx, EC:%p, frame:%p, ec->layer:%d, org_layer:%d, name:%s", NULL, i, e_client_util_win_get(ec), ec, ec->frame, ec->layer, ec->desk_area.layer_backup, ec->icccm.title ? ec->icccm.title:"NO NAME");
+ ELOGF("EDG_INFO", "EDG_Layer[%d] Win:0x%08zx, EC:%p, frame:%p, ec->layer:%d, name:%s", NULL, i, e_client_util_win_get(ec), ec, ec->frame, ec->layer, ec->icccm.title ? ec->icccm.title:"NO NAME");
}
}
ELOGF("EDG_INFO", "===========================================", NULL);
-#endif
}
static void
_e_desk_area_hooks_delete++;
}
-#ifdef REFACTOR_DESK_AREA
-#else
-E_API Eina_Bool
-e_desk_area_ec_reassign(E_Desk_Area *eda, E_Client *ec)
-{
- E_Desk_Area *old_edg;
-
- if (!ec) return EINA_FALSE;
-
-#if 0 // if this is removed.. then below if (eda != old_edg) is removed also...
- if (ec->desk_area.desk_area == eda)
- return EINA_TRUE;
-#endif
-
- ELOGF("EDG", "Desk Group Set (new:%p, old:%p)", ec, eda, ec->desk_area.desk_area);
- old_edg = ec->desk_area.desk_area;
- if (old_edg)
- e_desk_area_ec_remove(old_edg, ec);
-
- ec->desk_area.desk_area = eda;
- e_desk_area_ec_add(eda, ec);
-
-#if 0 // if this is removed.. then above if (ec->desk_area.desk_area == eda) is removed also...
- if (eda != old_edg)
-#endif
- {
- e_desk_area_ec_update(eda, ec);
- e_desk_area_ec_rearrange(ec->desk_area.desk_area, ec);
- }
-
- return EINA_TRUE;
-}
-
-EINTERN Eina_Bool
-e_desk_area_ec_enable_set(E_Desk_Area *eda, E_Client *ec, Eina_Bool enable)
-{
- if (!eda) return EINA_FALSE;
- if (!ec) return EINA_FALSE;
-
- ec->desk_area.enable = enable;
-
- ELOGF("EDG", "Desk group enable set to %d", ec, enable);
- if (enable)
- {
- if (!ec->desk_area.transform)
- {
- ec->desk_area.transform = e_util_transform_new();
- e_util_transform_role_set(ec->desk_area.transform, "desk_area");
- }
- }
- else
- {
- if (ec->desk_area.transform)
- {
- e_util_transform_del(ec->desk_area.transform);
- ec->desk_area.transform = NULL;
- }
- }
-
- e_desk_area_ec_update(ec->desk_area.desk_area, ec);
-
- return EINA_TRUE;
-}
-#endif
-
static void
_desk_area_cb_splitscreen_region_destroy(struct wl_listener *listener EINA_UNUSED, void *data EINA_UNUSED)
{
return EINA_TRUE;
}
-
-#ifdef REFACTOR_DESK_AREA
EINTERN E_Client *
e_desk_area_top_ec_get(E_Desk_Area *eda)
{
return EINA_FALSE;
}
-#endif
EINTERN Eina_Bool e_desk_area_layer_set(E_Desk_Area *eda, E_Desk_Area_Layer layer);
EINTERN Eina_Bool e_desk_area_splitscreen_region_enable(E_Desk_Area *eda, struct ds_tizen_splitscreen_region *splitscreen_region);
-//#ifdef REFACTOR_DESK_AREA
EINTERN const char *e_desk_area_name_get(E_Desk_Area *eda);
EINTERN E_Client *e_desk_area_top_ec_get(E_Desk_Area *eda);
EINTERN E_Client *e_desk_area_bottom_ec_get(E_Desk_Area *eda);
EINTERN Eina_Bool e_desk_area_has_ec(E_Desk_Area *eda, E_Client *ec);
-//#else
-EINTERN Eina_Bool e_desk_area_enable_set(E_Desk_Area *eda, Eina_Bool enable);
-EINTERN void e_desk_area_ec_raise(E_Desk_Area *eda, E_Client *ec);
-EINTERN void e_desk_area_ec_lower(E_Desk_Area *eda, E_Client *ec);
-EINTERN void e_desk_area_ec_stack_above(E_Desk_Area *eda, E_Client *ec, E_Client *above);
-EINTERN void e_desk_area_ec_stack_below(E_Desk_Area *eda, E_Client *ec, E_Client *below);
-EINTERN void e_desk_area_ec_edg_layer_set(E_Desk_Area *eda, E_Client *ec, E_Layer layer);
-EINTERN void e_desk_area_ec_rearrange(E_Desk_Area *eda, E_Client *ec);
-EINTERN void e_desk_area_ec_stack_change(E_Desk_Area *eda, E_Client *ec);
-EINTERN Eina_Bool e_desk_area_ec_enable_set(E_Desk_Area *eda, E_Client *ec, Eina_Bool enable);
-//#endif
// for debug
EINTERN void e_desk_area_info_print(E_Desk_Area *eda);
EINTERN void e_desk_col_add(E_Zone *zone);
EINTERN void e_desk_col_remove(E_Zone *zone);
EINTERN Eina_Bool e_desk_has_ec(E_Desk *desk, E_Client *ec);
-//#ifdef REFACTOR_DESK_AREA
EINTERN E_Client *e_desk_top_ec_get(E_Desk *desk);
EINTERN E_Client *e_desk_bottom_ec_get(E_Desk *desk);
-//#endif
EINTERN unsigned int e_desks_count(void);
EINTERN Eina_Bool e_desk_zoom_get_center_coordinate(E_Desk *desk, double zoomx, double zoomy, int rectx, int recty, int *cx, int *cy);
struct wl_listener client_eval_end;
struct wl_listener stack_transient_for_done;
-#ifdef REFACTOR_DESK_AREA
struct wl_listener comp_object_lower_done;
-#else
- struct wl_listener comp_object_lower;
-#endif
struct wl_listener comp_object_show;
struct wl_listener comp_object_hide;
};
wl_list_remove(&history_client->comp_object_hide.link);
wl_list_remove(&history_client->comp_object_show.link);
-#ifdef REFACTOR_DESK_AREA
wl_list_remove(&history_client->comp_object_lower_done.link);
-#else
- wl_list_remove(&history_client->comp_object_lower.link);
-#endif
wl_list_remove(&history_client->stack_transient_for_done.link);
wl_list_remove(&history_client->client_eval_end.link);
{
E_Focus_Policy_History_Client *history_client;
E_Focus_Policy_History *history_policy;
-#ifdef REFACTOR_DESK_AREA
E_Client *focused_ec, *ec;
-#else
- E_Client *focused_ec, *ec, *ec2;
- E_Zone *zone;
- Eina_List *l, *ll;
-#endif
history_client = wl_container_of(listener, history_client, client_focus_set);
focused_ec = history_policy->focused_ec;
if (ec == focused_ec) return;
-#ifdef REFACTOR_DESK_AREA
-#else
- zone = history_policy->zone;
-#endif
-
ec->focused = 1;
-#ifdef REFACTOR_DESK_AREA
-#else
- // TODO: This is not for focus policy, but for fullscreen(Window State) policy.
- // Move this code to the better place.
- int x, total = zone->desk_x_count * zone->desk_y_count;
- for (x = 0; x < total; x++)
- {
- E_Desk *desk = zone->desks[x];
- /* if there's any fullscreen non-parents on this desk, unfullscreen them */
- EINA_LIST_FOREACH_SAFE(desk->fullscreen_clients, l, ll, ec2)
- {
- if (ec2 == ec) continue;
- if (e_object_is_del(E_OBJECT(ec2))) continue;
- /* but only if it's the same desk or one of the clients is sticky */
- if (e_desk_has_ec(desk, ec) || (ec->sticky || ec2->sticky))
- {
- if (!eina_list_data_find(ec->transients, ec2))
- e_client_unfullscreen(ec2);
- }
- }
- }
-#endif
-
if (ec->parent && !e_object_is_del(E_OBJECT(ec->parent)))
{
if (e_client_modal_child_get(ec->parent) == ec)
e_client_frame_focus_set(new_focus, EINA_TRUE);
}
-#ifdef REFACTOR_DESK_AREA
static void
_focus_policy_history_cb_comp_object_lower_done(struct wl_listener *listener, void *data)
-#else
-static void
-_focus_policy_history_cb_comp_object_lower(struct wl_listener *listener, void *data)
-#endif
{
E_Focus_Policy_History_Client *history_client;
E_Focus_Policy_History *history_policy;
E_Client *ec;
-#ifdef REFACTOR_DESK_AREA
history_client = wl_container_of(listener, history_client, comp_object_lower_done);
-#else
- history_client = wl_container_of(listener, history_client, comp_object_lower);
-#endif
-
history_policy = history_client->history_policy;
EINA_SAFETY_ON_NULL_RETURN(history_policy);
e_client_stack_transient_for_done_listener_add(ec, &history_client->stack_transient_for_done);
// e_comp_object listeners
-#ifdef REFACTOR_DESK_AREA
history_client->comp_object_lower_done.notify = _focus_policy_history_cb_comp_object_lower_done;
e_comp_object_lower_done_listener_add(obj, &history_client->comp_object_lower_done);
-#else
- history_client->comp_object_lower.notify = _focus_policy_history_cb_comp_object_lower;
- e_comp_object_lower_listener_add(obj, &history_client->comp_object_lower);
-#endif
history_client->comp_object_show.notify = _focus_policy_history_cb_comp_object_show;
e_comp_object_show_listener_add(obj, &history_client->comp_object_show);
history_client->comp_object_hide.notify = _focus_policy_history_cb_comp_object_hide;
{
E_Focus_Policy_Topmost_Client *topmost_client;
E_Focus_Policy_Topmost *topmost_policy;
-#ifdef REFACTOR_DESK_AREA
E_Client *focused_ec, *ec;
-#else
- E_Client *focused_ec, *ec, *ec2;
- E_Zone *zone;
- Eina_List *l, *ll;
-#endif
topmost_client = wl_container_of(listener, topmost_client, client_focus_set);
focused_ec = topmost_policy->focused_ec;
if (ec == focused_ec) return;
-#ifdef REFACTOR_DESK_AREA
-#else
- zone = topmost_policy->zone;
-#endif
-
ec->focused = 1;
-#ifdef REFACTOR_DESK_AREA
-#else
- // TODO: This is not for focus policy, but for fullscreen(Window State) policy.
- // Move this code to the better place.
- int x, total = zone->desk_x_count * zone->desk_y_count;
- for (x = 0; x < total; x++)
- {
- E_Desk *desk = zone->desks[x];
- /* if there's any fullscreen non-parents on this desk, unfullscreen them */
- EINA_LIST_FOREACH_SAFE(desk->fullscreen_clients, l, ll, ec2)
- {
- if (ec2 == ec) continue;
- if (e_object_is_del(E_OBJECT(ec2))) continue;
- /* but only if it's the same desk or one of the clients is sticky */
- if ((e_desk_has_ec(desk, ec2)) || (ec->sticky || ec2->sticky))
- {
- if (!eina_list_data_find(ec->transients, ec2))
- e_client_unfullscreen(ec2);
- }
- }
- }
-#endif
-
// assign the focused_ec
set_focused_ec(topmost_policy, ec);
return reply;
}
-#ifdef REFACTOR_DESK_AREA
-#else
-static E_Desk_Area *_edg_sub1 = NULL;
-static E_Desk_Area *_edg_sub2 = NULL;
-#endif
-
static Eldbus_Message *
_e_info_server_cb_desk_area_info(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
{
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
-#ifdef REFACTOR_DESK_AREA
-#else
- E_Zone *zone;
- E_Desk *desk;
-
- zone = e_zone_current_get();
- desk = e_desk_current_get(zone);
-
- e_desk_desk_area_info_print(desk);
-#endif
-
return reply;
}
_e_info_server_cb_desk_area_enable(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
{
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
-#ifdef REFACTOR_DESK_AREA
-#else
- uint32_t enable;
- if (!eldbus_message_arguments_get(msg, "i", &enable))
- {
- ERR("Error getting arguments.");
- return reply;
- }
-
- if (enable == 1)
- {
- e_desk_desk_area_enable(e_desk_current_get(e_zone_current_get()));
- }
- else if (enable == 0)
- {
- e_desk_desk_area_disable(e_desk_current_get(e_zone_current_get()));
- }
-#endif
return reply;
}
-#ifdef REFACTOR_DESK_AREA
-#else
-static void _desk_area_new(int sub_edg_id, int x, int y, int w, int h, int layer)
-{
- E_Zone *zone;
- E_Desk *desk;
- E_Desk_Area_Layer edg_layer;
-
- zone = e_zone_current_get();
- desk = e_desk_current_get(zone);
-
- switch (layer)
- {
- case 0: edg_layer = E_DESK_AREA_LAYER_BACKGROUND; break;
- case 1: edg_layer = E_DESK_AREA_LAYER_NORMAL_BELOW; break;
- case 2: edg_layer = E_DESK_AREA_LAYER_NORMAL; break;
- case 3: edg_layer = E_DESK_AREA_LAYER_NORMAL_ABOVE; break;
- case 4: edg_layer = E_DESK_AREA_LAYER_NOTIFICATION_LOW; break;
- case 5: edg_layer = E_DESK_AREA_LAYER_NOTIFICATION_NORMAL; break;
- case 6: edg_layer = E_DESK_AREA_LAYER_NOTIFICATION_HIGH; break;
- default: edg_layer = E_DESK_AREA_LAYER_NORMAL; break;
- }
-
- if (sub_edg_id == 1)
- {
- if (!_edg_sub1)
- _edg_sub1 = e_desk_desk_area_add(desk, x, y, w, h, edg_layer);
- else
- {
- e_desk_area_geometry_set(_edg_sub1, x, y, w, h);
- e_desk_area_layer_set(_edg_sub1, edg_layer);
- }
- }
- else if (sub_edg_id == 2)
- {
- if (!_edg_sub2)
- _edg_sub2 = e_desk_desk_area_add(desk, x, y, w, h, edg_layer);
- else
- {
- e_desk_area_geometry_set(_edg_sub2, x, y, w, h);
- e_desk_area_layer_set(_edg_sub2, edg_layer);
- }
- }
-}
-#endif
-
static Eldbus_Message *
_e_info_server_cb_desk_area_new_sub1(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
{
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
-#ifdef REFACTOR_DESK_AREA
-#else
- E_Client *ec;
- int x, y, w, h;
- int layer;
- Eina_List*l;
- Eina_List *ec_list = NULL;
-
- if (!eldbus_message_arguments_get(msg, "iiiii", &x, &y, &w, &h, &layer))
- {
- ERR("Error getting arguments.");
- return reply;
- }
-
- _desk_area_new(1, x, y, w, h, layer);
-
- E_CLIENT_REVERSE_FOREACH(ec)
- {
- ec_list = eina_list_append(ec_list, ec);
- }
-
- EINA_LIST_REVERSE_FOREACH(ec_list, l, ec)
- {
- e_desk_area_ec_reassign(_edg_sub1, ec);
- }
-
- //e_desk_area_all_ec_update(_edg_sub1);
-#endif
-
return reply;
}
{
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
-#ifdef REFACTOR_DESK_AREA
-#else
- int x, y, w, h;
- int layer;
- E_Client *ec;
-
- if (!eldbus_message_arguments_get(msg, "iiiii", &x, &y, &w, &h, &layer))
- {
- ERR("Error getting arguments.");
- return reply;
- }
-
- _desk_area_new(2, x, y, w, h, layer);
-
- E_CLIENT_FOREACH(ec)
- {
- if (e_policy_client_is_home_screen(ec))
- e_desk_area_ec_reassign(_edg_sub2, ec);
- else if (e_policy_client_is_quickpanel(ec))
- e_desk_area_ec_reassign(_edg_sub2, ec);
- }
-#endif
-
return reply;
}
_e_info_server_cb_desk_area_remove_sub(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
{
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
-#ifdef REFACTOR_DESK_AREA
-#else
- uint32_t sub_edg_id;
- E_Zone *zone;
- E_Desk *desk;
- if (!eldbus_message_arguments_get(msg, "i", &sub_edg_id))
- {
- ERR("Error getting arguments.");
- return reply;
- }
-
- zone = e_zone_current_get();
- desk = e_desk_current_get(zone);
-
- if (sub_edg_id == 1)
- {
- e_desk_desk_area_del(desk, _edg_sub1);
- _edg_sub1 = NULL;
- }
- else if (sub_edg_id == 2)
- {
- e_desk_desk_area_del(desk, _edg_sub2);
- _edg_sub2 = NULL;
- }
-#endif
return reply;
}
_e_info_server_cb_desk_area_sub1_raise(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
{
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
-#ifdef REFACTOR_DESK_AREA
-#else
- uint32_t raise;
-
- if (!eldbus_message_arguments_get(msg, "i", &raise))
- {
- ERR("Error getting arguments.");
- return reply;
- }
- if (_edg_sub1)
- _desk_area_raise(_edg_sub1, raise);
-#endif
return reply;
}
_e_info_server_cb_desk_area_sub2_raise(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
{
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
-#ifdef REFACTOR_DESK_AREA
-#else
- uint32_t raise;
- if (!eldbus_message_arguments_get(msg, "i", &raise))
- {
- ERR("Error getting arguments.");
- return reply;
- }
-
- if (_edg_sub2)
- _desk_area_raise(_edg_sub2, raise);
-#endif
return reply;
}
ec->icccm.transient_for, e_client_util_win_get(ec->parent));
}
-#ifdef REFACTOR_DESK_AREA
-#else
- if (parent)
- {
- if (ec->desk_area.desk_area && parent->desk_area.desk_area)
- {
- if (ec->desk_area.desk_area != parent->desk_area.desk_area)
- {
- e_desk_area_ec_reassign(parent->desk_area.desk_area, ec);
- }
- }
- }
-#endif
-
intercepted = e_policy_interceptor_call(E_POLICY_INTERCEPT_STACK_TRANSIENT_FOR,
ec);
if (intercepted)
return;
}
-#ifdef REFACTOR_DESK_AREA
if (ec->parent->layer != ec->layer)
{
raise = e_config->transient.raise;
e_client_layer_set(ec, ec->parent->layer);
e_config->transient.raise = raise;
}
-#else
- if (ec->desk_area.enable)
- {
- E_Layer layer;
- E_Layer parent_layer;
-
- layer = e_client_desk_area_original_layer_get(ec);
- parent_layer = e_client_desk_area_original_layer_get(ec->parent);
-
- if (parent_layer != layer)
- {
- raise = e_config->transient.raise;
-
- ec->saved.layer = layer;
- if (e_config->transient.layer)
- {
- e_config->transient.raise = 1;
- EINA_LIST_FOREACH(ec->transients, l, child)
- {
- if (!child) continue;
- child->saved.layer = e_client_desk_area_original_layer_get(child);
- }
- }
-
- e_client_layer_set(ec, parent_layer);
- e_config->transient.raise = raise;
- }
- }
- else
- {
- if (ec->parent->layer != ec->layer)
- {
- raise = e_config->transient.raise;
-
- ec->saved.layer = ec->layer;
- if (e_config->transient.layer)
- {
- e_config->transient.raise = 1;
- EINA_LIST_FOREACH(ec->transients, l, child)
- {
- if (!child) continue;
- child->saved.layer = child->layer;
- }
- }
-
- e_client_layer_set(ec, ec->parent->layer);
- e_config->transient.raise = raise;
- }
- }
-#endif
E_Transient transient_policy = e_client_transient_policy_get(ec);
if (transient_policy == E_TRANSIENT_ABOVE)
default: ly = E_LAYER_CLIENT_NOTIFICATION_LOW; break;
}
-#ifdef REFACTOR_DESK_AREA
cur_ly = e_client_layer_get(ec);
-#else
- cur_ly = e_client_desk_area_original_layer_get(ec);
-#endif
if (cur_ly != ly)
{
struct wl_listener client_destroy;
struct wl_listener client_eval_post_new_client;
struct wl_listener client_focus_set;
-#ifdef REFACTOR_DESK_AREA
-#else
- struct wl_listener client_iconify;
- struct wl_listener client_uniconify;
- struct wl_listener client_stick;
- struct wl_listener client_unstick;
- struct wl_listener client_maximize;
- struct wl_listener client_unmaximize;
- struct wl_listener client_activate_done;
- struct wl_listener client_fullscreen;
- struct wl_listener client_unfullscreen;
-#endif
};
return 1;
}
-#ifdef REFACTOR_DESK_AREA
-#else
-static void
-_e_zone_client_maximize(E_Zone *zone, E_Desk *desk, E_Client *ec, E_Maximize max)
-{
- int x1, yy1, x2, y2;
- int zx, zy, zw, zh;
- int desk_x, desk_y, desk_w, desk_h;
- Eina_Bool override = ec->maximize_override;
-
- zx = zy = zw = zh = 0;
- ec->maximize_override = 1;
-
- if (ec->desk_area.enable && ec->desk_area.desk_area)
- {
- desk_x = ec->desk_area.desk_area->x;
- desk_y = ec->desk_area.desk_area->y;
- desk_w = ec->desk_area.desk_area->w;
- desk_h = ec->desk_area.desk_area->h;
- }
- else
- {
- desk_x = desk->geom.x;
- desk_y = desk->geom.y;
- desk_w = desk->geom.w;
- desk_h = desk->geom.h;
- }
-
- switch (max & E_MAXIMIZE_TYPE)
- {
- case E_MAXIMIZE_NONE:
- /* Ignore */
- break;
-
- case E_MAXIMIZE_FULLSCREEN:
- case E_MAXIMIZE_FILL:
- if (ec->base_output_resolution.use)
- {
- zx = desk_x;
- zy = desk_y;
- zw = ec->base_output_resolution.w;
- zh = ec->base_output_resolution.h;
- }
- else
- {
- e_zone_desk_useful_geometry_get(zone, desk, &zx, &zy, &zw, &zh, EINA_FALSE);
- }
-
- switch (max & E_MAXIMIZE_DIRECTION)
- {
- case E_MAXIMIZE_BOTH:
- e_client_maximized_geometry_set(ec, zx, zy, zw, zh);
- break;
-
- case E_MAXIMIZE_VERTICAL:
- e_client_maximized_geometry_set(ec, ec->x, zy, ec->w, zh);
- break;
-
- case E_MAXIMIZE_HORIZONTAL:
- e_client_maximized_geometry_set(ec, zx, ec->y, zw, ec->h);
- break;
-
- case E_MAXIMIZE_LEFT:
- e_client_maximized_geometry_set(ec, zx, zy, zw / 2, zh);
- break;
-
- case E_MAXIMIZE_RIGHT:
- e_client_maximized_geometry_set(ec, zx + zw / 2, zy, zw / 2, zh);
- break;
- }
- break;
-
- case E_MAXIMIZE_SMART:
- case E_MAXIMIZE_EXPAND:
- if (desk->visible)
- {
- // base_output_resolution
- if (ec->base_output_resolution.use)
- {
- zx = desk_x;
- zy = desk_y;
- zw = ec->base_output_resolution.w;
- zh = ec->base_output_resolution.h;
- }
- else
- {
- e_zone_desk_useful_geometry_get(zone, desk, &zx, &zy, &zw, &zh, EINA_TRUE);
- }
- }
- else
- {
- x1 = desk_x;
- yy1 = desk_y;
- x2 = desk_x + desk_w;
- y2 = desk_y + desk_h;
- e_maximize_client_shelf_fill(ec, &x1, &yy1, &x2, &y2, max);
- zx = x1, zy = yy1;
- zw = x2 - x1;
- zh = y2 - yy1;
- }
-
- e_comp_object_maximize(ec->frame);
-
- switch (max & E_MAXIMIZE_DIRECTION)
- {
- case E_MAXIMIZE_BOTH:
- e_client_maximized_geometry_set(ec, zx, zy, zw, zh);
- break;
-
- case E_MAXIMIZE_VERTICAL:
- e_client_maximized_geometry_set(ec, ec->x, zy, ec->w, zh);
- break;
-
- case E_MAXIMIZE_HORIZONTAL:
- e_client_maximized_geometry_set(ec, zx, ec->y, zw, ec->h);
- break;
-
- case E_MAXIMIZE_LEFT:
- e_client_maximized_geometry_set(ec, zx, zy, zw / 2, zh);
- break;
-
- case E_MAXIMIZE_RIGHT:
- e_client_maximized_geometry_set(ec, zx + zw / 2, zy, zw / 2, zh);
- break;
- }
- break;
- }
-
- if (ec->maximize_override)
- ec->maximize_override = override;
-}
-#endif
-
static void
_e_zone_client_apply_auto_placement(E_Zone *zone, E_Client *ec)
{
ec->desk_zoom.transform = NULL;
E_FREE_FUNC(ec->desk_zoom.hook_subsurf_create, e_comp_wl_hook_del);
-#ifdef REFACTOR_DESK_AREA
-#else
- if (ec->desk_area.desk_area)
- e_desk_area_ec_remove(ec->desk_area.desk_area, ec);
- 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();
- }
-#endif
-
wl_signal_emit_mutable(&PRI(zone)->events.client_remove, ec);
e_desk_client_del(desk, ec);
-#ifdef REFACTOR_DESK_AREA
-#else
- wl_list_remove(&zone_client->client_unfullscreen.link);
- wl_list_remove(&zone_client->client_fullscreen.link);
- wl_list_remove(&zone_client->client_activate_done.link);
- wl_list_remove(&zone_client->client_unmaximize.link);
- wl_list_remove(&zone_client->client_maximize.link);
- wl_list_remove(&zone_client->client_unstick.link);
- wl_list_remove(&zone_client->client_stick.link);
- wl_list_remove(&zone_client->client_uniconify.link);
- wl_list_remove(&zone_client->client_iconify.link);
-#endif
wl_list_remove(&zone_client->client_focus_set.link);
wl_list_remove(&zone_client->client_eval_post_new_client.link);
wl_list_remove(&zone_client->client_destroy.link);
e_desk_client_add(e_desk_current_get(zone), ec);
}
-#ifdef REFACTOR_DESK_AREA
-#else
-static void
-_zone_cb_client_iconify(struct wl_listener *listener, void *data)
-{
- E_Zone_Private_Client *zone_client;
- E_Zone *zone;
- E_Client *ec;
- E_Desk *desk;
-
- zone_client = wl_container_of(listener, zone_client, client_iconify);
- zone = zone_client->zone;
- ec = zone_client->ec;
-
- desk = e_zone_desk_find_by_ec(zone, ec);
- EINA_SAFETY_ON_NULL_RETURN(desk);
-
- e_comp_wl_remote_surface_image_save(ec);
-
- ec->iconic = 1;
- ec->want_focus = ec->take_focus = 0;
- ec->changes.visible = 0;
- if (ec->fullscreen)
- desk->fullscreen_clients = eina_list_remove(desk->fullscreen_clients, ec);
- e_client_comp_hidden_set(ec, 1);
- evas_object_hide(ec->frame);
-
- e_client_iconify_event_send(ec);
-
- if (e_config->transient.iconify)
- {
- E_Client *child;
- Eina_List *list = eina_list_clone(ec->transients);
-
- EINA_LIST_FREE(list, child)
- {
- if ((child->exp_iconify.type != E_ICONIFIED_TYPE_ICONIFY_BY_CLIENT) &&
- (e_client_is_parent_iconify_by_client(child)))
- {
- e_client_iconified_type_set(child, E_ICONIFIED_TYPE_PARENT_ICONIFY_BY_CLIENT);
- child->exp_iconify.by_client = 1;
- e_policy_client_iconic_state_change_send(child, 1);
- }
- e_client_iconify(child);
- }
- }
-}
-
-static void
-_zone_cb_client_uniconify(struct wl_listener *listener, void *data)
-{
- E_Zone_Private_Client *zone_client;
- E_Zone *zone;
- E_Client *ec;
- E_Desk *desk;
- Eina_Bool not_raise;
-
- zone_client = wl_container_of(listener, zone_client, client_uniconify);
- zone = zone_client->zone;
- ec = zone_client->ec;
-
- desk = e_zone_desk_find_by_ec(zone, ec);
- EINA_SAFETY_ON_NULL_RETURN(desk);
-
- e_comp_wl_remote_surface_image_save_cancel(ec);
-
- e_desk_client_add(desk, ec);
- not_raise = ec->exp_iconify.not_raise;
-
- ec->exp_iconify.by_client = 0;
- e_client_iconified_type_set(ec, E_ICONIFIED_TYPE_NONE);
-
- if (e_config->transient.iconify)
- {
- E_Client *child;
- Eina_List *list = eina_list_clone(ec->transients);
-
- EINA_LIST_FREE(list, child)
- {
- if (e_client_transient_policy_get(child) == E_TRANSIENT_BELOW)
- {
- child->exp_iconify.not_raise = not_raise;
- e_client_uniconify(child);
- }
- }
- }
-
- if (!not_raise)
- e_client_raise(ec);
-
- if (ec->internal)
- {
- ELOGF("TZVIS", "UNICONIFY|internal object force show", ec);
- evas_object_show(ec->frame);
- }
-
- if (ec->pixmap)
- {
- E_Comp_Wl_Client_Data *cdata;
-
- cdata = e_client_cdata_get(ec);
-
- if (e_pixmap_usable_get(ec->pixmap))
- {
- if (cdata && cdata->mapped)
- {
- ELOGF("TZVIS", "UNICONIFY|object show. frame_visible:%d", ec,
- evas_object_visible_get(ec->frame));
- evas_object_show(ec->frame);
- }
- else
- {
- ELOGF("TZVIS", "UNICONIFY|object no show. currently unmapped", ec);
- }
- }
- else
- {
- if (!ec->exp_iconify.buffer_flush &&
- !ec->exp_iconify.deiconify_update)
- {
- if (cdata && cdata->mapped)
- {
- ELOGF("TZVIS", "UNICONIFY|object show. no use buffer flush. frame_visible:%d", ec,
- evas_object_visible_get(ec->frame));
- evas_object_show(ec->frame);
- }
- }
- }
- }
- e_client_comp_hidden_set(ec, 0);
- ec->deskshow = ec->iconic = 0;
-
-#if 0 // focus should be set to the top window not uniconify window
- if (ec->pixmap && e_pixmap_usable_get(ec->pixmap))
- e_client_frame_focus_set(ec, EINA_TRUE);
-#endif
-
- // send the uniconify event of a client
- e_client_uniconify_event_send(ec);
-
- if (e_config->transient.iconify)
- {
- E_Client *child;
- Eina_List *list = eina_list_clone(ec->transients);
-
- EINA_LIST_FREE(list, child)
- {
- if (e_client_transient_policy_get(child) == E_TRANSIENT_ABOVE)
- {
- if (child->exp_iconify.type == E_ICONIFIED_TYPE_PARENT_ICONIFY_BY_CLIENT)
- e_policy_client_iconic_state_change_send(child, 0);
- child->exp_iconify.not_raise = not_raise;
- e_client_uniconify(child);
- }
- }
- }
-
- ec->exp_iconify.not_raise = 0;
-}
-
-static void
-_zone_cb_client_stick(struct wl_listener *listener, void *data)
-{
- E_Zone_Private_Client *zone_client;
- E_Zone *zone;
- E_Client *ec;
- E_Desk *desk;
-
- zone_client = wl_container_of(listener, zone_client, client_stick);
- zone = zone_client->zone;
- ec = zone_client->ec;
-
- desk = e_zone_desk_find_by_ec(zone, ec);
- EINA_SAFETY_ON_NULL_RETURN(desk);
-
- e_desk_client_del(desk, ec);
- ec->sticky = 1;
- ec->hidden = 0;
-
- e_desk_client_add(desk, ec);
-
- if (e_config->transient.desktop)
- {
- E_Client *child;
- Eina_List *list = eina_list_clone(ec->transients);
-
- EINA_LIST_FREE(list, child)
- {
- child->sticky = 1;
- evas_object_show(ec->frame);
- }
- }
-}
-
-static void
-_zone_cb_client_unstick(struct wl_listener *listener, void *data)
-{
- E_Zone_Private_Client *zone_client;
- E_Zone *zone;
- E_Client *ec;
- E_Desk *desk, *curr_desk;
-
- zone_client = wl_container_of(listener, zone_client, client_unstick);
- zone = zone_client->zone;
- ec = zone_client->ec;
-
- desk = e_zone_desk_find_by_ec(zone, ec);
- EINA_SAFETY_ON_NULL_RETURN(desk);
-
- e_desk_client_del(desk, ec);
- ec->hidden = ec->sticky = 0;
-
- curr_desk = e_desk_current_get(zone);
- e_desk_client_add(curr_desk, ec);
-
- if (e_config->transient.desktop)
- {
- E_Client *child;
- Eina_List *list = eina_list_clone(ec->transients);
-
- EINA_LIST_FREE(list, child)
- {
- child->sticky = 0;
- }
- }
-}
-
-static void
-_zone_cb_client_maximize(struct wl_listener *listener, void *data)
-{
- E_Zone_Private_Client *zone_client;
- E_Zone *zone;
- E_Client *ec;
- E_Desk *desk;
- int desk_x, desk_y;
- E_Maximize max;
-
- zone_client = wl_container_of(listener, zone_client, client_maximize);
- zone = zone_client->zone;
- ec = zone_client->ec;
-
- // "override = 1" means that ec is not controlled by wm policy
- if (ec->override) return;
-
- max = *((E_Maximize *)data);
-
- desk = e_zone_desk_find_by_ec(zone, ec);
- EINA_SAFETY_ON_NULL_RETURN(desk);
-
- if (ec->desk_area.enable && ec->desk_area.desk_area)
- {
- desk_x = ec->desk_area.desk_area->x;
- desk_y = ec->desk_area.desk_area->y;
- }
- else
- {
- desk_x = desk->geom.x;
- desk_y = desk->geom.y;
- }
-
- ec->pre_res_change.valid = 0;
-
- if (!ec->fullscreen)
- {
- ec->comp_data->maximize_pre = 1;
-
- if (!(ec->maximized & E_MAXIMIZE_HORIZONTAL))
- {
- /* Horizontal hasn't been set */
- ec->saved.x = ec->client.x - desk_x;
- ec->saved.w = ec->client.w;
- }
- if (!(ec->maximized & E_MAXIMIZE_VERTICAL))
- {
- /* Vertical hasn't been set */
- ec->saved.y = ec->client.y - desk_y;
- ec->saved.h = ec->client.h;
- }
-
- ec->saved.zone = zone->num;
-
- _e_zone_client_maximize(zone, desk, ec, max);
- }
-}
-
-static void
-_zone_cb_client_unmaximize(struct wl_listener *listener, void *data)
-{
- E_Zone_Private_Client *zone_client;
- E_Zone *zone;
- E_Client *ec;
- E_Maximize max;
-
- zone_client = wl_container_of(listener, zone_client, client_unmaximize);
- zone = zone_client->zone;
- ec = zone_client->ec;
-
- if (ec->fullscreen) return;
-
- max = *((E_Maximize *)data);
-
- if (ec->maximized & E_MAXIMIZE_TYPE)
- {
- ec->pre_res_change.valid = 0;
- ec->changes.need_maximize = 0;
-
- if ((ec->maximized & E_MAXIMIZE_TYPE) == E_MAXIMIZE_FULLSCREEN)
- {
- E_Maximize tmp_max = ec->maximized;
-
- //un-set maximized state for updating frame.
- ec->maximized = E_MAXIMIZE_NONE;
- e_client_frame_update(ec);
- // re-set maximized state for unmaximize smart callback.
- ec->maximized = tmp_max;
- evas_object_smart_callback_call(ec->frame, "unfullscreen", NULL);
- // un-set maximized state.
- ec->maximized = E_MAXIMIZE_NONE;
- e_client_util_move_resize_without_frame(ec,
- ec->saved.x + zone->x,
- ec->saved.y + zone->y,
- ec->saved.w, ec->saved.h);
- ec->saved.x = ec->saved.y = ec->saved.w = ec->saved.h = 0;
- }
- else
- {
- int w, h, x, y;
- Eina_Bool horiz = EINA_FALSE, vert = EINA_FALSE;
-
- w = ec->client.w;
- h = ec->client.h;
- x = ec->client.x;
- y = ec->client.y;
-
- if (max & E_MAXIMIZE_VERTICAL)
- {
- /* Remove vertical */
- h = ec->saved.h;
- vert = EINA_TRUE;
- y = ec->saved.y + zone->y;
- if ((max & E_MAXIMIZE_VERTICAL) == E_MAXIMIZE_VERTICAL)
- {
- ec->maximized &= ~E_MAXIMIZE_VERTICAL;
- ec->maximized &= ~E_MAXIMIZE_LEFT;
- ec->maximized &= ~E_MAXIMIZE_RIGHT;
- }
- if ((max & E_MAXIMIZE_LEFT) == E_MAXIMIZE_LEFT)
- ec->maximized &= ~E_MAXIMIZE_LEFT;
- if ((max & E_MAXIMIZE_RIGHT) == E_MAXIMIZE_RIGHT)
- ec->maximized &= ~E_MAXIMIZE_RIGHT;
- }
- if (max & E_MAXIMIZE_HORIZONTAL)
- {
- /* Remove horizontal */
- w = ec->saved.w;
- x = ec->saved.x + zone->x;
- horiz = EINA_TRUE;
- ec->maximized &= ~E_MAXIMIZE_HORIZONTAL;
- }
-
- if (!(ec->maximized & E_MAXIMIZE_DIRECTION))
- {
- ec->maximized = E_MAXIMIZE_NONE;
- e_client_frame_update(ec);
- e_client_resize_limit(ec, &w, &h);
- e_client_pos_set(ec, x, y);
- if ((ec->saved.w != 0) && (ec->saved.h != 0))
- {
- if ((w != ec->saved.w) || (h != ec->saved.h))
- {
- e_policy_visibility_client_defer_move(ec);
- }
- }
- }
- else
- {
- e_client_resize_limit(ec, &w, &h);
- e_client_pos_set(ec, x, y);
- if ((ec->saved.w != 0) && (ec->saved.h != 0))
- {
- if ((w != ec->saved.w) || (h != ec->saved.h))
- {
- e_policy_visibility_client_defer_move(ec);
- }
- }
- }
- if (vert)
- ec->saved.h = ec->saved.y = 0;
- if (horiz)
- ec->saved.w = ec->saved.x = 0;
- }
- }
-}
-
-static void
-_zone_cb_client_activate_done(struct wl_listener *listener, void *data)
-{
- E_Zone_Private_Client *zone_client;
- E_Zone *zone;
- E_Client *ec;
- E_Desk *desk;
-
- zone_client = wl_container_of(listener, zone_client, client_activate_done);
- zone = zone_client->zone;
- ec = zone_client->ec;
-
- desk = e_zone_desk_find_by_ec(zone, ec);
- EINA_SAFETY_ON_NULL_RETURN(desk);
-
- if ((!ec->iconic) && (!ec->sticky))
- {
- e_desk_show(desk);
- }
-
- if (!ec->lock_user_stacking)
- e_client_raise(ec);
-
- if (!e_client_desk_iconify_skip_get(ec))
- {
- e_desk_visible_client_iconified_list_remove_all(desk);
- }
-}
-
-static void
-_zone_cb_client_fullscreen(struct wl_listener *listener, void *data)
-{
- E_Zone_Private_Client *zone_client;
- E_Zone *zone;
- E_Client *ec;
- E_Desk *desk;
- E_Fullscreen fullscreen_policy;
-
- zone_client = wl_container_of(listener, zone_client, client_fullscreen);
- zone = zone_client->zone;
- ec = zone_client->ec;
-
- fullscreen_policy = *((E_Fullscreen *)data);
-
- desk = e_zone_desk_find_by_ec(zone, ec);
- EINA_SAFETY_ON_NULL_RETURN(desk);
-
- if (!desk->visible) return;
-
- if (e_comp->nocomp_ec && (e_desk_has_ec(desk, e_comp->nocomp_ec)))
- e_comp->nocomp_ec = ec;
- desk->fullscreen_clients = eina_list_append(desk->fullscreen_clients, ec);
- ec->pre_res_change.valid = 0;
-
- if (!ec->maximized)
- {
- ec->saved.x = ec->client.x - zone->x;
- ec->saved.y = ec->client.y - zone->y;
- ec->saved.w = ec->client.w;
- ec->saved.h = ec->client.h;
- }
- ec->saved.maximized = ec->maximized;
- ec->saved.zone = zone->num;
-
- if ((eina_list_count(e_comp->zones) > 1) ||
- (fullscreen_policy == E_FULLSCREEN_RESIZE))
- {
- e_client_frame_geometry_set(ec, zone->x, zone->y, zone->w, zone->h);
- }
-
- if (!e_client_util_ignored_get(ec))
- e_client_frame_update(ec);
-
- evas_object_smart_callback_call(ec->frame, "fullscreen", NULL);
-}
-
-static void
-_zone_cb_client_unfullscreen(struct wl_listener *listener, void *data)
-{
- E_Zone_Private_Client *zone_client;
- E_Zone *zone;
- E_Client *ec;
- E_Desk *desk;
-
- zone_client = wl_container_of(listener, zone_client, client_unfullscreen);
- zone = zone_client->zone;
- ec = zone_client->ec;
-
- desk = e_zone_desk_find_by_ec(zone, ec);
- EINA_SAFETY_ON_NULL_RETURN(desk);
-
- ec->pre_res_change.valid = 0;
- desk->fullscreen_clients = eina_list_remove(desk->fullscreen_clients, ec);
-
- if (!e_client_util_ignored_get(ec))
- e_client_frame_update(ec);
-
- evas_object_smart_callback_call(ec->frame, "unfullscreen", NULL);
-
- if (ec->maximized)
- {
- int saved_x = ec->saved.x;
- int saved_y = ec->saved.y;
- int saved_w = ec->saved.w;
- int saved_h = ec->saved.h;
- e_client_maximize_update(ec);
- ec->saved.x = saved_x;
- ec->saved.y = saved_y;
- ec->saved.w = saved_w;
- ec->saved.h = saved_h;
- }
- else
- {
- e_client_util_move_resize_without_frame(ec, zone->x + ec->saved.x,
- zone->y + ec->saved.y,
- ec->saved.w, ec->saved.h);
- }
-
- if (!desk->fullscreen_clients)
- e_comp_render_queue();
-}
-#endif
-
static void
_e_zone_client_data_set(E_Zone *zone, E_Client *ec)
{
zone_client->client_focus_set.notify = _zone_cb_client_focus_set;
e_client_focus_set_listener_add(ec, &zone_client->client_focus_set);
-#ifdef REFACTOR_DESK_AREA
-#else
- zone_client->client_iconify.notify = _zone_cb_client_iconify;
- e_client_iconify_listener_add(ec, &zone_client->client_iconify);
-
- zone_client->client_uniconify.notify = _zone_cb_client_uniconify;
- e_client_uniconify_listener_add(ec, &zone_client->client_uniconify);
-
- zone_client->client_stick.notify = _zone_cb_client_stick;
- e_client_stick_listener_add(ec, &zone_client->client_stick);
-
- zone_client->client_unstick.notify = _zone_cb_client_unstick;
- e_client_unstick_listener_add(ec, &zone_client->client_unstick);
-
- zone_client->client_maximize.notify = _zone_cb_client_maximize;
- e_client_maximize_listener_add(ec, &zone_client->client_maximize);
-
- zone_client->client_unmaximize.notify = _zone_cb_client_unmaximize;
- e_client_unmaximize_listener_add(ec, &zone_client->client_unmaximize);
-
- zone_client->client_activate_done.notify = _zone_cb_client_activate_done;
- e_client_activate_done_listener_add(ec, &zone_client->client_activate_done);
-
- zone_client->client_fullscreen.notify = _zone_cb_client_fullscreen;
- e_client_fullscreen_listener_add(ec, &zone_client->client_fullscreen);
-
- zone_client->client_unfullscreen.notify = _zone_cb_client_unfullscreen;
- e_client_unfullscreen_listener_add(ec, &zone_client->client_unfullscreen);
-#endif
-
_e_zone_client_set(zone, ec);
_e_zone_client_data_set(zone, ec);
e_client_window_role_set(ec, "lockscreen");
-#ifdef REFACTOR_DESK_AREA
// set lockscreen layer
layer = e_client_layer_get(ec);
-#else
- // set lockscreen layer
- layer = e_client_desk_area_original_layer_get(ec);
-#endif
if (E_LAYER_CLIENT_NOTIFICATION_LOW > layer)
{
e_client_window_role_set(ec, "quickpanel_apps_menu");
}
-#ifdef REFACTOR_DESK_AREA
// set quickpanel layer
layer = e_client_layer_get(ec);
-#else
- // set quickpanel layer
- layer = e_client_desk_area_original_layer_get(ec);
-#endif
if (E_POLICY_QUICKPANEL_LAYER != layer)
e_client_layer_set(ec, E_POLICY_QUICKPANEL_LAYER);
ELOGF("SCRSAVER","Set Client", ec);
-#ifdef REFACTOR_DESK_AREA
// set screensaver layer
layer = e_client_layer_get(ec);
-#else
- // set screensaver layer
- layer = e_client_desk_area_original_layer_get(ec);
-#endif
if (E_POLICY_SCRSAVER_LAYER != layer)
{
e_client_hook_add(E_CLIENT_HOOK_DEL, _taskbar_hook_client_del, NULL);
E_LIST_HANDLER_APPEND(taskbar_service->events, E_EVENT_CLIENT_ZONE_SET, _taskbar_cb_client_zone_set, taskbar_service);
-#ifdef REFACTOR_DESK_AREA
// set taskbar layer
layer = e_client_layer_get(ec);
-#else
- // set taskbar layer
- layer = e_client_desk_area_original_layer_get(ec);
-#endif
if (E_POLICY_TASKBAR_LAYER != layer)
{
_volume_del_hook =
e_client_hook_add(E_CLIENT_HOOK_DEL, _volume_hook_client_del, NULL);
-#ifdef REFACTOR_DESK_AREA
// set volume layer
layer = e_client_layer_get(ec);
-#else
- // set volume layer
- layer = e_client_desk_area_original_layer_get(ec);
-#endif
if (E_POLICY_VOLUME_LAYER != layer)
{
{
Eina_Bool enable;
E_Desk_Area *desk_area;
-//#ifdef REFACTOR_DESK_AREA
-//#else
- E_Desk_Area_Client_Layer edgc_layer; // used by desk_area mode
- E_Layer layer_backup; // original layer (used by no desk_area mode)
-//#endif
E_Util_Transform *transform;
} desk_area;
E_API E_Map *e_client_map_get(const E_Client *ec); // get E_Map from e_client. it must be freed after used.
E_API E_Transient e_client_transient_policy_get(E_Client *ec);
-//#ifdef REFACTOR_DESK_AREA
-//#else
-E_API Eina_Bool e_client_desk_area_set(E_Client *ec, E_Desk_Area *eda);
-//#endif
-
E_API void e_client_size_set(E_Client *ec, int w, int h);
E_API void e_client_size_get(E_Client *ec, int *w, int *h);
Eina_Stringshare *name;
-//#ifdef REFACTOR_DESK_AREA
-//#else
- struct {
- Evas_Object *obj;
- Eina_Inlist *clients; /* E_Client, bottom to top */
- unsigned int clients_count;
- } layers[E_LAYER_COUNT];
-//#endif
struct
{
Evas_Object *rect;
E_API E_Zone *e_comp_zone_find_by_ec(E_Client *ec);
E_API E_Desk *e_comp_desk_find_by_ec(E_Client *ec);
-//#ifdef REFACTOR_DESK_AREA
E_API E_Desk_Area *e_comp_desk_area_find_by_ec(E_Client *ec);
-//#endif
#endif
unsigned char visible : 1;
unsigned int deskshow_toggle : 1;
-//#ifdef REFACTOR_DESK_AREA
-//#else
- Eina_List *fullscreen_clients;
-//#endif
EINA_DEPRECATED Evas_Object *bg_object;
Evas_Object *smart_obj;
E_API void e_desk_desk_area_del(E_Desk *desk, E_Desk_Area *eda);
E_API E_Desk_Area *e_desk_desk_area_base_get(E_Desk *desk);
-//#ifdef REFACTOR_DESK_AREA
-//#else
-E_API Eina_Bool e_desk_desk_area_enable(E_Desk *desk);
-E_API Eina_Bool e_desk_desk_area_disable(E_Desk *desk);
-//#endif
-
E_API E_Desk_Hook *e_desk_hook_add(E_Desk_Hook_Point hookpoint, E_Desk_Hook_Cb func, const void *data);
E_API void e_desk_hook_del(E_Desk_Hook *dh);
E_API void e_desk_visible_client_iconified_list_remove_all(E_Desk *desk);
E_API Eina_List * e_desk_visible_client_iconified_list_get(E_Desk *desk);
-//#ifdef REFACTOR_DESK_AREA
E_API E_Desk_Area *e_desk_desk_area_find_by_ec(E_Desk *desk, E_Client *ec);
-//#endif
extern E_API int E_EVENT_DESK_GEOMETRY_CHANGE;
extern E_API int E_EVENT_DESK_ZOOM_SET;
#include <e_comp_wl.h>
#define E_DESK_AREA_TYPE 0xE0b01006
-//#ifdef REFACTOR_DESK_AREA
#define E_DESK_AREA_SMART_OBJ_TYPE "E_Desk_Area_Smart_Object"
-//#endif
typedef struct _E_Desk_Area_Hook E_Desk_Area_Hook;
Eina_List *handlers;
-//#ifdef REFACTOR_DESK_AREA
struct {
Evas_Object *obj;
Eina_Inlist *clients; /* E_Client, bottom to top */
Evas_Object *smart_obj;
Eina_List *fullscreen_clients;
-//#endif
E_Comp_Wl_Hook *hook_subsurf_create;
};
E_API E_Desk_Area_Hook *e_desk_area_hook_add(E_Desk_Area_Hook_Point hookpoint, E_Desk_Area_Hook_Cb func, const void *data);
E_API void e_desk_area_hook_del(E_Desk_Area_Hook *dgh);
-//#ifdef REFACTOR_DESK_AREA
-//#else
-E_API void e_desk_area_ec_update(E_Desk_Area *eda, E_Client *ec);
-E_API void e_desk_area_all_ec_update(E_Desk_Area *eda);
-
-E_API Eina_List *e_desk_area_ec_list_get(E_Desk_Area *eda);
-
-E_API void e_desk_area_transform_enable_set(E_Desk_Area *eda, Eina_Bool enable);
-E_API Eina_Bool e_desk_area_transform_enable_get(E_Desk_Area *eda);
-
-E_API Eina_Bool e_desk_area_ec_reassign(E_Desk_Area *eda, E_Client *ec);
-
-extern E_API int E_EVENT_DESK_AREA_CHANGE;
-//#endif
-
#endif
#define SMARTERRNR() return
#define SMARTERR(x) return x
-// refactoring feature
-#define REFACTOR_DESK_AREA
-
typedef struct _E_Client E_Client; // type of e_client.h
typedef struct _E_Desk E_Desk; // type of e_desk.h
typedef struct _E_Zone E_Zone; // type of e_zone.h