The preprocessor statement using CONTAINER_POLICY is a temporary used to separate business logic from e_zone and e_desk.
As stabilization was completed, remove the preprocessing statements.
Change-Id: Ief5d4bd3526dad06b5d62efa4bcda04da490654b
#include "e_screensaver_intern.h"
#include "e_server_intern.h"
#include "e_display_intern.h"
-
-#ifdef CONTAINER_POLICY
#include "e_policy_zone_intern.h"
-#endif
#include <sys/xattr.h>
#include <sys/types.h>
E_Zone *zone = e_zone_current_get();
if (!zone) return;
-#ifdef CONTAINER_POLICY
E_Policy_Zone *policy_zone = e_comp_canvas_policy_zone_get(zone);
e_policy_zone_focus_reset(policy_zone);
-#else
- e_zone_focus_reset(zone);
-#endif
}
EINTERN Eina_Bool
EINA_LIST_FOREACH(e_comp->zones, zl, zone)
{
if (e_comp_visibility_calculation_get())
-#ifdef CONTAINER_POLICY
e_visibility_changed = e_policy_zone_visibility_calculate(zone);
-#else
- e_visibility_changed = e_zone_visibility_calculate(zone);
-#endif
if (check_focus ||
(e_client_focused_get() == NULL) ||
E_Zone *zone = e_zone_current_get();
if (!zone) return;
-#ifdef CONTAINER_POLICY
E_Policy_Zone *policy_zone = e_comp_canvas_policy_zone_get(zone);
e_policy_zone_focus_reset(policy_zone);
-#else
- e_zone_focus_reset(zone);
-#endif
}
EINTERN Eina_Bool
#include "e_utils_intern.h"
#include "e_view_intern.h"
#include "e_view_edje_intern.h"
-
-#ifdef CONTAINER_POLICY
#include "e_policy_zone_intern.h"
#include "e_policy_desk_intern.h"
-#endif
static Eina_List *handlers;
static Eina_Bool _ev_freeze = EINA_FALSE;
-#ifdef CONTAINER_POLICY
static Eina_List *g_policy_zones;
-#endif
static void
_e_comp_canvas_render_post(void *data EINA_UNUSED, Evas *e EINA_UNUSED, void *event_info EINA_UNUSED)
return ECORE_CALLBACK_PASS_ON;
}
-#ifdef CONTAINER_POLICY
static Eina_Bool
_e_comp_cb_zone_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{
return ECORE_CALLBACK_PASS_ON;
}
-#endif
////////////////////////////////////
E_Zone *zone;
E_Tizen_Screen *tizen_screen;
E_Comp *comp;
-#ifdef CONTAINER_POLICY
E_Policy_Zone *policy_zone;
e_policy_desk_init();
-#endif
TRACE_DS_BEGIN(COMP_CANVAS:INIT);
comp->w = w;
comp->h = h;
-#ifdef CONTAINER_POLICY
-#else
- if (e_config)
- {
-#endif
color[0] = e_config->comp_canvas_bg.r;
color[1] = e_config->comp_canvas_bg.g;
color[2] = e_config->comp_canvas_bg.b;
if (e_config->comp_canvas_bg.opmode == EVAS_RENDER_COPY)
opmode = E_VIEW_RENDER_COPY;
-#ifdef CONTAINER_POLICY
-#else
- }
-#endif
-
layer_tree = e_canvas_layer_view_tree_get(comp->canvas, E_CANVAS_LAYER_BOTTOM);
rect = e_view_rect_create(layer_tree, comp->w, comp->h, color);
comp->bg_blank_view = view = e_view_rect_view_get(rect);
EINA_LIST_FOREACH(screens, l, scr)
{
zone = e_zone_screen_new(scr->screen, scr->w, scr->h);
-#ifdef CONTAINER_POLICY
policy_zone = e_policy_zone_new(zone);
g_policy_zones = eina_list_append(g_policy_zones, policy_zone);
e_policy_zone_desk_count_set(policy_zone, e_config->zone_desks_x_count, e_config->zone_desks_y_count);
-#endif
+
tizen_screen = e_tizen_screen_create(zone);
if (scr->id) zone->output_id = strdup(scr->id);
printf("@@@ NEW ZONE = %p, %p\n", zone, tizen_screen);
else
{
zone = e_zone_screen_new(0, comp->w, comp->h);
-#ifdef CONTAINER_POLICY
policy_zone = e_policy_zone_new(zone);
g_policy_zones = eina_list_append(g_policy_zones, policy_zone);
e_policy_zone_desk_count_set(policy_zone, e_config->zone_desks_x_count, e_config->zone_desks_y_count);
-#endif
+
tizen_screen = e_tizen_screen_create(zone);
printf("@@@ NEW ZONE = %p, %p\n", zone, tizen_screen);
}
E_LIST_HANDLER_APPEND(handlers, E_EVENT_ZONE_MOVE_RESIZE, _e_comp_cb_zone_change, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_ZONE_ADD, _e_comp_cb_zone_change, NULL);
-#ifdef CONTAINER_POLICY
E_LIST_HANDLER_APPEND(handlers, E_EVENT_ZONE_DEL, _e_comp_cb_zone_del, NULL);
-#else
- E_LIST_HANDLER_APPEND(handlers, E_EVENT_ZONE_DEL, _e_comp_cb_zone_change, NULL);
-#endif
E_LIST_HANDLER_APPEND(handlers, E_EVENT_COMPOSITOR_ENABLE, _e_comp_cb_compositor_enabled, NULL);
ecore_evas_callback_pre_render_set(comp->ee, _e_comp_canvas_prerender);
E_Tizen_Screen *tizen_screen;
E_Screen *scr;
Eina_Bool changed = EINA_FALSE;
-#ifdef CONTAINER_POLICY
E_Policy_Zone *policy_zone;
-#endif
E_Comp *comp;
comp = e_comp_get();
else
{
zone = e_zone_screen_new(scr->screen, scr->w, scr->h);
-#ifdef CONTAINER_POLICY
policy_zone = e_policy_zone_new(zone);
g_policy_zones = eina_list_append(g_policy_zones, policy_zone);
e_policy_zone_desk_count_set(policy_zone, e_config->zone_desks_x_count, e_config->zone_desks_y_count);
-#endif
+
tizen_screen = e_tizen_screen_create(zone);
if (scr->id) zone->output_id = strdup(scr->id);
return e_output_norender_get(primary_output);
}
-#ifdef CONTAINER_POLICY
EINTERN E_Policy_Zone *
e_comp_canvas_policy_zone_get(E_Zone *zone)
{
return NULL;
}
-#endif
\ No newline at end of file
#include "e_intern.h"
#include "e_comp_canvas.h"
-#ifdef CONTAINER_POLICY
#include "e_policy_zone_intern.h"
-#endif
EINTERN Eina_Bool e_comp_canvas_init(int w, int h);
EINTERN void e_comp_canvas_clear(void);
EINTERN void e_comp_canvas_keys_ungrab(void);
EINTERN void e_comp_canvas_feed_mouse_up(unsigned int activate_time);
EINTERN int e_comp_canvas_norender_get(void);
-#ifdef CONTAINER_POLICY
EINTERN E_Policy_Zone * e_comp_canvas_policy_zone_get(E_Zone *zone);
-#endif
/* the following functions are used for adjusting root window coordinates
* to/from canvas coordinates.
E_Zone *zone = e_zone_current_get();
if (!zone) return;
-#ifdef CONTAINER_POLICY
E_Policy_Zone *policy_zone = e_comp_canvas_policy_zone_get(zone);
e_policy_zone_focus_reset(policy_zone);
-#else
- e_zone_focus_reset(zone);
-#endif
}
EINTERN void
#include "e_compositor_intern.h"
#include "e_view_intern.h"
#include "e_view_client_intern.h"
-
-#ifdef CONTAINER_POLICY
#include "e_policy_zone_intern.h"
#include "e_comp_canvas_intern.h"
-#endif
#define PRI(ec) ((E_Client_Private *)e_object_data_get(E_OBJECT(ec)))
if (!ec)
{
zone = e_comp_zone_find_by_ec(focused_ec);
-#ifdef CONTAINER_POLICY
E_Policy_Zone *policy_zone = e_comp_canvas_policy_zone_get(zone);
e_policy_zone_focus_clear(policy_zone);
-#else
- e_zone_focus_clear(zone);
-#endif
+
TRACE_DS_END();
return;
}
#include <libds-tizen/screen.h>
-#ifdef CONTAINER_POLICY
-#else
-#include "e_utils_intern.h"
-#include "e_comp_wl_subsurface_intern.h"
-#include "e_output_intern.h"
-#include "e_config_intern.h"
-#include "e_policy_wl_intern.h"
-#include "e_policy_intern.h"
-#include "e_display_intern.h"
-#endif
/* E_Desk is a child object of E_Zone. A desk is essentially a background
* and an associated set of client windows. Each zone can have an arbitrary
*/
typedef struct _E_Desk_Private E_Desk_Private;
-#ifdef CONTAINER_POLICY
-#else
-typedef struct _E_Desk_Private_Client E_Desk_Private_Client;
-#endif
-
-#ifdef CONTAINER_POLICY
-#else
-typedef struct _E_Desk_Smart_Data E_Desk_Smart_Data;
-#endif
#define DESK_EC_DATA_KEY "E_Desk_Client"
E_Desk_Private *priv = PRI(desk); \
EINA_SAFETY_ON_NULL_RETURN(priv);
-#ifdef CONTAINER_POLICY
-#else
-
-#define E_DESK_SMART_DATA_GET(obj, ptr) \
- E_Desk_Smart_Data *ptr = evas_object_smart_data_get(obj);
-
-#define API_ENTRY_VAL(ret) \
- EINA_SAFETY_ON_NULL_RETURN_VAL(desk, ret); \
- E_Desk_Private *priv = PRI(desk); \
- EINA_SAFETY_ON_NULL_RETURN_VAL(priv, ret);
-
-#define E_DESK_SMART_DATA_GET_OR_RETURN(obj, ptr) \
- E_DESK_SMART_DATA_GET(obj, ptr); \
- if (!ptr) return
-#endif
-
-#ifdef CONTAINER_POLICY
-#else
-typedef enum _E_Desk_Zoom_Animating_Type
-{
- E_DESK_ZOOM_ANIMATING_TYPE_NONE,
- E_DESK_ZOOM_ANIMATING_TYPE_ENABLE,
- E_DESK_ZOOM_ANIMATING_TYPE_DISABLE,
-} E_Desk_Zoom_Animating_Type;
-#endif
-
struct _E_Desk_Private
{
E_Desk *desk;
struct
{
struct wl_signal client_add;
-#ifdef CONTAINER_POLICY
struct wl_signal client_del;
-#endif
struct wl_signal desk_area_enable;
struct wl_signal desk_area_disable;
struct wl_signal desk_area_active_change;
-#ifdef CONTAINER_POLICY
struct wl_signal desk_new;
struct wl_signal desk_free;
struct wl_signal top_visible_get;
struct wl_signal visible_client_restore_all;
struct wl_signal client_iconified_list_remove;
struct wl_signal client_iconified_list_remove_all;
-#endif
} events;
};
-
-#ifdef CONTAINER_POLICY
-#else
-struct _E_Desk_Private_Client
-{
- E_Desk *desk;
- E_Client *ec;
- Eina_Bool skip_zoom;
-
- // client listeners
- struct wl_listener client_destroy;
- struct wl_listener client_activate_done;
-};
-
-struct _E_Desk_Smart_Data
-{
- Evas_Object_Smart_Clipped_Data base;
- Eina_List *clients;
- Eina_List *handlers;
-
- struct
- {
- double ratio_x, ratio_y;
- int cord_x, cord_y;
- double prev_ratio_x, prev_ratio_y;
- int prev_cord_x, prev_cord_y;
- Eina_Bool enabled;
- Ecore_Animator *animator;
- E_Desk_Zoom_Animating_Type animating_type;
- } zoom;
-};
-#endif
-
-#ifdef CONTAINER_POLICY
-#else
-static int _e_desk_hooks_delete = 0;
-static int _e_desk_hooks_walking = 0;
-
-static Eina_Inlist *_e_desk_hooks[] =
-{
- [E_DESK_HOOK_CLIENT_ADD] = NULL,
- [E_DESK_HOOK_DESK_AREA_ENABLE] = NULL,
- [E_DESK_HOOK_DESK_AREA_DISABLE] = NULL,
- [E_DESK_HOOK_DESK_AREA_ACTIVE_CHANGE] = NULL,
- [E_DESK_HOOK_SPLIT_DESK_ACTIVATE] = NULL,
- [E_DESK_HOOK_SPLIT_DESK_DEACTIVATE] = NULL,
-};
-#endif
-
static void _e_desk_free(E_Desk *desk);
-#ifdef CONTAINER_POLICY
-#else
-static void _e_desk_event_desk_show_free(void *data, void *ev);
-static void _e_desk_event_desk_before_show_free(void *data, void *ev);
-static void _e_desk_event_desk_after_show_free(void *data, void *ev);
-static void _e_desk_show_begin(E_Desk *desk, int dx, int dy);
-static void _e_desk_hide_begin(E_Desk *desk, int dx, int dy);
-static void _e_desk_event_desk_geometry_change_free(void *data, void *ev);
-static void _e_desk_smart_init(E_Desk *desk);
-static void _e_desk_smart_add(Evas_Object *obj);
-static void _e_desk_smart_del(Evas_Object *obj);
-static void _e_desk_smart_client_add(Evas_Object *obj, E_Client *ec);
-static void _e_desk_smart_client_del(Evas_Object *obj, E_Client *ec);
-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);
-
-static void _e_desk_hooks_clean(void);
-static Eina_Bool _e_desk_hook_call(E_Desk_Hook_Point hookpoint, E_Desk *desk);
-#endif
-
-#ifdef CONTAINER_POLICY
-#else
-EVAS_SMART_SUBCLASS_NEW(E_DESK_SMART_OBJ_TYPE, _e_desk,
- Evas_Smart_Class, Evas_Smart_Class,
- evas_object_smart_clipped_class_get, NULL)
-#endif
EINTERN int E_EVENT_DESK_SHOW = 0;
EINTERN int E_EVENT_DESK_BEFORE_SHOW = 0;
wl_signal_init(&priv->events.desk_area_enable);
wl_signal_init(&priv->events.desk_area_disable);
wl_signal_init(&priv->events.desk_area_active_change);
-#ifdef CONTAINER_POLICY
wl_signal_init(&priv->events.desk_new);
wl_signal_init(&priv->events.desk_free);
wl_signal_init(&priv->events.top_visible_get);
wl_signal_init(&priv->events.visible_client_restore_all);
wl_signal_init(&priv->events.client_iconified_list_remove);
wl_signal_init(&priv->events.client_iconified_list_remove_all);
-#endif
e_object_data_set(E_OBJECT(desk), priv);
free(priv);
}
-#ifdef CONTAINER_POLICY
-#else
-static void
-_e_desk_event_simple_free(void *d EINA_UNUSED, E_Event_Desk *event)
-{
- E_Event_Desk *ev;
-
- ev = event;
- e_object_unref(E_OBJECT(ev->desk));
- free(ev);
-}
-
-static void
-_e_desk_event_simple_add(E_Desk *desk, int type)
-{
- E_Event_Desk *ev;
-
- ev = E_NEW(E_Event_Desk, 1);
- if (!ev) return;
- ev->desk = desk;
- e_object_ref(E_OBJECT(desk));
-
- ecore_event_add(type, ev, (Ecore_End_Cb)_e_desk_event_simple_free, NULL);
-}
-#endif
-
EINTERN int
e_desk_init(void)
{
e_desk_new(E_Zone *zone, int x, int y)
{
E_Desk *desk;
-#ifdef CONTAINER_POLICY
-#else
- Eina_List *l;
- E_Config_Desktop_Name *cfname;
- char name[40];
- int ok = 0;
-#endif
static int desk_id = 0;
E_OBJECT_CHECK_RETURN(zone, NULL);
desk->y = y;
desk->id = desk_id++;
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(desk)->events.desk_new, desk);
-#else
- /* init smart object */
- _e_desk_smart_init(desk);
-
- /* Get current desktop's name */
- EINA_LIST_FOREACH(e_config->desktop_names, l, cfname)
- {
- if ((cfname->zone >= 0) &&
- ((int)zone->num != cfname->zone)) continue;
- if ((cfname->desk_x != desk->x) || (cfname->desk_y != desk->y))
- continue;
- desk->name = eina_stringshare_ref(cfname->name);
- ok = 1;
- break;
- }
-
- if (!ok)
- {
- snprintf(name, sizeof(name), _(e_config->desktop_default_name), x, y);
- desk->name = eina_stringshare_add(name);
- }
-
- // new 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)
- {
- e_object_del(E_OBJECT(desk));
- return NULL;
- }
-#endif
return desk;
}
EINTERN E_Client *
e_desk_client_top_visible_get(E_Desk *desk)
{
-#ifdef CONTAINER_POLICY
E_Desk_Data_Top_Visible_Get top_visible_data = {0,};
top_visible_data.desk = desk;
-#else
- E_Client *ec;
-#endif
E_OBJECT_CHECK_RETURN(desk, NULL);
E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, NULL);
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(desk)->events.top_visible_get, &top_visible_data);
return top_visible_data.visible_ec;
-#else
- E_CLIENT_REVERSE_FOREACH(ec)
- if (e_desk_has_ec(desk, ec) && e_view_client_visible_get(e_client_view_get(ec))) return ec;
- return NULL;
-#endif
}
EINTERN void
eina_stringshare_replace(&desk->name, name);
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(desk)->events.name_set, NULL);
-#else
- _e_desk_event_simple_add(desk, E_EVENT_DESK_NAME_CHANGE);
-#endif
}
EINTERN void
e_desk_name_add(int zone, int desk_x, int desk_y, const char *name)
{
-#ifdef CONTAINER_POLICY
E_Desk_Data_Name name_data = {0,};
E_Zone *zone_ptr;
E_Desk *desk;
}
wl_signal_emit(&PRI(desk)->events.name_add, &name_data);
-#else
- E_Config_Desktop_Name *cfname;
-
- e_desk_name_del(zone, desk_x, desk_y);
-
- cfname = E_NEW(E_Config_Desktop_Name, 1);
- if (!cfname) return;
- cfname->zone = zone;
- cfname->desk_x = desk_x;
- cfname->desk_y = desk_y;
- if (name) cfname->name = eina_stringshare_add(name);
- else cfname->name = NULL;
- e_config->desktop_names = eina_list_append(e_config->desktop_names, cfname);
-#endif
}
EINTERN void
e_desk_name_del(int zone, int desk_x, int desk_y)
{
-#ifdef CONTAINER_POLICY
E_Desk_Data_Name name_data = {0,};
E_Zone *zone_ptr;
E_Desk *desk;
}
wl_signal_emit(&PRI(desk)->events.name_del, &name_data);
-#else
- Eina_List *l = NULL;
- E_Config_Desktop_Name *cfname = NULL;
-
- EINA_LIST_FOREACH(e_config->desktop_names, l, cfname)
- {
- if ((cfname->zone == zone) &&
- (cfname->desk_x == desk_x) && (cfname->desk_y == desk_y))
- {
- e_config->desktop_names =
- eina_list_remove_list(e_config->desktop_names, l);
- if (cfname->name) eina_stringshare_del(cfname->name);
- E_FREE(cfname);
- break;
- }
- }
-#endif
}
EINTERN void
e_desk_name_update(void)
{
-#ifdef CONTAINER_POLICY
E_Desk *desk = e_desk_current_get(e_zone_current_get());
if (!desk) return;
wl_signal_emit(&PRI(desk)->events.name_update, NULL);
-#else
- const Eina_List *z, *l;
- E_Zone *zone;
- E_Desk *desk;
- E_Config_Desktop_Name *cfname;
- int d_x, d_y, ok;
- char name[40];
- Eina_List *comp_zone_list = e_comp_zone_list_get();
-
- EINA_LIST_FOREACH(comp_zone_list, z, zone)
- {
- for (d_x = 0; d_x < zone->desk_x_count; d_x++)
- {
- for (d_y = 0; d_y < zone->desk_y_count; d_y++)
- {
- desk = zone->desks[d_x + zone->desk_x_count * d_y];
- ok = 0;
-
- EINA_LIST_FOREACH(e_config->desktop_names, l, cfname)
- {
- if ((cfname->zone >= 0) &&
- ((int)zone->num != cfname->zone)) continue;
- if ((cfname->desk_x != d_x) ||
- (cfname->desk_y != d_y)) continue;
- e_desk_name_set(desk, cfname->name);
- ok = 1;
- break;
- }
-
- if (!ok)
- {
- snprintf(name, sizeof(name),
- _(e_config->desktop_default_name),
- d_x, d_y);
- e_desk_name_set(desk, name);
- }
- }
- }
- }
-#endif
}
EINTERN void
e_desk_show(E_Desk *desk)
{
-#ifdef CONTAINER_POLICY
-#else
- E_Event_Desk_Show *ev = NULL;
- E_Event_Desk_Before_Show *eev = NULL;
- E_Event_Desk_After_Show *eeev = NULL;
- Edje_Message_Float_Set *msg = NULL;
- E_Desk *desk2 = NULL;
- int dx = 0, dy = 0;
- Ecore_Event *eev_ecore_event = NULL;
- Ecore_Event *ev_ecore_event = NULL;
-#endif
-
E_OBJECT_CHECK(desk);
E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
if (desk->visible) return;
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(desk)->events.desk_show, NULL);
-#else
- desk2 = e_desk_at_xy_get(desk->zone, desk->zone->desk_x_current, desk->zone->desk_y_current);
- if ((!starting) && (!desk2->visible)) return;
- eev = E_NEW(E_Event_Desk_Before_Show, 1);
- if (!eev) return;
- eev->desk = e_desk_current_get(desk->zone);
- e_object_ref(E_OBJECT(eev->desk));
- eev_ecore_event = ecore_event_add(E_EVENT_DESK_BEFORE_SHOW, eev,
- _e_desk_event_desk_before_show_free, NULL);
-
- if (desk2->visible)
- {
- desk2->visible = 0;
- if ((!dx) && (!dy))
- {
- dx = desk->x - desk2->x;
- dy = desk->y - desk2->y;
- }
- _e_desk_hide_begin(desk2, dx, dy);
- if (desk2->smart_obj)
- evas_object_hide(desk2->smart_obj);
- }
-
- desk->zone->desk_x_prev = desk->zone->desk_x_current;
- desk->zone->desk_y_prev = desk->zone->desk_y_current;
- desk->zone->desk_x_current = desk->x;
- desk->zone->desk_y_current = desk->y;
- desk->visible = 1;
-
- msg = alloca(sizeof(Edje_Message_Float_Set) + (4 * sizeof(double)));
- msg->count = 5;
- msg->val[0] = 0.0;
- msg->val[1] = desk->x;
- msg->val[2] = desk->zone->desk_x_count;
- msg->val[3] = desk->y;
- msg->val[4] = desk->zone->desk_y_count;
-
- _e_desk_show_begin(desk, dx, dy);
- if (desk->smart_obj)
- evas_object_show(desk->smart_obj);
-
- ev = E_NEW(E_Event_Desk_Show, 1);
- if (!ev) goto error;
- ev->desk = desk;
- e_object_ref(E_OBJECT(desk));
- ev_ecore_event = ecore_event_add(E_EVENT_DESK_SHOW, ev, _e_desk_event_desk_show_free, NULL);
-
- eeev = E_NEW(E_Event_Desk_After_Show, 1);
- if (!eeev) goto error;
- eeev->desk = e_desk_current_get(desk->zone);
- e_object_ref(E_OBJECT(eeev->desk));
- ecore_event_add(E_EVENT_DESK_AFTER_SHOW, eeev,
- _e_desk_event_desk_after_show_free, NULL);
-
- return;
-
-error:
- if (ev)
- {
- if (ev_ecore_event)
- ecore_event_del(ev_ecore_event);
- e_object_unref(E_OBJECT(ev->desk));
- free(ev);
- }
- if (eev)
- {
- if (eev_ecore_event)
- ecore_event_del(eev_ecore_event);
- e_object_unref(E_OBJECT(eev->desk));
- free(eev);
- }
-#endif
}
EINTERN void
desk = e_desk_current_get(zone);
EINA_SAFETY_ON_NULL_RETURN(desk);
-#ifdef CONTAINER_POLICY
// TODO: Should we move it to zone?
wl_signal_emit(&PRI(desk)->events.desk_show, NULL);
-#else
- if (desk->deskshow_toggle)
- {
- /* uniconify raises windows and changes stacking order
- * go top-down to avoid skipping windows
- */
- E_CLIENT_REVERSE_FOREACH(ec)
- {
- if (e_client_util_ignored_get(ec)) continue;
- if (!e_desk_has_ec(desk, ec)) continue;
- if (ec->deskshow)
- {
- ec->deskshow = 0;
- e_client_uniconify(ec);
- }
- }
- }
- else
- {
- /*
- * iconify raises, so we have to start from the bottom so we are going forward
- */
- E_CLIENT_FOREACH(ec)
- {
- if (e_client_util_ignored_get(ec)) continue;
- if (!e_desk_has_ec(desk, ec)) continue;
- if (ec->iconic) continue;
- if (ec->netwm.state.skip_taskbar) continue;
- if (ec->user_skip_winlist) continue;
- ec->deskshow = 1;
- e_client_iconify(ec);
- }
- }
- desk->deskshow_toggle = !desk->deskshow_toggle;
-
- _e_desk_event_simple_add(desk, E_EVENT_DESK_DESKSHOW);
-#endif
-}
-
-#ifdef CONTAINER_POLICY
-#else
-EINTERN void
-e_desk_row_add(E_Zone *zone)
-{
- e_zone_desk_count_set(zone, zone->desk_x_count, zone->desk_y_count + 1);
-}
-
-EINTERN void
-e_desk_row_remove(E_Zone *zone)
-{
- e_zone_desk_count_set(zone, zone->desk_x_count, zone->desk_y_count - 1);
-}
-
-EINTERN void
-e_desk_col_add(E_Zone *zone)
-{
- e_zone_desk_count_set(zone, zone->desk_x_count + 1, zone->desk_y_count);
-}
-
-EINTERN void
-e_desk_col_remove(E_Zone *zone)
-{
- e_zone_desk_count_set(zone, zone->desk_x_count - 1, zone->desk_y_count);
-}
-
-E_API E_Desk *
-e_desk_current_get(E_Zone *zone)
-{
- E_OBJECT_CHECK_RETURN(zone, NULL);
- E_OBJECT_TYPE_CHECK_RETURN(zone, E_ZONE_TYPE, NULL);
-
- E_Desk *desk = e_desk_at_xy_get(zone, zone->desk_x_current, zone->desk_y_current);
- return desk;
-}
-
-EINTERN E_Desk *
-e_desk_at_xy_get(E_Zone *zone, int x, int y)
-{
- E_OBJECT_CHECK_RETURN(zone, NULL);
- E_OBJECT_TYPE_CHECK_RETURN(zone, E_ZONE_TYPE, NULL);
-
- if ((x >= zone->desk_x_count) || (y >= zone->desk_y_count))
- return NULL;
- else if ((x < 0) || (y < 0))
- return NULL;
-
- if (!zone->desks) return NULL;
- return zone->desks[x + (y * zone->desk_x_count)];
-}
-
-EINTERN E_Desk *
-e_desk_at_pos_get(E_Zone *zone, int pos)
-{
- E_OBJECT_CHECK_RETURN(zone, NULL);
- E_OBJECT_TYPE_CHECK_RETURN(zone, E_ZONE_TYPE, NULL);
-
- int x, y;
-
- y = pos / zone->desk_x_count;
- x = pos - (y * zone->desk_x_count);
-
- if ((x >= zone->desk_x_count) || (y >= zone->desk_y_count))
- return NULL;
-
- return zone->desks[x + (y * zone->desk_x_count)];
}
-#endif
EINTERN void
e_desk_xy_get(E_Desk *desk, int *x, int *y)
if (y) *y = desk->y;
}
-#ifdef CONTAINER_POLICY
-#else
-EINTERN void
-e_desk_next(E_Zone *zone)
-{
- int x, y;
-
- E_OBJECT_CHECK(zone);
- E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE);
-
- // FIXME: desk not available
-
- if ((zone->desk_x_count < 2) && (zone->desk_y_count < 2))
- return;
-
- x = zone->desk_x_current;
- y = zone->desk_y_current;
-
- x++;
- if (x >= zone->desk_x_count)
- {
- x = 0;
- y++;
- if (y >= zone->desk_y_count) y = 0;
- }
-
- e_desk_show(e_desk_at_xy_get(zone, x, y));
-}
-
-EINTERN void
-e_desk_prev(E_Zone *zone)
-{
- int x, y;
-
- E_OBJECT_CHECK(zone);
- E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE);
-
- // FIXME: desk not available
-
- if ((zone->desk_x_count < 2) && (zone->desk_y_count < 2))
- return;
-
- x = zone->desk_x_current;
- y = zone->desk_y_current;
-
- x--;
- if (x < 0)
- {
- x = zone->desk_x_count - 1;
- y--;
- if (y < 0) y = zone->desk_y_count - 1;
- }
- e_desk_show(e_desk_at_xy_get(zone, x, y));
-}
-
-EINTERN unsigned int
-e_desks_count(void)
-{
- Eina_List *l, *comp_zone_list;
- E_Zone *zone;
- unsigned int count = 0;
-
- comp_zone_list = e_comp_zone_list_get();
- EINA_LIST_FOREACH(comp_zone_list, l, zone)
- {
- int cx = 0, cy = 0;
-
- e_zone_desk_count_get(zone, &cx, &cy);
- count += cx * cy;
- }
- return count;
-}
-#endif
-
-#ifdef CONTAINER_POLICY
-#else
-static void
-_e_desk_client_data_del(E_Desk *desk, E_Client *ec)
-{
- e_view_data_del(e_view_client_view_get(e_client_view_get(ec)), DESK_EC_DATA_KEY);
-}
-
-static void
-_e_desk_client_data_set(E_Desk *desk, E_Client *ec)
-{
- E_Desk *data;
-
- data = e_view_data_get(e_view_client_view_get(e_client_view_get(ec)), DESK_EC_DATA_KEY);
- if (data)
- {
- if (data == desk)
- {
- ELOGF("E_DESK", "EC is already added to desk_id:%d", ec, desk->id);
- return;
- }
-
- _e_desk_client_data_del(desk, ec);
- }
-
- e_view_data_set(e_view_client_view_get(e_client_view_get(ec)), DESK_EC_DATA_KEY, desk);
-}
-
-static void
-_e_desk_client_set(E_Desk *desk, E_Client *ec)
-{
- ec->desk = desk; // FIXME: This line must be deleted.
-
- if (!ec->new_client)
- {
- if (e_client_view_get(ec))
- {
- e_view_client_effect_unclip(e_client_view_get(ec));
- e_view_client_effect_set(e_client_view_get(ec), NULL);
- }
- if (desk->visible || ec->sticky)
- {
- if ((!ec->hidden) && (!ec->iconic))
- e_view_client_show(e_client_view_get(ec));
- }
- else
- {
- ec->hidden = 1;
- e_view_client_hide(e_client_view_get(ec));
- }
- }
-
- e_client_comp_hidden_set(ec, (!desk->visible) && (!ec->sticky));
-
- if (e_config->transient.desktop)
- {
- E_Client *child;
- const Eina_List *l;
-
- EINA_LIST_FOREACH(ec->transients, l, child)
- e_desk_client_add(desk, child);
- }
-}
-
-static void
-_e_desk_private_client_del(E_Desk_Private_Client *desk_client)
-{
- E_Desk *desk = desk_client->desk;
- E_Client *ec = desk_client->ec;
-
- _e_desk_smart_client_del(desk->smart_obj, ec);
- _e_desk_client_data_del(desk, ec);
-
- wl_list_remove(&desk_client->client_activate_done.link);
- wl_list_remove(&desk_client->client_destroy.link);
-
- E_FREE(desk_client);
-}
-
-static void
-_desk_cb_client_destroy(struct wl_listener *listener, void *data)
-{
- E_Desk_Private_Client *desk_client;
- E_Desk *desk;
- E_Client *ec;
-
- desk_client = wl_container_of(listener, desk_client, client_destroy);
- desk = desk_client->desk;
- ec = desk_client->ec;
-
- ELOGF("DESK", "CLIENT DESTROY. desk:%p", ec, desk);
-
- _e_desk_private_client_del(desk_client);
-}
-
-static void
-_desk_cb_client_activate_done(struct wl_listener *listener, void *data)
-{
- E_Desk_Private_Client *desk_client;
- E_Desk *desk;
- E_Client *ec;
-
- desk_client = wl_container_of(listener, desk_client, client_activate_done);
- desk = desk_client->desk;
- ec = desk_client->ec;
-
- ELOGF("DESK", "CLIENT ACTIVATE DONE. desk:%p", ec, desk);
-
- if ((!ec->iconic) && (!ec->sticky))
- {
- e_desk_show(desk);
- }
-
- if (!e_client_desk_iconify_skip_get(ec))
- {
- e_desk_visible_client_iconified_list_remove_all(desk);
- }
-}
-#endif
-
EINTERN void
e_desk_client_add(E_Desk *desk, E_Client *ec)
{
-#ifdef CONTAINER_POLICY
-#else
- E_Desk_Area *eda;
- E_Desk_Private_Client *desk_client;
-#endif
-
E_OBJECT_CHECK(desk);
E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
if (e_desk_has_ec(desk, ec)) return;
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(desk)->events.client_add, ec);
-#else
- ELOGF("DESK", "CLIENT ADD. desk:%p", ec, desk);
-
- desk_client = E_NEW(E_Desk_Private_Client, 1);
- EINA_SAFETY_ON_NULL_RETURN(desk_client);
-
- desk_client->desk = desk;
- desk_client->ec = ec;
-
- // e_client listeners
- desk_client->client_destroy.notify = _desk_cb_client_destroy;
- 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);
-
- _e_desk_client_set(desk, ec);
- _e_desk_client_data_set(desk, ec);
-
- eda = e_desk_desk_area_base_get(desk);
- e_desk_area_ec_add(eda, ec);
-
- _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 CONTAINER_POLICY
-#else
-static E_Desk_Private_Client *
-_e_desk_private_client_get(E_Client *ec)
-{
- E_Desk_Private_Client *desk_client;
- struct wl_listener *listener;
-
- listener = e_client_destroy_listener_get(ec, _desk_cb_client_destroy);
- if (!listener) return NULL;
-
- return wl_container_of(listener, desk_client, client_destroy);
}
-#endif
E_API void
e_desk_client_del(E_Desk *desk, E_Client *ec)
{
-#ifdef CONTAINER_POLICY
-#else
- E_Desk_Private_Client *desk_client;
- E_Desk_Area *eda;
-#endif
-
E_OBJECT_CHECK(desk);
E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
if (!e_desk_has_ec(desk, ec)) return;
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(desk)->events.client_del, ec);
-#else
-
- ELOGF("DESK", "CLIENT REMOVE. desk:%p", ec, desk);
-
- desk_client = _e_desk_private_client_get(ec);
- EINA_SAFETY_ON_NULL_RETURN(desk_client);
-
- eda = e_desk_desk_area_find_by_ec(desk, ec);
- EINA_SAFETY_ON_NULL_RETURN(eda);
-
- e_desk_area_ec_remove(eda, ec);
-
- _e_desk_private_client_del(desk_client);
-#endif
}
E_API void
e_desk_geometry_set(E_Desk *desk, int x, int y, int w, int h)
{
-#ifdef CONTAINER_POLICY
E_Desk_Data_Geometry geom_data = {0,};
-#else
- E_Client *ec;
- E_Maximize max;
- Eina_List *l = NULL, *ll = NULL;
- Evas_Object *m;
- E_Event_Desk_Geometry_Change *ev = NULL;
-
- int cx, cy, dx, dy;
-#endif
E_OBJECT_CHECK(desk);
E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
-#ifdef CONTAINER_POLICY
-#else
- E_DESK_SMART_DATA_GET_OR_RETURN(desk->smart_obj, sd);
-#endif
-
if ((desk->geom.x == x) && (desk->geom.y == y) &&
(desk->geom.w == w) && (desk->geom.h == h))
return;
-#ifdef CONTAINER_POLICY
EINA_RECTANGLE_SET(&desk->geom, x, y, w, h);
geom_data.x = x;
geom_data.w = w;
geom_data.h = h;
wl_signal_emit(&PRI(desk)->events.geometry_set, &geom_data);
-#else
- dx = x - desk->geom.x;
- dy = y - desk->geom.y;
- EINA_RECTANGLE_SET(&desk->geom, x, y, w, h);
-
- EINA_LIST_FOREACH(sd->clients, l, ec)
- {
- if (e_object_is_del(E_OBJECT(ec))) continue;
-
- /* even if the desktop geometry is chagned, the system partial windows such as virtual
- * keyboard and clipboard should be placed at the bottom of the desktop. */
- /* QUICK FIX */
- if (e_policy_client_is_keyboard(ec))
- {
- continue;
- }
- else if (e_comp_wl_subsurface_check(ec))
- {
- continue;
- }
- else if (ec->maximized)
- {
- max = ec->maximized;
- ec->maximized = E_MAXIMIZE_NONE;
- e_client_maximize(ec, max);
- }
- else
- {
- e_client_geometry_get(ec, &cx, &cy, NULL, NULL);
- e_client_util_move_without_frame(ec, cx + dx, cy + dy);
- }
- }
-
- // E Client as an member of smart object is not changed even though parent obj is changed
- // Workaround : update max geometry if ec is a member of desk->smart_obj
- EINA_LIST_FOREACH(evas_object_smart_members_get(desk->smart_obj), ll, m)
- {
- ec = evas_object_data_get(m, "E_Client");
- if (ec && ec->maximized)
- {
- if (e_object_is_del(E_OBJECT(ec))) continue;
- max = ec->maximized;
- ec->maximized = E_MAXIMIZE_NONE;
- e_client_maximize(ec, max);
- }
- }
-
- // apply geometry on smart obj
- evas_object_geometry_set(desk->smart_obj, x, y, w, h);
-
- ev = E_NEW(E_Event_Desk_Geometry_Change, 1);
- if (ev)
- {
- ev->desk = desk;
- ev->x = x;
- ev->y = y;
- ev->w = w;
- ev->h = h;
- e_object_ref(E_OBJECT(desk));
- ecore_event_add(E_EVENT_DESK_GEOMETRY_CHANGE, ev,
- _e_desk_event_desk_geometry_change_free, NULL);
- }
-
- e_comp_render_queue();
-#endif
}
if (h) *h = desk->geom.h;
}
-#ifdef CONTAINER_POLICY
-#else
-static Eina_Bool
-_e_desk_zoom_animate_cb(void *data, double pos)
-{
- E_Desk *desk;
- E_Client *ec;
- Eina_List *l;
- int cx, cy;
- double zoomx, zoomy;
- double progress;
- double diff_x, diff_y;
- double cBez[4] = {0.3, 0.0, 0.15, 1.0};
-
- desk = (E_Desk*)data;
- if (!desk) return ECORE_CALLBACK_CANCEL;
-
- E_DESK_SMART_DATA_GET_OR_RETURN(desk->smart_obj, sd) ECORE_CALLBACK_CANCEL;
-
- progress = ecore_animator_pos_map_n(pos, ECORE_POS_MAP_CUBIC_BEZIER, 4, cBez);
-
- diff_x = sd->zoom.prev_ratio_x - sd->zoom.ratio_x;
- diff_y = sd->zoom.prev_ratio_y - sd->zoom.ratio_y;
-
- zoomx = sd->zoom.ratio_x + (diff_x * (1-progress));
- zoomy = sd->zoom.ratio_y + (diff_y * (1-progress));
- cx = sd->zoom.cord_x;
- cy = sd->zoom.cord_y;
-
- EINA_LIST_FOREACH(sd->clients, l, ec)
- {
- if ((e_client_visibility_get(ec) == E_VISIBILITY_UNOBSCURED) ||
- (e_comp_wl_subsurface_check(ec)))
- _e_desk_client_zoom(ec, zoomx, zoomy, cx, cy);
- }
-
- if (pos >= 1.0)
- {
- EINA_LIST_FOREACH(sd->clients, l, ec)
- {
- _e_desk_client_zoom(ec, zoomx, zoomy, cx, cy);
- }
-
- if ((sd->zoom.ratio_x != 1.0) ||
- (sd->zoom.ratio_y != 1.0))
- {
- // Zoom enable done
- sd->zoom.enabled = EINA_TRUE;
- }
-
- sd->zoom.animating_type = E_DESK_ZOOM_ANIMATING_TYPE_NONE;
- sd->zoom.animator = NULL;
- }
-
- return ECORE_CALLBACK_PASS_ON;
-}
-#endif
-
E_API void
e_desk_zoom_set(E_Desk *desk, double zoomx, double zoomy, int cx, int cy)
{
-#ifdef CONTAINER_POLICY
E_Desk_Data_Zoom zoom_data = {0,};
-#else
- E_Client *ec;
- Eina_List *l;
- E_Zone *zone = NULL;
- E_Output *eout = NULL;
-#endif
E_OBJECT_CHECK(desk);
E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
-#ifdef CONTAINER_POLICY
zoom_data.zoomx = zoomx;
zoom_data.zoomy = zoomy;
zoom_data.cx = cx;
zoom_data.cy = cy;
wl_signal_emit(&PRI(desk)->events.zoom_set, &zoom_data);
-#else
- ELOGF("DESK", "ZOOM SET. desk:%p, zoom ratio(%f,%f) cpos(%d,%d)", NULL, desk, zoomx, zoomy, cx, cy);
-
- if (e_config->use_pp_zoom)
- {
- if (e_display_pp_support())
- {
- zone = desk->zone;
- eout = e_output_find(zone->output_id);
- if (!eout)
- {
- ERR("e_desk_zoom_set: fail get eout");
- goto end;
- }
- if (!e_output_zoom_set(eout, zoomx, zoomy, cx, cy))
- ERR("e_desk_zoom_set: fail zoom set");
- else
- DBG("e_desk_zoom_set: zoomx:%f, zoomy:%f, x:%d, y:%d", zoomx, zoomy, cx, cy);
-
- goto end;
- }
- }
-
- E_DESK_SMART_DATA_GET_OR_RETURN(desk->smart_obj, sd);
-
- if ((sd->zoom.ratio_x != zoomx) || (sd->zoom.ratio_y != zoomy) ||
- (sd->zoom.cord_x != cx) || (sd->zoom.cord_y != cy))
- {
- sd->zoom.prev_ratio_x = sd->zoom.ratio_x;
- sd->zoom.prev_ratio_y = sd->zoom.ratio_y;
- sd->zoom.prev_cord_x = sd->zoom.cord_x;
- sd->zoom.prev_cord_y = sd->zoom.cord_y;
-
- sd->zoom.ratio_x = zoomx;
- sd->zoom.ratio_y = zoomy;
- sd->zoom.cord_x = cx;
- sd->zoom.cord_y = cy;
-
- if (e_config->desk_zoom_effect.enable)
- {
- if (sd->zoom.animator)
- {
- ecore_animator_del(sd->zoom.animator);
- sd->zoom.animator = NULL;
- }
-
- sd->zoom.animating_type = E_DESK_ZOOM_ANIMATING_TYPE_ENABLE;
- sd->zoom.animator = ecore_animator_timeline_add(e_config->desk_zoom_effect.duration,
- _e_desk_zoom_animate_cb, desk);
- _e_desk_object_zoom(desk->smart_obj, zoomx, zoomy, cx, cy);
- }
- else
- {
- _e_desk_object_zoom(desk->smart_obj, zoomx, zoomy, cx, cy);
- EINA_LIST_FOREACH(sd->clients, l, ec)
- {
- _e_desk_client_zoom(ec, zoomx, zoomy, cx, cy);
- }
- }
- }
-
- if (!sd->zoom.enabled)
- {
- /* if desk_zoom_effect is enabled,
- then sd->zoom.enabled will be set after finishing effect */
- if (!e_config->desk_zoom_effect.enable)
- sd->zoom.enabled = EINA_TRUE;
-
- /*
- * NOTE: evas_object_map_enable_set is called in _e_desk_client_zoom()
- */
- /*
- * evas_object_map_enable_set(desk->smart_obj, EINA_TRUE);
- * EINA_LIST_FOREACH(sd->clients, l, ec)
- * evas_object_map_enable_set(ec->frame, EINA_TRUE);
- */
- }
-
-end:
- _e_desk_event_simple_add(desk, E_EVENT_DESK_ZOOM_SET);
-#endif
-}
+}
E_API Eina_Bool
e_desk_zoom_get(E_Desk *desk, double *zoomx, double *zoomy, int *cx, int *cy)
{
-#ifdef CONTAINER_POLICY
E_Desk_Data_Zoom zoom_data = {0,};
-#else
- E_Zone *zone = NULL;
- E_Output *eout = NULL;
- Eina_Bool res = EINA_FALSE;
-#endif
E_OBJECT_CHECK_RETURN(desk, EINA_FALSE);
E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, EINA_FALSE);
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(desk)->events.zoom_get, &zoom_data);
if (zoom_data.result)
if (cy) *cy = zoom_data.cy;
}
return zoom_data.result;
-#else
- if (e_config->use_pp_zoom)
- {
- if (e_display_pp_support())
- {
- zone = desk->zone;
- eout = e_output_find(zone->output_id);
- if (!eout)
- {
- ERR("e_desk_zoom_set: fail get eout");
- return res;
- }
-
- res = e_output_zoom_get(eout, zoomx, zoomy, cx, cy);
- return res;
- }
- }
-
- E_DESK_SMART_DATA_GET(desk->smart_obj, sd);
- EINA_SAFETY_ON_NULL_RETURN_VAL(sd, EINA_FALSE);
-
- if (zoomx) *zoomx = sd->zoom.ratio_x;
- if (zoomy) *zoomy = sd->zoom.ratio_y;
- if (cx) *cx = sd->zoom.cord_x;
- if (cy) *cy = sd->zoom.cord_y;
-
- return EINA_TRUE;
-#endif
}
EINTERN Eina_Bool
e_desk_zoom_get_center_coordinate(E_Desk *desk, double zoomx, double zoomy, int rectx, int recty, int *cx, int *cy)
{
-#ifdef CONTAINER_POLICY
E_Desk_Data_Zoom zoom_data = {0,};
-#else
- E_Zone *zone = NULL;
- E_Output *eout = NULL;
- int w, h;
- int zoomw, zoomh;
-#endif
E_OBJECT_CHECK_RETURN(desk, EINA_FALSE);
E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, EINA_FALSE);
-#ifdef CONTAINER_POLICY
zoom_data.zoomx = zoomx;
zoom_data.zoomy = zoomy;
zoom_data.rectx = rectx;
if (cy) *cy = zoom_data.cy;
}
return zoom_data.result;
-#else
- zone = desk->zone;
- eout = e_output_find(zone->output_id);
-
- e_output_size_get(eout, &w, &h);
-
- zoomw = w / zoomx;
- zoomh = h / zoomy;
-
- if (e_config->use_pp_zoom)
- {
- if (zoomx == 1 || rectx < 0 || zoomw + rectx >= w)
- return EINA_FALSE;
-
- if (zoomy == 1 || recty < 0 || zoomh + recty >= h)
- return EINA_FALSE;
- }
- else
- {
- if (zoomx == 1 || zoomy == 1)
- return EINA_FALSE;
- }
-
- if (rectx == 0)
- *cx = 0;
- else
- *cx = (int)((zoomx * (double)rectx) / (zoomx - 1.0));
-
- if (recty == 0)
- *cy = 0;
- else
- *cy = (int)((zoomy * (double)recty) / (zoomy - 1.0));
-
- return EINA_TRUE;
- #endif
}
E_API void
e_desk_zoom_unset(E_Desk *desk)
{
-#ifdef CONTAINER_POLICY
-#else
- E_Client *ec;
- Eina_List *l;
- E_Zone *zone = NULL;
- E_Output *eout = NULL;
-#endif
-
E_OBJECT_CHECK(desk);
E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(desk)->events.zoom_unset, NULL);
-#else
- ELOGF("DESK", "ZOOM UNSET. desk:%p", NULL, desk);
-
- if (e_config->use_pp_zoom)
- {
- if (e_display_pp_support())
- {
- zone = desk->zone;
- eout = e_output_find(zone->output_id);
- if (!eout)
- {
- ERR("e_desk_zoom_unset: fail get eout");
- goto end;
- }
-
- e_output_zoom_unset(eout);
- DBG("e_desk_zoom_unset");
-
- goto end;
- }
- }
-
- E_DESK_SMART_DATA_GET_OR_RETURN(desk->smart_obj, sd);
-
- if (!sd->zoom.enabled)
- {
- if (sd->zoom.animating_type != E_DESK_ZOOM_ANIMATING_TYPE_ENABLE)
- {
- goto end;
- }
- }
-
- sd->zoom.prev_ratio_x = sd->zoom.ratio_x;
- sd->zoom.prev_ratio_y = sd->zoom.ratio_y;
- sd->zoom.prev_cord_x = sd->zoom.cord_x;
- sd->zoom.prev_cord_y = sd->zoom.cord_y;
-
- sd->zoom.ratio_x = 1.0;
- sd->zoom.ratio_y = 1.0;
- sd->zoom.cord_x = 0;
- sd->zoom.cord_y = 0;
- sd->zoom.enabled = EINA_FALSE;
-
- if (e_config->desk_zoom_effect.enable)
- {
- if (sd->zoom.animator)
- {
- ecore_animator_del(sd->zoom.animator);
- sd->zoom.animator = NULL;
- }
-
- sd->zoom.animating_type = E_DESK_ZOOM_ANIMATING_TYPE_DISABLE;
- sd->zoom.animator = ecore_animator_timeline_add(e_config->desk_zoom_effect.duration,
- _e_desk_zoom_animate_cb, desk);
- _e_desk_object_zoom(desk->smart_obj, sd->zoom.ratio_x, sd->zoom.ratio_y,
- sd->zoom.cord_x, sd->zoom.cord_y);
- }
- else
- {
- _e_desk_object_zoom(desk->smart_obj, sd->zoom.ratio_x, sd->zoom.ratio_y,
- sd->zoom.cord_x, sd->zoom.cord_y);
- /*
- * NOTE: evas_object_map_enable_set is called in _e_desk_client_zoom()
- */
- /*
- * evas_object_map_enable_set(desk->smart_obj, EINA_FALSE);
- */
- EINA_LIST_FOREACH(sd->clients, l, ec)
- {
- /* NOTE Is it really necessary?
- * Why isn't it enough to just call evas_object_map_enable_set(false)? */
- _e_desk_client_zoom(ec, sd->zoom.ratio_x, sd->zoom.ratio_y,
- sd->zoom.cord_x, sd->zoom.cord_y);
- //evas_object_map_enable_set(ec->frame, EINA_FALSE);
- }
- }
-
-end:
- _e_desk_event_simple_add(desk, E_EVENT_DESK_ZOOM_UNSET);
-#endif
}
E_API void
E_OBJECT_CHECK(desk);
E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(desk)->events.smart_member_add, obj);
-#else
- evas_object_smart_member_add(obj, desk->smart_obj);
-#endif
}
E_API void
e_desk_smart_member_del(Evas_Object *obj)
{
-#ifdef CONTAINER_POLICY
E_Desk *desk;
desk = e_desk_current_get(e_zone_current_get());
if (!desk) return;
wl_signal_emit(&PRI(desk)->events.smart_member_del, obj);
-#else
- evas_object_smart_member_del(obj);
-#endif
}
E_API Eina_Bool
e_desk_client_zoom_skip_set(E_Desk * desk, E_Client * ec)
{
-#ifdef CONTAINER_POLICY
E_Desk_Data_Client_Zoom client_zoom_data = {0,};
-#else
- E_Desk *ec_desk;
-#endif
if (!desk) return EINA_FALSE;
if (!ec) return EINA_FALSE;
-#ifdef CONTAINER_POLICY
client_zoom_data.ec = ec;
wl_signal_emit(&PRI(desk)->events.client_zoom_skip_set, &client_zoom_data);
return client_zoom_data.result;
-#else
- // TODO: Need to check the ec_desk?
- ec_desk = e_zone_desk_find_by_ec(desk->zone, ec);
- if (!ec_desk) return EINA_FALSE;
-
- ELOGF("DESK", "Client zoom skip set. desk:%p, ec_desk:%p)", ec, desk, ec_desk);
-
- if (!e_desk_has_ec(desk, ec)) return EINA_FALSE;
-
- E_Desk_Private_Client *desk_client = _e_desk_private_client_get(ec);
- if (desk_client)
- desk_client->skip_zoom = EINA_TRUE;
-
- return EINA_TRUE;
-#endif
}
E_API Eina_Bool
e_desk_client_zoom_skip_unset(E_Desk *desk, E_Client *ec)
{
-#ifdef CONTAINER_POLICY
E_Desk_Data_Client_Zoom client_zoom_data = {0,};
-#else
- E_Desk *ec_desk;
-#endif
if (!desk) return EINA_FALSE;
if (!ec) return EINA_FALSE;
-#ifdef CONTAINER_POLICY
client_zoom_data.ec = ec;
wl_signal_emit(&PRI(desk)->events.client_zoom_skip_unset, &client_zoom_data);
return client_zoom_data.result;
-#else
- ec_desk = e_zone_desk_find_by_ec(desk->zone, ec);
- if (!ec_desk) return EINA_FALSE;
-
- ELOGF("DESK", "Client zoom skip set. desk:%p, ec_desk:%p)", ec, desk, ec_desk);
-
- if (!e_desk_has_ec(desk, ec)) return EINA_FALSE;
-
- E_Desk_Private_Client *desk_client = _e_desk_private_client_get(ec);
- if (desk_client)
- desk_client->skip_zoom = EINA_FALSE;
-
- _e_desk_smart_client_add(desk->smart_obj, ec);
-
- return EINA_TRUE;
-#endif
}
EINTERN void
e_desk_client_zoom_apply(E_Desk *desk, E_Client *ec)
{
-#ifdef CONTAINER_POLICY
E_Desk_Data_Client_Zoom client_zoom_data = {0,};
-#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 CONTAINER_POLICY
client_zoom_data.ec = ec;
wl_signal_emit(&PRI(desk)->events.client_zoom_apply, &client_zoom_data);
-#else
- E_DESK_SMART_DATA_GET_OR_RETURN(desk->smart_obj, sd);
- if (!eina_list_data_find(sd->clients, ec))
- return;
-
- if (sd->zoom.enabled)
- {
- _e_desk_client_zoom(ec,
- sd->zoom.ratio_x, sd->zoom.ratio_y,
- sd->zoom.cord_x, sd->zoom.cord_y);
- }
-#endif
}
EINTERN Eina_Bool
e_desk_zoom_is_animating(E_Desk *desk)
{
-#ifdef CONTAINER_POLICY
E_Desk_Data_Zoom zoom_data = {0,};
wl_signal_emit(&PRI(desk)->events.zoom_is_animating, &zoom_data);
return zoom_data.result;
-#else
- E_DESK_SMART_DATA_GET(desk->smart_obj, sd);
- if (!sd) return EINA_FALSE;
-
- if (!e_config->desk_zoom_effect.enable) return EINA_FALSE;
-
- return !!sd->zoom.animator;
-#endif
}
E_API void
e_desk_visible_client_iconify_all(E_Desk *desk)
{
-#ifdef CONTAINER_POLICY
-#else
- E_Client *ec;
- Eina_List *l;
-#endif
-
if (!desk) return;
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(desk)->events.visible_client_iconify_all, NULL);
-#else
- ELOGF("DESK", "ICONIFY ALL VISIBLE WINDOW", NULL);
- E_CLIENT_REVERSE_FOREACH(ec)
- {
- if (!e_desk_has_ec(desk, ec)) continue;
- if (e_object_is_del(E_OBJECT(ec))) continue;
- if (!ec->visible) continue;
- if (ec->netwm.type == E_WINDOW_TYPE_DESKTOP) continue;
- if (e_client_desk_iconify_skip_get(ec)) continue;
- if (e_client_visibility_get(ec) == E_VISIBILITY_UNKNOWN) continue;
- if (e_client_visibility_get(ec) != E_VISIBILITY_UNOBSCURED)
- {
- if (e_client_is_iconified_by_client(ec))
- continue;
- }
-
- ELOGF("DESK", "Add to iconified list...", ec);
- desk->iconified_list = eina_list_remove(desk->iconified_list, ec);
- desk->iconified_list = eina_list_append(desk->iconified_list, ec);
- }
-
- // bottom to top
- EINA_LIST_REVERSE_FOREACH(desk->iconified_list, l, ec)
- {
- e_client_iconified_type_set(ec, E_ICONIFIED_TYPE_DESK_ICONIFY_BY_CLIENT);
- e_policy_wl_iconify_state_change_send(ec, 1);
- e_client_iconify(ec);
- }
-#endif
}
E_API void
e_desk_visible_client_restore_all(E_Desk *desk)
{
-#ifdef CONTAINER_POLICY
-#else
- E_Client *ec;
- Eina_List *restore_list;
- Eina_List *l;
-#endif
-
if (!desk) return;
if (!desk->iconified_list) return;
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(desk)->events.visible_client_restore_all, NULL);
-#else
- ELOGF("DESK", "RESTORE ALL VISIBLE WINDOW", NULL);
-
- restore_list = eina_list_clone(desk->iconified_list);
-
- eina_list_free(desk->iconified_list);
- desk->iconified_list = NULL;
-
- // bottom to top
- EINA_LIST_REVERSE_FOREACH(restore_list, l, ec)
- {
- ELOGF("DESK", "Restore from iconified list...", ec);
- e_client_iconified_type_set(ec, E_ICONIFIED_TYPE_NONE);
- e_policy_wl_iconify_state_change_send(ec, 0);
- e_client_uniconify(ec);
- }
- eina_list_free(restore_list);
-#endif
}
E_API void
if (!desk || !ec) return;
if (!desk->iconified_list) return;
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(desk)->events.client_iconified_list_remove, &ec);
-#else
- ELOGF("DESK", "Remove from iconified list", ec);
- desk->iconified_list = eina_list_remove(desk->iconified_list, ec);
-#endif
}
E_API void
if (!desk) return;
if (!desk->iconified_list) return;
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(desk)->events.client_iconified_list_remove_all, NULL);
-#else
- ELOGF("DESK", "Remove iconified list all", NULL);
- eina_list_free(desk->iconified_list);
- desk->iconified_list = NULL;
-#endif
}
E_API Eina_List *
static void
_e_desk_free(E_Desk *desk)
{
-#ifdef CONTAINER_POLICY
-#else
- Eina_List *l;
- E_Desk_Area *eda;
-#endif
-
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(desk)->events.desk_free, desk);
-#else
- for (int i=E_DESK_AREA_LAYER_COUNT-1; i>=0; i--)
- {
- EINA_LIST_FOREACH(desk->desk_area.list[i], l, eda)
- {
- e_object_del(E_OBJECT(eda));
- }
- eina_list_free(desk->desk_area.list[i]);
- desk->desk_area.list[i] = NULL;
- }
-
- e_desk_desk_area_del(desk, desk->desk_area.base);
- desk->desk_area.base = NULL;
- desk->desk_area.active = NULL;
-
-
- E_FREE_FUNC(desk->smart_obj, evas_object_del);
- eina_stringshare_del(desk->name);
- desk->name = NULL;
- E_FREE_LIST(desk->handlers, ecore_event_handler_del);
-#endif
+
_e_desk_private_finish(desk);
free(desk);
}
-
-#ifdef CONTAINER_POLICY
-#else
-// use event_simple_free
-static void
-_e_desk_event_desk_show_free(void *data EINA_UNUSED, void *event)
-{
- E_Event_Desk_Show *ev;
-
- ev = event;
- e_object_unref(E_OBJECT(ev->desk));
- free(ev);
-}
-
-// use event_simple_free
-static void
-_e_desk_event_desk_before_show_free(void *data EINA_UNUSED, void *event)
-{
- E_Event_Desk_Before_Show *ev;
-
- ev = event;
- e_object_unref(E_OBJECT(ev->desk));
- free(ev);
-}
-
-// use event_simple_free
-static void
-_e_desk_event_desk_after_show_free(void *data EINA_UNUSED, void *event)
-{
- E_Event_Desk_After_Show *ev;
-
- ev = event;
- e_object_unref(E_OBJECT(ev->desk));
- free(ev);
-}
-
-// use event_simple_free
-static void
-_e_desk_event_desk_geometry_change_free(void *data EINA_UNUSED, void *event)
-{
- E_Event_Desk_Geometry_Change *ev = event;
- e_object_unref(E_OBJECT(ev->desk));
- E_FREE(ev);
-}
-#endif
-
-#ifdef CONTAINER_POLICY
-#else
-static Eina_Bool
-_e_desk_transition_setup(E_Client *ec, int dx, int dy, int state)
-{
- e_view_client_effect_set(e_client_view_get(ec), "none");
-
- return EINA_FALSE;
-}
-
-static void
-_e_desk_show_end(void *data, E_View_Client *client, const char *emission, const char *source)
-{
- E_Client *ec = data;
- E_Zone *ec_zone;
- E_Desk *ec_desk;
-
- ec_zone = e_comp_zone_find_by_ec(ec);
- ec_desk = e_zone_desk_find_by_ec(ec_zone, ec);
- if (ec_desk)
- ec_desk->animate_count--;
-
- e_client_comp_hidden_set(ec, 0);
- e_view_client_effect_unclip(e_client_view_get(ec));
- ec->hidden = 0;
- if (!ec->visible)
- e_view_client_show(e_client_view_get(ec));
-
- if (ec_desk != e_desk_current_get(ec_zone)) return;
-}
-
-static void
-_e_desk_hide_end(void *data, E_View_Client *client, const char *emission, const char *source)
-{
- E_Client *ec = data;
- E_Desk *ec_desk;
-
- ec_desk = e_comp_desk_find_by_ec(ec);
- if (ec_desk)
- ec_desk->animate_count--;
- ec->hidden = 1;
- e_view_client_hide(e_client_view_get(ec));
-}
-#endif
-
-#ifdef CONTAINER_POLICY
-#else
-static void
-_e_desk_show_begin(E_Desk *desk, int dx, int dy)
-{
- E_Client *ec;
-
- if (dx < 0) dx = -1;
- if (dx > 0) dx = 1;
- if (dy < 0) dy = -1;
- if (dy > 0) dy = 1;
-
- desk->animate_count = 0;
- E_CLIENT_FOREACH(ec)
- {
- if (e_client_util_ignored_get(ec) || (!e_zone_has_ec(desk->zone, ec)) || (ec->iconic)) continue;
- if (ec->moving)
- {
- e_desk_client_add(desk, ec);
- e_view_client_show(e_client_view_get(ec));
- continue;
- }
- if ((!e_desk_has_ec(desk, ec)) || (ec->sticky)) continue;
- if ((!starting) && (!ec->new_client) && _e_desk_transition_setup(ec, dx, dy, 1))
- {
- e_view_client_effect_stop(e_client_view_get(ec), _e_desk_hide_end);
- e_view_client_effect_start(e_client_view_get(ec), _e_desk_show_end, ec);
- desk->animate_count++;
- }
- else
- ec->hidden = 0;
-
- e_client_comp_hidden_set(ec, ec->hidden);
- e_view_client_show(e_client_view_get(ec));
- }
-}
-
-static void
-_e_desk_hide_begin(E_Desk *desk, int dx, int dy)
-{
- E_Client *ec;
-
- if (dx < 0) dx = -1;
- if (dx > 0) dx = 1;
- if (dy < 0) dy = -1;
- if (dy > 0) dy = 1;
-
- desk->animate_count = 0;
- E_CLIENT_FOREACH(ec)
- {
- if (e_client_util_ignored_get(ec)) continue;
- if ((!e_zone_has_ec(desk->zone, ec)) || (ec->iconic)) continue;
- if (ec->moving) continue;
- if ((!e_desk_has_ec(desk, ec)) || (ec->sticky)) continue;
- if ((!starting) && (!ec->new_client) && _e_desk_transition_setup(ec, -dx, -dy, 0))
- {
- e_view_client_effect_stop(e_client_view_get(ec), _e_desk_show_end);
- e_view_client_effect_start(e_client_view_get(ec), _e_desk_hide_end, ec);
- desk->animate_count++;
- }
- else
- {
- ec->hidden = 1;
- e_view_client_show(e_client_view_get(ec));
- ec->changes.visible = 0;
- e_view_client_hide(e_client_view_get(ec));
- }
- e_client_comp_hidden_set(ec, EINA_TRUE);
- }
-}
-#endif
-
-#ifdef CONTAINER_POLICY
-#else
-static void
-_e_desk_smart_init(E_Desk *desk)
-{
- E_Zone *zone;
-
- zone = desk->zone;
-
- desk->smart_obj = evas_object_smart_add(e_comp_evas_get(), _e_desk_smart_class_new());
- e_desk_geometry_set(desk, zone->x, zone->y, zone->w, zone->h);
-
- E_DESK_SMART_DATA_GET_OR_RETURN(desk->smart_obj, sd);
-
- sd->zoom.ratio_x = 1.0;
- sd->zoom.ratio_y = 1.0;
- sd->zoom.cord_x = 0;
- sd->zoom.cord_y = 0;
-}
-#endif
-
-#ifdef CONTAINER_POLICY
-#else
-static Eina_Bool
-_e_desk_smart_client_cb_resize(void *data, int type, void *event)
-{
- E_Event_Client *ev;
- E_Desk_Smart_Data *sd;
- E_Client *ec = NULL;
-
- if (!data) goto end;
- if (!event) goto end;
-
- ev = event;
- sd = data;
- ec = ev->ec;
- if (!ec) goto end;
-
- if (!eina_list_data_find(sd->clients, ec))
- goto end;
-
- if (sd->zoom.animator)
- goto end;
-
- if (sd->zoom.enabled)
- _e_desk_client_zoom(ec,
- sd->zoom.ratio_x, sd->zoom.ratio_y,
- sd->zoom.cord_x, sd->zoom.cord_y);
-end:
- return ECORE_CALLBACK_PASS_ON;
-}
-
-static void
-_e_desk_smart_add(Evas_Object *obj)
-{
- EVAS_SMART_DATA_ALLOC(obj, E_Desk_Smart_Data);
-
- /* to apply zoom transformation whenever the client's size is changed. */
- E_LIST_HANDLER_APPEND(priv->handlers, E_EVENT_CLIENT_RESIZE, _e_desk_smart_client_cb_resize, priv);
-
- /* FIXME hard coded, it will be laid upper than unpacked clients */
- evas_object_layer_set(obj, E_LAYER_DESK_OBJECT);
-
- _e_desk_parent_sc->add(obj);
-}
-
-static void
-_e_desk_smart_del(Evas_Object *obj)
-{
- _e_desk_parent_sc->del(obj);
-
- E_DESK_SMART_DATA_GET_OR_RETURN(obj, sd);
-
- E_FREE_LIST(sd->handlers, ecore_event_handler_del);
- eina_list_free(sd->clients);
- free(sd);
-
- evas_object_smart_data_set(obj, NULL);
-}
-
-static void
-_e_desk_smart_member_add(Evas_Object *obj, Evas_Object *child)
-{
- E_Client *ec;
- E_Desk *ec_desk;
-
- _e_desk_parent_sc->member_add(obj, child);
-
- ec = evas_object_data_get(child, "E_Client");
- if (ec)
- {
- ec_desk = e_comp_desk_find_by_ec(ec);
- if (ec_desk)
- e_desk_client_del(ec_desk, ec);
- }
-}
-
-static void
-_e_desk_smart_member_del(Evas_Object *obj, Evas_Object *child)
-{
- E_Client *ec = NULL;
- Evas_Object *parent = NULL;
- E_Zone*ec_zone;
- E_Desk *ec_desk;
-
- _e_desk_parent_sc->member_del(obj, child);
-
- // if quickpanel packed into mover smart obj, _e_desk_smart_member_del is called
- // but parent is still e_desk, because mover's parent is the same e_desk
- // than don't add ec on the sd->clists
- parent = evas_object_smart_parent_get(child);
- if (parent && (parent == obj)) return;
-
- ec = evas_object_data_get(child, "E_Client");
- if (ec)
- {
- ec_zone = e_comp_zone_find_by_ec(ec);
- ec_desk = e_zone_desk_find_by_ec(ec_zone, ec);
- if (ec_desk)
- _e_desk_smart_client_add(ec_desk->smart_obj, ec);
- }
-}
-
-static void
-_e_desk_smart_set_user(Evas_Smart_Class *sc)
-{
- sc->add = _e_desk_smart_add;
- sc->del = _e_desk_smart_del;
- sc->member_add = _e_desk_smart_member_add;
- sc->member_del = _e_desk_smart_member_del;
-}
-#endif
-
-#ifdef CONTAINER_POLICY
-#else
-static void
-_e_desk_smart_client_add(Evas_Object *obj, E_Client *ec)
-{
- Evas_Object *parent = NULL;
- E_Desk *ec_desk;
-
- E_DESK_SMART_DATA_GET_OR_RETURN(obj, sd);
-
- ec_desk = e_comp_desk_find_by_ec(ec);
- if (!ec_desk) return;
-
- // if ec is a member of e_desk, don't add it in data.
- parent = evas_object_smart_parent_get(ec->frame);
- if (parent && (parent == ec_desk->smart_obj)) return;
-
- if (eina_list_data_find(sd->clients, ec))
- return;
-
- sd->clients = eina_list_append(sd->clients, ec);
- evas_object_smart_changed(obj);
-}
-
-static void
-_e_desk_smart_client_del(Evas_Object *obj, E_Client *ec)
-{
- E_DESK_SMART_DATA_GET_OR_RETURN(obj, sd);
-
- if (!eina_list_data_find(sd->clients, ec))
- return;
-
- if (sd->zoom.enabled)
- _e_desk_client_zoom(ec, 1.0, 1.0, 0, 0);
-
- sd->clients = eina_list_remove(sd->clients, ec);
- evas_object_smart_changed(obj);
-}
-
-static void
-_e_desk_object_zoom(Evas_Object *obj, double zoomx, double zoomy, Evas_Coord cx, Evas_Coord cy)
-{
- E_Map *map;
-
- if (!obj) return;
- if ((zoomx == 1.0) && (zoomy == 1.0))
- {
- e_comp_object_map_enable_set(obj, EINA_FALSE);
- e_comp_object_map_set(obj, NULL);
- return;
- }
-
- map = e_map_new();
- e_map_util_points_populate_from_object(map, obj);
- e_map_util_zoom(map, zoomx, zoomy, cx, cy);
- e_comp_object_map_set(obj, map);
- e_comp_object_map_enable_set(obj, EINA_TRUE);
- e_map_free(map);
-}
-
-static void
-_e_desk_client_subsurf_create(void *data, E_Client *subc)
-{
- E_Client *ec, *parent;
- ec = data;
-
- if (ec != subc) return;
-
- if (ec->desk_zoom.transform)
- {
- e_client_transform_core_remove(ec, ec->desk_zoom.transform);
- E_FREE_FUNC(ec->desk_zoom.transform, e_util_transform_del);
- }
-
- parent = e_comp_wl_topmost_parent_get(ec);
- if (parent)
- {
- parent->transform_core.changed = EINA_TRUE;
- e_client_transform_core_update(parent);
- }
-}
-
-static void
-_e_desk_client_deskzoom_set(E_Client *ec, double zoomx, double zoomy, Evas_Coord cx, Evas_Coord cy)
-{
- if (e_comp_wl_subsurface_check(ec)) return;
-
- if ((zoomx == 1.0) && (zoomy == 1.0))
- {
- if (ec->desk_zoom.transform)
- e_client_transform_core_remove(ec, ec->desk_zoom.transform);
- e_client_transform_core_update(ec);
- return;
- }
-
- if (!ec->desk_zoom.transform)
- {
- ec->desk_zoom.transform = e_util_transform_new();
- e_util_transform_role_set(ec->desk_zoom.transform, "desk_zoom");
-
- if (!ec->desk_zoom.hook_subsurf_create)
- {
- ec->desk_zoom.hook_subsurf_create =
- e_comp_wl_hook_add(E_COMP_WL_HOOK_SUBSURFACE_CREATE,
- _e_desk_client_subsurf_create, ec);
- }
- }
-
- e_util_transform_zoom_set(ec->desk_zoom.transform, zoomx, zoomy, cx, cy);
- e_client_transform_core_add(ec, ec->desk_zoom.transform);
-
- e_client_transform_core_update(ec);
-}
-
-static void
-_e_desk_client_zoom(E_Client *ec, double zoomx, double zoomy, Evas_Coord cx, Evas_Coord cy)
-{
- if (e_object_is_del(E_OBJECT(ec))) return;
- if (ec->is_cursor) return;
-
- E_Desk_Private_Client *desk_client = _e_desk_private_client_get(ec);
- EINA_SAFETY_ON_NULL_RETURN(desk_client);
-
- if (desk_client->skip_zoom)
- return;
-
- if ((zoomx == 1.0) && (zoomy == 1.0))
- e_client_desk_zoom_enable_set(ec, EINA_FALSE);
- else
- e_client_desk_zoom_enable_set(ec, EINA_TRUE);
-
- _e_desk_client_deskzoom_set(ec, zoomx, zoomy, cx, cy);
-
- if (e_view_client_visible_get(e_client_view_get(ec)))
- {
- // force update
- e_view_client_damage(e_client_view_get(ec), 0, 0, ec->w, ec->h);
- e_view_client_dirty(e_client_view_get(ec));
- e_view_client_render(e_client_view_get(ec));
- }
-}
-#endif
-
static unsigned int
_e_desk_desk_area_layer_map(E_Desk_Area_Layer layer)
{
desk->desk_area.active = eda;
wl_signal_emit(&PRI(desk)->events.desk_area_active_change, desk);
-#ifdef CONTAINER_POLICY
-#else
- _e_desk_hook_call(E_DESK_HOOK_DESK_AREA_ACTIVE_CHANGE, desk);
-#endif
}
EINTERN E_Desk_Area *
return below;
}
-#ifdef CONTAINER_POLICY
-#else
-static void
-_e_desk_hooks_clean(void)
-{
- Eina_Inlist *l;
- E_Desk_Hook *dh;
- unsigned int x;
-
- for (x = 0; x < E_DESK_HOOK_LAST; x++)
- EINA_INLIST_FOREACH_SAFE(_e_desk_hooks[x], l, dh)
- {
- if (!dh->delete_me) continue;
- _e_desk_hooks[x] = eina_inlist_remove(_e_desk_hooks[x], EINA_INLIST_GET(dh));
- free(dh);
- }
-
- _e_desk_hooks_delete = 0;
-}
-
-static Eina_Bool
-_e_desk_hook_call(E_Desk_Hook_Point hookpoint, E_Desk *desk)
-{
- E_Desk_Hook *dh;
-
- e_object_ref(E_OBJECT(desk));
- _e_desk_hooks_walking++;
- EINA_INLIST_FOREACH(_e_desk_hooks[hookpoint], dh)
- {
- if (dh->delete_me) continue;
- dh->func(dh->data, desk);
- }
- _e_desk_hooks_walking--;
- if ((_e_desk_hooks_walking == 0) && (_e_desk_hooks_delete > 0))
- _e_desk_hooks_clean();
-
- return !!e_object_unref(E_OBJECT(desk));
-}
-#endif
-
-#ifdef CONTAINER_POLICY
-#else
-E_API E_Desk_Hook *
-e_desk_hook_add(E_Desk_Hook_Point hookpoint, E_Desk_Hook_Cb func, const void *data)
-{
- E_Desk_Hook *dh;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL(hookpoint >= E_DESK_HOOK_LAST, NULL);
- dh = E_NEW(E_Desk_Hook, 1);
- if (!dh) return NULL;
-
- dh->hookpoint = hookpoint;
- dh->func = func;
- dh->data = (void*)data;
-
- _e_desk_hooks[hookpoint] = eina_inlist_append(_e_desk_hooks[hookpoint], EINA_INLIST_GET(dh));
- return dh;
-}
-
-E_API void
-e_desk_hook_del(E_Desk_Hook * dh)
-{
- dh->delete_me = 1;
- if (_e_desk_hooks_walking == 0)
- {
- _e_desk_hooks[dh->hookpoint] = eina_inlist_remove(_e_desk_hooks[dh->hookpoint], EINA_INLIST_GET(dh));
- free(dh);
- }
- else
- _e_desk_hooks_delete++;
-}
-
-EINTERN void
-e_desk_desk_area_info_print(E_Desk *desk)
-{
- E_Desk_Area *eda = NULL;
- Eina_List *l;
-
- E_OBJECT_CHECK(desk);
- E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
-
- for (int i=E_DESK_AREA_LAYER_COUNT-1; i>=0; i--)
- {
- EINA_LIST_FOREACH(desk->desk_area.list[i], l, eda)
- {
- e_desk_area_info_print(eda);
- }
- }
-}
-#endif
-
EINTERN Eina_Bool
e_desk_has_ec(E_Desk *desk, E_Client *ec)
{
wl_signal_add(&priv->events.desk_area_active_change, listener);
}
-#ifdef CONTAINER_POLICY
EINTERN void
e_desk_desk_new_listener_add(E_Desk *desk, struct wl_listener *listener)
{
API_ENTRY;
wl_signal_add(&priv->events.client_iconified_list_remove_all, listener);
}
-#endif
#include <wayland-server.h>
#include <libds-tizen/screen.h>
-#ifdef CONTAINER_POLICY
typedef struct _E_Desk_Data_Top_Visible_Get
{
E_Desk *desk;
Eina_Bool result;
} E_Desk_Data_Client_Zoom;
-#endif
-
extern EINTERN int E_EVENT_DESK_SHOW;
extern EINTERN int E_EVENT_DESK_BEFORE_SHOW;
extern EINTERN int E_EVENT_DESK_AFTER_SHOW;
EINTERN void e_desk_show(E_Desk *desk);
EINTERN void e_desk_deskshow(E_Zone *zone);
EINTERN E_Client *e_desk_client_top_visible_get(E_Desk *desk);
-#ifdef CONTAINER_POLICY
-#else
-EINTERN E_Desk *e_desk_at_xy_get(E_Zone *zone, int x, int y);
-EINTERN E_Desk *e_desk_at_pos_get(E_Zone *zone, int pos);
-#endif
EINTERN void e_desk_xy_get(E_Desk *desk, int *x, int *y);
-#ifdef CONTAINER_POLICY
-#else
-EINTERN void e_desk_next(E_Zone *zone);
-EINTERN void e_desk_prev(E_Zone *zone);
-EINTERN void e_desk_row_add(E_Zone *zone);
-EINTERN void e_desk_row_remove(E_Zone *zone);
-EINTERN void e_desk_col_add(E_Zone *zone);
-EINTERN void e_desk_col_remove(E_Zone *zone);
-#endif
EINTERN Eina_Bool e_desk_has_ec(E_Desk *desk, E_Client *ec);
EINTERN E_Client *e_desk_top_ec_get(E_Desk *desk);
EINTERN E_Client *e_desk_bottom_ec_get(E_Desk *desk);
EINTERN void e_desk_desk_area_enable_listener_add(E_Desk *desk, struct wl_listener *listener);
EINTERN void e_desk_desk_area_disable_listener_add(E_Desk *desk, struct wl_listener *listener);
EINTERN void e_desk_desk_area_active_change_listener_add(E_Desk *desk, struct wl_listener *listener);
-#ifdef CONTAINER_POLICY
+
EINTERN void e_desk_desk_new_listener_add(E_Desk *desk, struct wl_listener *listener);
EINTERN void e_desk_desk_free_listener_add(E_Desk *desk, struct wl_listener *listener);
EINTERN void e_desk_top_visible_get_listener_add(E_Desk *desk, struct wl_listener *listener);
EINTERN void e_desk_visible_client_restore_all_listener_add(E_Desk *desk, struct wl_listener *listener);
EINTERN void e_desk_client_iconified_list_remove_listener_add(E_Desk *desk, struct wl_listener *listener);
EINTERN void e_desk_client_iconified_list_remove_all_listener_add(E_Desk *desk, struct wl_listener *listener);
-#endif
#endif
#include <Ecore.h>
#include <Eina.h>
-#define CONTAINER_POLICY
-
#define CHECKING_PRIMARY_ZPOS
#define CLIENT_DEL_STACK_ISSUE
#include "e_view_intern.h"
#include "e_view_client_intern.h"
-#ifdef CONTAINER_POLICY
-#else
-#include "e_actions_intern.h"
-#include "e_appinfo_intern.h"
-#include "e_bindings_intern.h"
-#include "e_comp_wl_intern.h"
-#include "e_comp_wl_rsm_intern.h"
-#include "e_comp_wl_subsurface_intern.h"
-#include "e_comp_intern.h"
-#include "e_comp_wl_intern.h"
-#include "e_input_intern.h"
-#include "e_input_device_intern.h"
-#include "e_input_backend_intern.h"
-#include "e_place_intern.h"
-#include "e_policy_intern.h"
-#include "e_maximize_intern.h"
-#include "e_policy_visibility_intern.h"
-#include "e_comp_object_intern.h"
-#include "e_comp_canvas_intern.h"
-#include "e_comp_input_intern.h"
-#include "e_input_thread_client_intern.h"
-#endif
-
#define ZONE_EC_DATA_KEY "E_Zone_Client"
#define PRI(zone) ((E_Zone_Private *)e_object_data_get(E_OBJECT(zone)))
EINA_SAFETY_ON_NULL_RETURN_VAL(priv, ret);
typedef struct _E_Zone_Private E_Zone_Private;
-#ifdef CONTAINER_POLICY
-#else
-typedef struct _E_Zone_Private_Client E_Zone_Private_Client;
-#endif
struct _E_Zone_Private
{
struct
{
struct wl_signal destroy;
-#ifdef CONTAINER_POLICY
struct wl_signal zone_new;
struct wl_signal move;
struct wl_signal resize;
struct wl_signal desk_next;
struct wl_signal desk_prev;
struct wl_signal desk_count;
-#endif
struct wl_signal client_add;
-#ifdef CONTAINER_POLICY
-#else
- struct wl_signal client_remove;
- struct wl_signal display_state_change;
- struct wl_signal focus_clear;
- struct wl_signal focus_reset;
-#endif
} events;
struct wl_listener focus_focused_ec_changed;
};
-#ifdef CONTAINER_POLICY
-#else
-struct _E_Zone_Private_Client
-{
- E_Zone *zone;
- E_Client *ec;
-
- struct wl_listener client_destroy;
- struct wl_listener client_eval_post_new_client;
- struct wl_listener client_focus_set;
-};
-#endif
/* E_Zone is a child object of E_Comp. There is one zone per screen
* in a xinerama setup. Each zone has one or more desktops.
priv->zone = zone;
wl_signal_init(&priv->events.destroy);
-#ifdef CONTAINER_POLICY
wl_signal_init(&priv->events.zone_new);
wl_signal_init(&priv->events.move);
wl_signal_init(&priv->events.resize);
wl_signal_init(&priv->events.desk_next);
wl_signal_init(&priv->events.desk_prev);
wl_signal_init(&priv->events.desk_count);
-#endif
wl_signal_init(&priv->events.client_add);
-#ifdef CONTAINER_POLICY
-#else
- wl_signal_init(&priv->events.client_remove);
- wl_signal_init(&priv->events.display_state_change);
- wl_signal_init(&priv->events.focus_clear);
- wl_signal_init(&priv->events.focus_reset);
-#endif
e_object_data_set(E_OBJECT(zone), priv);
return 1;
}
-#ifdef CONTAINER_POLICY
-#else
-static void
-_e_zone_client_apply_auto_placement(E_Zone *zone, E_Client *ec)
-{
- E_Desk *desk;
- Eina_List *skiplist = NULL;
- int new_x, new_y, t = 0;
- int type;
- E_Client *parent_ec;
- int zx = 0, zy = 0, zw = 0, zh = 0;
- unsigned int seed = (unsigned int)time(NULL);
-
- // call the intercept hook of the auto placement
- if (e_client_intercept_hook_auto_placement_call(ec))
- {
- ELOGF("POL", "Intercepted auto_placement policy.", ec);
- return;
- }
-
- e_zone_useful_geometry_get(zone, &zx, &zy, &zw, &zh);
-
- if (zw > ec->w)
- new_x = zx + (rand_r(&seed) % (zw - ec->w));
- else
- new_x = zx;
- if (zh > ec->h)
- new_y = zy + (rand_r(&seed) % (zh - ec->h));
- else
- new_y = zy;
-
- e_view_client_frame_geometry_get(e_client_view_get(ec), NULL, NULL, &t, NULL);
-
- parent_ec = ec->parent;
- if (parent_ec)
- {
- type = 1;
- new_x = parent_ec->x;
- new_y = parent_ec->y;
- }
- else if ((e_config->window_placement_policy == E_WINDOW_PLACEMENT_SMART) ||
- (e_config->window_placement_policy == E_WINDOW_PLACEMENT_ANTIGADGET))
- {
- type = 2;
- skiplist = eina_list_append(skiplist, ec);
- desk = e_zone_desk_find_by_ec(zone, ec);
- if (desk)
- e_place_desk_region_smart(desk, skiplist,
- ec->x, ec->y, ec->w, ec->h,
- &new_x, &new_y);
- else
- e_place_zone_region_smart(zone, skiplist,
- ec->x, ec->y, ec->w, ec->h,
- &new_x, &new_y);
-
- eina_list_free(skiplist);
- }
- else if (e_config->window_placement_policy == E_WINDOW_PLACEMENT_MANUAL)
- {
- type = 3;
- e_place_zone_manual(zone, ec->w, t, &new_x, &new_y);
- }
- else
- {
- type = 0;
- e_place_zone_cursor(zone, ec->x, ec->y, ec->w, ec->h,
- t, &new_x, &new_y);
- }
-
- ELOGF("POL", "Apply auto placement (type:%d). (%d,%d) -> (%d,%d).", ec, type, ec->x, ec->y, new_x, new_y);
- e_client_pos_set(ec, new_x, new_y);
- ec->changes.pos = 1;
- ec->placed = 1;
- ec->pre_cb.x = ec->x; ec->pre_cb.y = ec->y;
-}
-
-static void
-_zone_cb_client_destroy(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_destroy);
- zone = zone_client->zone;
- ec = zone_client->ec;
-
- desk = e_zone_desk_find_by_ec(zone, ec);
- EINA_SAFETY_ON_NULL_RETURN(desk);
-
- ELOGF("ZONE", "CLIENT DEL", ec);
-
- e_desk_visible_client_iconified_list_remove(desk, ec);
-
- // desk_zoom
- e_client_transform_core_remove(ec, ec->desk_zoom.transform);
- e_util_transform_del(ec->desk_zoom.transform);
- ec->desk_zoom.transform = NULL;
- E_FREE_FUNC(ec->desk_zoom.hook_subsurf_create, e_comp_wl_hook_del);
-
- wl_signal_emit_mutable(&PRI(zone)->events.client_remove, ec);
-
- e_desk_client_del(desk, ec);
-
- 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_FREE(zone_client);
-}
-
-static void
-_e_zone_cb_hook_client_new_client_post(void *d, E_Client *ec)
-{
- E_Zone *zone;
-
- EINA_SAFETY_ON_NULL_RETURN(ec);
-
- zone = (E_Zone *)d;
- EINA_SAFETY_ON_NULL_RETURN(zone);
-
- // FIXME: A ec is set the current zone now.
- // We need to make a policy for the placement of the ec at the zone.
- if (zone != e_zone_current_get()) return;
-
- e_policy_client_add(ec);
- e_zone_client_add(zone, ec);
-}
-
-static void
-_zone_cb_client_eval_post_new_client(struct wl_listener *listener, void *data)
-{
- E_Zone_Private_Client *zone_client;
- E_Zone *zone;
- E_Client *ec;
- int tx, ty, tw, th;
- int nw, nh;
- int zx = 0, zy = 0, zw = 0, zh = 0;
-
- zone_client = wl_container_of(listener, zone_client, client_eval_post_new_client);
- zone = zone_client->zone;
- ec = zone_client->ec;
-
- e_zone_useful_geometry_get(zone, &zx, &zy, &zw, &zh);
- /* enforce wm size hints for initial sizing */
- if (e_config->screen_limits == E_CLIENT_OFFSCREEN_LIMIT_ALLOW_NONE)
- {
- tw = MIN(ec->w, zone->w);
- th = MIN(ec->h, zone->h);
- e_client_size_set(ec, tw, th);
- }
-
- nw = ec->w;
- nh = ec->h;
- e_client_resize_limit(ec, &nw, &nh);
- e_client_size_set(ec, nw, nh);
-
- if (ec->re_manage)
- {
- int x = ec->x, y = ec->y;
- if (ec->x) e_view_client_frame_xy_adjust(e_client_view_get(ec), ec->x, 0, &ec->x, NULL);
- if (ec->y) e_view_client_frame_xy_adjust(e_client_view_get(ec), 0, ec->y, NULL, &ec->y);
- if ((x != ec->x) || (y != ec->y)) ec->changes.pos = 1;
- ec->placed = 1;
- ec->pre_cb.x = ec->x; ec->pre_cb.y = ec->y;
- }
-
- if (!ec->placed)
- {
- if (ec->dialog)
- {
- tx = zx + ((zw - ec->w) / 2);
- ty = zy + ((zh - ec->h) / 2);
- e_client_pos_set(ec, tx, ty);
-
- ec->changes.pos = 1;
- ec->placed = 1;
- ec->pre_cb.x = ec->x; ec->pre_cb.y = ec->y;
- }
- }
-
- E_Appinfo *eai;
- eai = e_appinfo_find_with_pid(ec->netwm.pid);
- if (!eai)
- {
- if (!ec->placed)
- _e_zone_client_apply_auto_placement(zone, ec);
- }
- else
- {
- if (e_appinfo_auto_placement_get(eai))
- _e_zone_client_apply_auto_placement(zone, ec);
- }
-
- /* if the explicit geometry request asks for the app to be
- * in another zone - well move it there */
- {
- E_Zone *zone1 = NULL;
- int x, y;
-
- x = MAX(ec->x, 0);
- y = MAX(ec->y, 0);
- if ((!ec->re_manage) && ((ec->x != x) || (ec->y != y)))
- zone1 = e_comp_zone_xy_get(x, y);
-
- if (!zone1)
- {
- zone1 = e_comp_zone_xy_get(ec->x + (ec->w / 2), ec->y + (ec->h / 2));
- if (zone1)
- {
- E_Zone *z2 = e_comp_zone_xy_get(ec->x, ec->y);
-
- if (z2 && (z2 != zone1))
- {
- size_t psz = 0;
- E_Zone *zf = z2;
- Eina_List *l, *comp_zone_list = e_comp_zone_list_get();
-
- EINA_LIST_FOREACH(comp_zone_list, l, z2)
- {
- int w, h;
-
- x = ec->x, y = ec->y, w = ec->w, h = ec->h;
- E_RECTS_CLIP_TO_RECT(x, y, w, h, z2->x, z2->y, z2->w, z2->h);
- if (w * h == z2->w * z2->h)
- {
- /* client fully covering zone */
- zf = z2;
- break;
- }
- if ((unsigned)(w * h) > psz)
- {
- psz = w * h;
- zf = z2;
- }
- }
- zone = zf;
- }
- }
- }
- if (!zone1)
- zone1 = e_comp_zone_xy_get(ec->x, ec->y);
- if (!zone1)
- zone1 = e_comp_zone_xy_get(ec->x + ec->w - 1, ec->y);
- if (!zone1)
- zone1 = e_comp_zone_xy_get(ec->x + ec->w - 1, ec->y + ec->h - 1);
- if (!zone1)
- zone1 = e_comp_zone_xy_get(ec->x, ec->y + ec->h - 1);
- if ((zone1) && (zone1 != zone))
- e_zone_client_add(zone1, ec);
- }
-}
-
-static void
-_zone_cb_client_focus_set(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_focus_set);
- zone = zone_client->zone;
- ec = zone_client->ec;
-
- desk = e_zone_desk_find_by_ec(zone, ec);
- EINA_SAFETY_ON_NULL_RETURN(desk);
-
- if (!desk->visible && ec->sticky)
- e_desk_client_add(e_desk_current_get(zone), ec);
-}
-
-static void
-_e_zone_client_data_set(E_Zone *zone, E_Client *ec)
-{
- E_Zone *data;
-
- data = e_view_data_get(e_view_client_view_get(e_client_view_get(ec)), ZONE_EC_DATA_KEY);
- if (data)
- {
- if (data == zone)
- {
- ELOGF("E_Zone", "EC is already added to zone_id:%d", ec, zone->id);
- return;
- }
-
- e_view_data_del(e_view_client_view_get(e_client_view_get(ec)), ZONE_EC_DATA_KEY);
- }
-
- e_view_data_set(e_view_client_view_get(e_client_view_get(ec)), ZONE_EC_DATA_KEY, zone);
-}
-#endif
-
-#ifdef CONTAINER_POLICY
-#else
-static void
-_e_zone_input_thread_focused_client_set(void *data)
-{
- E_Input_Thread_Request_EClient_Data *ec_data = data;
- EINA_SAFETY_ON_NULL_RETURN(ec_data);
-
- if (e_comp_input->focused_ec != ec_data->ec)
- {
- ICINF("[input thread|%s] focused ec(%p)\n", __func__, ec_data->ec);
- e_comp_input->focused_ec = ec_data->ec;
- }
-}
-
-static void
-_zone_cb_focus_focused_ec_changed(struct wl_listener *listener, void *data)
-{
- E_Zone_Private *zone_private;
- E_Client *focused_ec;
-
- zone_private = wl_container_of(listener, zone_private, focus_focused_ec_changed);
- focused_ec = (E_Client *)data;
-
- if (e_input_thread_check_client_cloning_needed())
- {
- E_Input_Thread_Request_EClient_Data ec_data;
- memset(&ec_data, 0, sizeof(E_Input_Thread_Request_EClient_Data));
- ec_data.ec = focused_ec;
-
- INF("[%s] focused ec(%p)\n", __func__, focused_ec);
- e_input_backend_thread_safe_call(_e_zone_input_thread_focused_client_set, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
- }
-}
-#endif
-
EINTERN E_Zone *
e_zone_new(int num, int id, int x, int y, int w, int h)
{
zone->display_state = E_ZONE_DISPLAY_STATE_ON;
-#ifdef CONTAINER_POLICY
-#else
- // Create E_Focus at only default zone which the zone num is 0
- if (zone->num == 0)
- {
- if (e_config->focus_policy_ext == E_FOCUS_EXT_TOP_STACK)
- zone->focus = e_focus_new(zone, E_FOCUS_EXT_TOP_STACK);
- else
- // default focus policy is E_FOCUS_EXT_HISTORY
- zone->focus = e_focus_new(zone, E_FOCUS_EXT_HISTORY);
- if (!zone->focus)
- {
- e_object_del(E_OBJECT(zone));
- ERR("Fail to create focus object at zone %d", zone->num);
- return NULL;
- }
- }
-
- E_Zone_Private *priv;
- priv = PRI(zone);
- if (priv)
- {
- priv->focus_focused_ec_changed.notify = _zone_cb_focus_focused_ec_changed;
- e_focus_focused_ec_changed_listener_add(zone->focus, &priv->focus_focused_ec_changed);
- }
-#endif
-
//printf("@@@@@@@@@@ e_zone_new: %i %i | %i %i %ix%i = %p\n", num, id, x, y, w, h, zone);
snprintf(name, sizeof(name), "Zone %d", zone->num);
zone->desk_y_count = 0;
zone->desk_x_current = 0;
zone->desk_y_current = 0;
-#ifdef CONTAINER_POLICY
-#else
- e_zone_desk_count_set(zone, e_config->zone_desks_x_count,
- e_config->zone_desks_y_count);
-#endif
e_object_del_attach_func_set(E_OBJECT(zone), _e_zone_object_del_attach);
-#ifdef CONTAINER_POLICY
-#else
- // CLIENT HOOK Handlers
- E_LIST_HOOK_APPEND(zone->ec_hooks, E_CLIENT_HOOK_NEW_CLIENT_POST, _e_zone_cb_hook_client_new_client_post, zone);
-#endif
-
if (starting) return zone;
ev = E_NEW(E_Event_Zone_Add, 1);
zone->name = eina_stringshare_add(name);
}
-#ifdef CONTAINER_POLICY
-#else
-static void
-e_zone_reconfigure_clients(E_Zone *zone, int dx, int dy, int dw, int dh)
-{
- E_Client *ec;
-
- E_CLIENT_FOREACH(ec)
- {
- if (!e_zone_has_ec(zone, ec)) continue;
-
- if ((dx != 0) || (dy != 0))
- e_view_position_set(e_view_client_view_get(e_client_view_get(ec)), ec->x + dx, ec->y + dy);
- // we shrank the zone - adjust windows more
- if ((dw < 0) || (dh < 0))
- {
- e_client_res_change_geometry_save(ec);
- e_client_res_change_geometry_restore(ec);
- }
- }
-}
-#endif
-
EINTERN void
e_zone_move(E_Zone *zone,
int x,
ecore_event_add(E_EVENT_ZONE_MOVE_RESIZE, ev, _e_zone_event_generic_free, NULL);
}
-#ifdef CONTAINER_POLICY
E_Zone_Data_Move_Resize move_resize_data = {0,};
move_resize_data.dx = dx;
move_resize_data.dy = dy;
wl_signal_emit(&PRI(zone)->events.move, &move_resize_data);
-#else
- e_zone_reconfigure_clients(zone, dx, dy, 0, 0);
-#endif
}
EINTERN void
_e_zone_event_generic_free, NULL);
}
-#ifdef CONTAINER_POLICY
E_Zone_Data_Move_Resize move_resize_data = {0,};
move_resize_data.dw = dw;
move_resize_data.dh = dh;
wl_signal_emit(&PRI(zone)->events.resize, &move_resize_data);
-#else
- e_zone_reconfigure_clients(zone, 0, 0, dw, dh);
-#endif
}
EINTERN Eina_Bool
_e_zone_event_generic_free, NULL);
}
-#ifdef CONTAINER_POLICY
E_Zone_Data_Move_Resize move_resize_data = {0,};
move_resize_data.dx = dx;
move_resize_data.dy = dy;
move_resize_data.dw = dw;
move_resize_data.dh = dh;
wl_signal_emit(&PRI(zone)->events.move_resize, &move_resize_data);
-#else
- e_zone_reconfigure_clients(zone, dx, dy, dw, dh);
-#endif
+
return EINA_TRUE;
}
{
Eina_List *l = NULL, *comp_zone_list;
E_Zone *zone;
-#ifdef CONTAINER_POLICY
E_Zone_Data_Is_Current data;
data.is_current = EINA_FALSE;
-#endif
comp_zone_list = e_comp_zone_list_get();
if (!starting)
{
-#ifdef CONTAINER_POLICY
-#else
- int x, y;
-
- e_input_device_pointer_xy_get(NULL, &x, &y);
-#endif
-
EINA_LIST_FOREACH(comp_zone_list, l, zone)
{
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(zone)->events.is_current, &data);
if (data.is_current)
-#else
- if (E_INSIDE(x, y, zone->x, zone->y, zone->w, zone->h))
-#endif
return zone;
}
}
int y_count)
{
E_Event_Zone_Desk_Count_Set *ev;
-#ifdef CONTAINER_POLICY
E_Zone_Data_Desk_Count_Set desk_count_data = {0,};
desk_count_data.x_count = x_count;
desk_count_data.y_count = y_count;
wl_signal_emit(&PRI(zone)->events.desk_count_set, &desk_count_data);
-#else
- E_Desk **new_desks;
- E_Desk *desk, *new_desk;
- E_Client *ec;
- int x, y, xx, yy, moved, nx, ny;
-
- E_OBJECT_CHECK(zone);
- E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE);
-
- xx = x_count;
- if (xx < 1) xx = 1;
- yy = y_count;
- if (yy < 1) yy = 1;
-
- /* Orphaned window catcher; in case desk count gets reset */
- moved = 0;
- if (zone->desk_x_current >= xx) moved = 1;
- if (zone->desk_y_current >= yy) moved = 1;
- if (moved)
- {
- nx = zone->desk_x_current;
- ny = zone->desk_y_current;
- if (zone->desk_x_current >= xx) nx = xx - 1;
- if (zone->desk_y_current >= yy) ny = yy - 1;
- e_desk_show(e_desk_at_xy_get(zone, nx, ny));
- }
-
- new_desks = malloc(xx * yy * sizeof(E_Desk *));
- if (!new_desks) return;
- for (x = 0; x < xx; x++)
- {
- for (y = 0; y < yy; y++)
- {
- if ((x < zone->desk_x_count) && (y < zone->desk_y_count))
- desk = zone->desks[x + (y * zone->desk_x_count)];
- else
- desk = e_desk_new(zone, x, y);
- new_desks[x + (y * xx)] = desk;
- }
- }
-
- /* catch windows that have fallen off the end if we got smaller */
- if (xx < zone->desk_x_count)
- {
- for (y = 0; y < zone->desk_y_count; y++)
- {
- new_desk = zone->desks[xx - 1 + (y * zone->desk_x_count)];
- for (x = xx; x < zone->desk_x_count; x++)
- {
- desk = zone->desks[x + (y * zone->desk_x_count)];
-
- E_CLIENT_FOREACH(ec)
- {
- if (e_desk_has_ec(desk, ec))
- e_desk_client_add(new_desk, ec);
- }
- e_object_del(E_OBJECT(desk));
- }
- }
- }
- if (yy < zone->desk_y_count)
- {
- for (x = 0; x < zone->desk_x_count; x++)
- {
- new_desk = zone->desks[x + ((yy - 1) * zone->desk_x_count)];
- for (y = yy; y < zone->desk_y_count; y++)
- {
- desk = zone->desks[x + (y * zone->desk_x_count)];
-
- E_CLIENT_FOREACH(ec)
- {
- if (e_desk_has_ec(desk, ec))
- e_desk_client_add(new_desk, ec);
- }
- e_object_del(E_OBJECT(desk));
- }
- }
- }
- free(zone->desks);
- zone->desks = new_desks;
-
- zone->desk_x_count = xx;
- zone->desk_y_count = yy;
- e_config->zone_desks_x_count = xx;
- e_config->zone_desks_y_count = yy;
- e_config_save_queue();
-
- /* Cannot call desk_current_get until the zone desk counts have been set
- * or else we end up with a "white background" because desk_current_get will
- * return NULL.
- */
- desk = e_desk_current_get(zone);
- if (desk)
- {
- /* need to simulate "startup" conditions to force desk show to reevaluate here */
- int s = starting;
- desk->visible = 0;
- starting = 1;
- e_desk_show(desk);
- starting = s;
- }
-#endif
ev = E_NEW(E_Event_Zone_Desk_Count_Set, 1);
if (!ev) return;
EINTERN Eina_Bool
e_zone_obstacle_add(E_Zone *zone, E_Client *ec, Eina_Rectangle *geom, Eina_Bool vertical)
{
-#ifdef CONTAINER_POLICY
-#else
- E_Zone_Obstacle *obs;
- Eina_List *l;
-#endif
-
EINA_SAFETY_ON_NULL_RETURN_VAL(zone, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(geom, EINA_FALSE);
EINA_SAFETY_ON_FALSE_RETURN_VAL(e_zone_has_ec(zone, ec), EINA_FALSE);
-#ifdef CONTAINER_POLICY
E_Zone_Data_Obstacle obstacle_data = {0,};
obstacle_data.ec = ec;
obstacle_data.geom = geom;
wl_signal_emit(&PRI(zone)->events.obstacle_add, &obstacle_data);
return !obstacle_data.result;
-#else
-
- // check in the list...
- EINA_LIST_FOREACH(zone->obstacles, l, obs)
- {
- if (obs->ec == ec)
- {
- ELOGF("E_ZONE", "Already ADDED in the obstacle list", ec);
- return EINA_TRUE;
- }
- }
-
- obs = E_NEW(E_Zone_Obstacle, 1);
- if (!obs) return EINA_FALSE;
- obs->ec = ec;
- obs->x = geom->x;
- obs->y = geom->y;
- obs->w = geom->w;
- obs->h = geom->h;
- obs->vertical = !!vertical;
-
- ELOGF("E_ZONE", "ADD obstacle... geo(%d,%d,%dx%d), vertical:%d", ec, obs->x, obs->y, obs->w, obs->h, obs->vertical);
-
- zone->obstacles = eina_list_append(zone->obstacles, obs);
-
- e_zone_useful_geometry_dirty(zone);
- return EINA_TRUE;
-#endif
}
EINTERN Eina_Bool
e_zone_obstacle_update(E_Zone *zone, E_Client *ec, Eina_Rectangle *geom, Eina_Bool vertical)
{
-#ifdef CONTAINER_POLICY
-#else
- E_Zone_Obstacle *obs;
- Eina_List *l;
- Eina_Bool changed = EINA_FALSE;
-#endif
-
if (!zone) return EINA_FALSE;
if (!ec) return EINA_FALSE;
if (!e_zone_has_ec(zone, ec)) return EINA_FALSE;
-#ifdef CONTAINER_POLICY
E_Zone_Data_Obstacle obstacle_data = {0,};
obstacle_data.ec = ec;
obstacle_data.geom = geom;
wl_signal_emit(&PRI(zone)->events.obstacle_update, &obstacle_data);
return !obstacle_data.result;
-#else
- EINA_LIST_FOREACH(zone->obstacles, l, obs)
- {
- if (obs->ec == ec)
- break;
- }
-
- if (!obs)
- {
- ELOGF("E_ZONE", "Not found in the obstacle list", ec);
- return EINA_FALSE;
- }
-
- if (geom)
- {
- if ((obs->x != geom->x) ||
- (obs->y != geom->y) ||
- (obs->w != geom->w) ||
- (obs->h != geom->h))
- {
- obs->x = geom->x;
- obs->y = geom->y;
- obs->w = geom->w;
- obs->h = geom->h;
- changed = EINA_TRUE;
- }
- }
-
- if (obs->vertical != vertical)
- {
- obs->vertical = !!vertical;
- changed = EINA_TRUE;
- }
-
- ELOGF("E_ZONE", "UPDATE obstacle... geo(%d,%d,%dx%d), vertical:%d", ec, obs->x, obs->y, obs->w, obs->h, obs->vertical);
-
- if (changed)
- e_zone_useful_geometry_dirty(zone);
-
- return EINA_TRUE;
-#endif
}
EINTERN void
e_zone_obstacle_remove(E_Zone *zone, E_Client *ec)
{
-#ifdef CONTAINER_POLICY
-#else
- E_Zone_Obstacle *obs;
- Eina_List *l, *ll;
-#endif
-
if (!zone) return;
if (!ec) return;
if (!e_zone_has_ec(zone, ec)) return;
-#ifdef CONTAINER_POLICY
E_Zone_Data_Obstacle obstacle_data = {0,};
obstacle_data.ec = ec;
wl_signal_emit(&PRI(zone)->events.obstacle_remove, &obstacle_data);
-#else
- EINA_LIST_FOREACH_SAFE(zone->obstacles, l, ll, obs)
- {
- if (obs->ec == ec)
- {
- ELOGF("E_ZONE", "REMOVE obstacle...", ec);
- zone->obstacles = eina_list_remove_list(zone->obstacles, l);
- E_FREE(obs);
- break;
- }
- }
-
- e_zone_useful_geometry_dirty(zone);
-#endif
-}
-
-#ifdef CONTAINER_POLICY
-#else
-static void
-_e_zone_useful_geometry_calc(const E_Zone *zone, E_Desk *desk, int *x, int *y, int *w, int *h)
-{
- Eina_Tiler *tiler;
- E_Zone_Obstacle *obs;
- Eina_List *l;
- int zx, zy, zw, zh;
- Eina_Iterator *it;
- Eina_Rectangle geom = { 0 } , *rect;
- int size = 0;
-
- zx = zone->x;
- zy = zone->y;
- zw = zone->w;
- zh = zone->h;
-
- if (desk)
- {
- zx = desk->geom.x;
- zy = desk->geom.y;
- zw = desk->geom.w;
- zh = desk->geom.h;
- }
-
- tiler = eina_tiler_new(zw, zh);
- eina_tiler_tile_size_set(tiler, 1, 1);
- eina_tiler_rect_add(tiler, &(Eina_Rectangle){0, 0, zw, zh});
-
- EINA_LIST_FOREACH(zone->obstacles, l, obs)
- {
- if (!E_INTERSECTS(obs->x, obs->y, obs->w, obs->h, zx, zy, zw, zh)) continue;
-
- if (obs->vertical)
- eina_tiler_rect_del(tiler, &(Eina_Rectangle){obs->x - zx, 0, obs->w, zh});
- else
- eina_tiler_rect_del(tiler, &(Eina_Rectangle){0, obs->y - zy, zw, obs->h});
- }
-
- it = eina_tiler_iterator_new(tiler);
- EINA_ITERATOR_FOREACH(it, rect)
- {
- if (rect->w * rect->h < size) continue;
- size = rect->w * rect->h;
- geom = *rect;
- }
- eina_iterator_free(it);
- eina_tiler_free(tiler);
-
- if (x) *x = geom.x + zx;
- if (y) *y = geom.y + zy;
- if (w) *w = geom.w;
- if (h) *h = geom.h;
}
-#endif
/**
* Get (or calculate) the useful (or free, without any shelves) area.
E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
E_OBJECT_CHECK(desk->zone);
-#ifdef CONTAINER_POLICY
E_Zone_Data_Useful_Geometry useful_geom_data = {0,};
useful_geom_data.desk = desk;
useful_geom_data.x = x;
useful_geom_data.h = h;
useful_geom_data.consider_obstacle_area = consider_obstacle_area;
wl_signal_emit(&PRI(zone)->events.useful_geometry_get, &useful_geom_data);
-#else
- if (desk->zone != zone)
- {
- ELOGF("E_ZONE", "CRI... Zone(%d) and Desk's zone(%d) mismatch!", NULL, zone->id, desk->zone->id);
- return;
- }
-
- if (consider_obstacle_area)
- _e_zone_useful_geometry_calc(zone, desk, x, y, w, h);
- else
- e_zone_useful_geometry_get(zone, x, y, w, h);
-#endif
}
/**
zone->display_state = state;
-#ifdef CONTAINER_POLICY
-#else
- wl_signal_emit(&PRI(zone)->events.display_state_change, NULL);
-#endif
_e_zone_hook_call(E_ZONE_HOOK_DISPLAY_STATE_CHANGE, zone);
ev = E_NEW(E_Event_Zone_Display_State_Change, 1);
static void
_e_zone_free(E_Zone *zone)
{
-#ifdef CONTAINER_POLICY
-#else
- int x, y;
- E_Zone_Obstacle *obs;
-#endif
E_Comp *comp;
wl_signal_emit(&PRI(zone)->events.destroy, NULL);
E_FREE_FUNC(zone->cur_mouse_action, e_object_unref);
-#ifdef CONTAINER_POLICY
-#else
- /* remove handlers */
- E_FREE_LIST(zone->handlers, ecore_event_handler_del);
-#endif
-
if (zone->name) eina_stringshare_del(zone->name);
comp = e_comp_get();
e_view_destroy(zone->base);
e_view_destroy(zone->over);
-#ifdef CONTAINER_POLICY
-#else
- /* free desks */
- for (x = 0; x < zone->desk_x_count; x++)
- {
- for (y = 0; y < zone->desk_y_count; y++)
- e_object_del(E_OBJECT(zone->desks[x + (y * zone->desk_x_count)]));
- }
- EINA_LIST_FREE(zone->obstacles, obs)
- {
- E_FREE(obs);
- }
- free(zone->desks);
- free(zone->output_id);
-#endif
-
_e_zone_private_finish(zone);
free(zone);
}
E_Zone *zone;
zone = data;
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(zone)->events.bg_mouse_down, event_info);
-#else
- if (e_comp_util_mouse_grabbed()) return;
-
- if (!zone->cur_mouse_action)
- {
- zone->cur_mouse_action =
- e_bindings_mouse_down_evas_event_handle(E_BINDING_CONTEXT_ZONE,
- E_OBJECT(zone), event_info);
- if (zone->cur_mouse_action)
- {
- if ((!zone->cur_mouse_action->func.end_mouse) &&
- (!zone->cur_mouse_action->func.end))
- zone->cur_mouse_action = NULL;
- if (zone->cur_mouse_action)
- e_object_ref(E_OBJECT(zone->cur_mouse_action));
- }
- }
-#endif
}
static void
zone = data;
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(zone)->events.bg_mouse_up, event_info);
-#else
- if (zone->cur_mouse_action)
- {
- E_Binding_Event_Mouse_Button event;
-
- e_bindings_evas_event_mouse_up_button_convert(event_info, &event);
- if (zone->cur_mouse_action->func.end_mouse)
- zone->cur_mouse_action->func.end_mouse(E_OBJECT(zone), "", &event);
- else if (zone->cur_mouse_action->func.end)
- zone->cur_mouse_action->func.end(E_OBJECT(zone), "");
-
- e_object_unref(E_OBJECT(zone->cur_mouse_action));
- zone->cur_mouse_action = NULL;
- }
- else
- {
- E_Binding_Event_Mouse_Button event;
-
- e_bindings_ecore_event_mouse_button_convert(event_info, &event);
- e_bindings_mouse_up_event_handle(E_BINDING_CONTEXT_ZONE,
- E_OBJECT(zone), &event);
- }
-#endif
}
static void
free(ev);
}
-#ifdef CONTAINER_POLICY
-#else
-static void
-_e_zone_client_set(E_Zone *zone, E_Client *ec)
-{
- E_Event_Client_Zone_Set *ev;
-
- ev = E_NEW(E_Event_Client_Zone_Set, 1);
- if (!ev) return;
-
- /* if the window does not lie in the new zone, move it so that it does */
- if (!E_INTERSECTS(ec->x, ec->y, ec->w, ec->h, zone->x, zone->y, zone->w, zone->h))
- {
- int x, y;
-
- x = ec->x, y = ec->y;
-
- /* keep window from hanging off bottom and left */
- if (x + ec->w > zone->x + zone->w) x += (zone->x + zone->w) - (x + ec->w);
- if (y + ec->h > zone->y + zone->h) y += (zone->y + zone->h) - (y + ec->h);
-
- /* make sure to and left are on screen (if the window is larger than the zone, it will hang off the bottom / right) */
- if (x < zone->x) x = zone->x;
- if (y < zone->y) y = zone->y;
-
- if (!E_INTERSECTS(x, y, ec->w, ec->h, zone->x, zone->y, zone->w, zone->h))
- {
- /* still not in zone at all, so just move it to closest edge */
- if (x < zone->x) x = zone->x;
- if (x >= zone->x + zone->w) x = zone->x + zone->w - ec->w;
- if (y < zone->y) y = zone->y;
- if (y >= zone->y + zone->h) y = zone->y + zone->h - ec->h;
- }
- e_view_position_set(e_view_client_view_get(e_client_view_get(ec)), x, y);
- }
-
- ec->zone = zone; // FIXME: This line must be deleted.
-
- ev->ec = ec;
- REFD(ec, 5);
- e_object_ref(E_OBJECT(ec));
- ev->zone = zone;
- e_object_ref(E_OBJECT(zone));
-
- ecore_event_add(E_EVENT_CLIENT_ZONE_SET, ev, (Ecore_End_Cb)_e_client_event_zone_set_free, NULL);
-}
-#endif
-
EINTERN void
e_zone_client_add(E_Zone *zone, E_Client *ec)
{
-#ifdef CONTAINER_POLICY
-#else
- E_Desk *desk;
- E_Zone_Private_Client *zone_client;
-#endif
-
EINA_SAFETY_ON_NULL_RETURN(zone);
EINA_SAFETY_ON_NULL_RETURN(ec);
if (e_zone_has_ec(zone, ec)) return;
ELOGF("ZONE", "CLIENT ADD", ec);
-#ifdef CONTAINER_POLICY
wl_signal_emit(&PRI(zone)->events.client_add, ec);
-#else
- zone_client = E_NEW(E_Zone_Private_Client, 1);
- EINA_SAFETY_ON_NULL_RETURN(zone_client);
-
- zone_client->zone = zone;
- zone_client->ec = ec;
-
- // e_client listeners
- zone_client->client_destroy.notify = _zone_cb_client_destroy;
- e_client_destroy_listener_add(ec, &zone_client->client_destroy);
-
- zone_client->client_eval_post_new_client.notify = _zone_cb_client_eval_post_new_client;
- e_client_eval_post_new_client_listener_add(ec, &zone_client->client_eval_post_new_client);
-
- zone_client->client_focus_set.notify = _zone_cb_client_focus_set;
- e_client_focus_set_listener_add(ec, &zone_client->client_focus_set);
-
- _e_zone_client_set(zone, ec);
- _e_zone_client_data_set(zone, ec);
-
- wl_signal_emit(&PRI(zone)->events.client_add, ec);
-
- // Currently, ec is set to the current desk now.
- // At this moment, ec should not belong to any desk
- desk = e_desk_current_get(zone);
- e_desk_client_add(desk, ec);
-
- if (ec->override)
- e_client_layer_set(ec, E_LAYER_CLIENT_ABOVE);
- else
- e_client_layer_set(ec, E_LAYER_CLIENT_NORMAL);
-
- e_client_res_change_geometry_save(ec);
- e_client_res_change_geometry_restore(ec);
- ec->pre_res_change.valid = 0;
-#endif
}
EINTERN Eina_Bool
return ret;
}
-#ifdef CONTAINER_POLICY
-#else
-
-#ifdef EC_IS_NOT_VISIBLE
-# undef EC_IS_NOT_VISIBLE
-#endif
-
-#define EC_IS_NOT_VISIBLE if (e_client_visibility_get(ec) != E_VISIBILITY_UNOBSCURED)
-
-EINTERN Eina_Bool
-e_zone_visibility_calculate(E_Zone *zone)
-{
- E_Client *ec;
-
- Eina_Tiler *t;
- Eina_Rectangle r, *_r;
- Eina_Iterator *it;
- Eina_Bool canvas_vis = EINA_TRUE;
- Eina_Bool ec_vis, ec_opaque, calc_region;
- Eina_Bool skip_rot_pending_show = EINA_FALSE;
- int skip_by_pending_show = 0;
- Eina_Bool is_above_show_pending = EINA_FALSE;
- Eina_Bool is_launching_effect = EINA_FALSE;
- Eina_Bool is_vis_on_skip = EINA_FALSE;
-
- int x = 0, y = 0, w = 0, h = 0;
- const int edge = 1;
- E_Comp_Wl_Client_Data *cdata;
- Eina_List *changed_list = NULL;
- Eina_List *l = NULL;
- Eina_Bool effect_running = EINA_FALSE;
- Eina_Bool ec_frame_visible = EINA_FALSE;
- int calc_skip_type = 0;
-
- Eina_Bool touched_win_changed = EINA_FALSE;
- E_Client *touched_ec;
-
- Eina_Bool iconified_by_client = EINA_FALSE;
- Eina_Bool e_visibility_changed = EINA_FALSE;
-
- if (!e_config->calc_vis_without_effect)
- {
- E_Comp *comp = e_comp_get();
-
- if (comp->animating) return EINA_FALSE;
- }
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(zone, EINA_FALSE);
-
- TRACE_DS_BEGIN(CLIENT:VISIBILITY CALCULATE);
-
- t = eina_tiler_new(zone->w + zone->x + edge, zone->h + zone->y + edge);
- eina_tiler_tile_size_set(t, 1, 1);
-
- if (e_zone_is_displaying(zone))
- {
- EINA_RECTANGLE_SET(&r, zone->x, zone->y, zone->w, zone->h);
- eina_tiler_rect_add(t, &r);
- }
- else
- {
- canvas_vis = EINA_FALSE;
- }
-
- E_CLIENT_REVERSE_FOREACH(ec)
- {
- calc_skip_type = 0;
- if (e_object_is_del(E_OBJECT(ec))) continue;
- if (e_client_util_ignored_get(ec)) continue;
- if (!e_zone_has_ec(zone, ec)) continue;
- if (!e_client_view_get(ec)) continue;
- if (ec->visibility.skip) continue;
- if (ec->is_cursor) continue;
- cdata = e_client_cdata_get(ec);
- if (e_comp_wl_subsurface_check(ec)) continue;
- if ((!ec->first_mapped) &&
- (e_comp_object_content_type_get(ec->frame) == E_COMP_OBJECT_CONTENT_TYPE_INT_IMAGE)) continue;
-
- /* TODO: need to check whether window intersects with entire screen, not zone. */
- /* if (!E_INTERSECTS(ec->x, ec->y, ec->w, ec->h, zone->x, zone->y, zone->w, zone->h)) continue; */
-
- if (!e_zone_is_displaying(zone))
- {
- if ((e_client_visibility_get(ec) == E_VISIBILITY_FULLY_OBSCURED) &&
- (ec->visibility.last_sent_type != E_VISIBILITY_FULLY_OBSCURED))
- {
- ec->visibility.changed = 1;
- }
- }
-
- if (!e_config->calc_vis_without_effect)
- {
- if ((e_view_client_is_animating(e_client_view_get(ec))) ||
- (e_view_data_get(e_view_client_view_get(e_client_view_get(ec)), "effect_running")))
- {
- effect_running = EINA_TRUE;
- if (ec->launching)
- is_launching_effect = EINA_TRUE;
- continue;
- }
- }
-
- e_client_geometry_get(ec, &x, &y, &w, &h);
- w = w + edge;
- h = h + edge;
-
- ec_vis = ec_opaque = skip_rot_pending_show = is_vis_on_skip = EINA_FALSE;
- skip_by_pending_show = 0;
- calc_region = EINA_TRUE;
- ec_frame_visible = e_view_client_visible_get(e_client_view_get(ec));
- iconified_by_client = e_client_is_iconified_by_client(ec);
-
- if (!ec->visible)
- {
- EC_IS_NOT_VISIBLE continue;
- calc_region = EINA_FALSE;
- calc_skip_type |= 0x01;
- }
- else if (!ec_frame_visible)
- {
- if (ec->e.state.rot.pending_show)
- {
- calc_region = EINA_FALSE;
- calc_skip_type |= 0x02;
- skip_rot_pending_show = EINA_TRUE;
- skip_by_pending_show = 1;
- }
- else if (ec->show_pending.count > 0)
- {
- calc_region = EINA_FALSE;
- calc_skip_type |= 0x100;
- skip_by_pending_show = 2;
- }
- else
- {
- if (cdata && !cdata->mapped)
- {
- EC_IS_NOT_VISIBLE continue;
- calc_region = EINA_FALSE;
- calc_skip_type |= 0x04;
- }
-
- if (!ec->iconic)
- {
- EC_IS_NOT_VISIBLE continue;
- calc_region = EINA_FALSE;
- calc_skip_type |= 0x08;
- }
- else
- {
- if (iconified_by_client)
- {
- EC_IS_NOT_VISIBLE continue;
-
- E_Iconified_Type iconified_type;
- iconified_type = e_client_iconified_type_get(ec);
- if (iconified_type == E_ICONIFIED_TYPE_ICONIFY_BY_CLIENT)
- calc_skip_type |= 0x10;
- else if (iconified_type == E_ICONIFIED_TYPE_DESK_ICONIFY_BY_CLIENT)
- calc_skip_type |= 0x20;
- else if (iconified_type == E_ICONIFIED_TYPE_PARENT_ICONIFY_BY_CLIENT)
- calc_skip_type |= 0x40;
- else
- {
- ELOGF("POL_VIS", "CRI. Check iconified_type... cur type:%d", ec, iconified_type);
- calc_skip_type |= 0x80;
- }
- calc_region = EINA_FALSE;
- }
- }
-
- if (ec->bg_state)
- {
- EC_IS_NOT_VISIBLE continue;
- calc_region = EINA_FALSE;
- calc_skip_type |= 0x200;
- }
- }
- }
-
- if (ec->visibility.ignore_geometry)
- {
- calc_region = EINA_FALSE;
- if (e_zone_is_displaying(zone) && ec_frame_visible)
- ec_vis = EINA_TRUE;
- }
-
- if (canvas_vis)
- {
- if (calc_region &&
- (!ec->visibility.force_obscured) &&
- (!ec->iconic || (ec->iconic && (!iconified_by_client))))
- {
- it = eina_tiler_iterator_new(t);
- EINA_ITERATOR_FOREACH(it, _r)
- {
- if (E_INTERSECTS(x, y, w, h,
- _r->x, _r->y, _r->w, _r->h))
- {
- ec_vis = EINA_TRUE;
- break;
- }
- }
- eina_iterator_free(it);
- }
- }
-
- if (ec_vis)
- {
- /* unobscured case */
- EC_IS_NOT_VISIBLE
- {
- if ((!is_above_show_pending) &&
- ((!effect_running) ||
- ((effect_running) && (!is_launching_effect))))
- {
- /* previous state is obscured: -1 or 1 */
- e_client_visibility_set(ec, E_VISIBILITY_UNOBSCURED);
- ec->visibility.changed = 1;
- ELOGF("POL_VIS", "CLIENT VIS ON. argb:%d, opaque:%2d, frame_v:%d, ignore_geometry:%d, cdata:%p, geo(%d,%d,%dx%d), asp:%d, er:%d, le:%d", ec, ec->argb, ec->visibility.opaque, ec_frame_visible, ec->visibility.ignore_geometry, cdata, x, y, w, h, is_above_show_pending, effect_running, is_launching_effect);
- }
- else
- {
- if (!is_above_show_pending)
- is_vis_on_skip = EINA_TRUE;
- ELOGF("POL_VIS", "CLIENT VIS ON-SKIP. argb:%d, opaque:%2d, frame_v:%d, ignore_geometry:%d, cdata:%p, geo(%d,%d,%dx%d), asp:%d, er:%d, le:%d", ec, ec->argb, ec->visibility.opaque, ec_frame_visible, ec->visibility.ignore_geometry, cdata, x, y, w, h, is_above_show_pending, effect_running, is_launching_effect);
- }
- }
-
- /* subtract window region from canvas region */
- if (canvas_vis && !skip_by_pending_show && !is_vis_on_skip)
- {
- /* check alpha window is opaque or not. */
- if ((ec->visibility.opaque == E_ALPHA_OPAQUE_SET) && (ec->argb))
- ec_opaque = EINA_TRUE;
-
- /* if e_client is not alpha or opaque then delete intersect rect */
- if (((!ec->argb) || (ec_opaque)) &&
- (!ec->floating))
- {
- EINA_RECTANGLE_SET(&r,
- x,
- y,
- w,
- h);
- eina_tiler_rect_del(t, &r);
-
- if (eina_tiler_empty(t))
- canvas_vis = EINA_FALSE;
- }
- }
- }
- else
- {
- /* It prevents unwanted iconification of the top visible window
- * while showing an window with rotation mode.
- * However, with rotation mode, iconification is done if client
- * is iconified by itself.
- */
- if ((!skip_by_pending_show) ||
- (ec->visibility.force_obscured) ||
- (ec->bg_state) ||
- (iconified_by_client))
- {
- /* obscured case */
- if (e_client_visibility_get(ec) != E_VISIBILITY_FULLY_OBSCURED)
- {
- /* previous state is unobscured: -1 or 0 */
- e_client_visibility_set(ec, E_VISIBILITY_FULLY_OBSCURED);
- ec->visibility.changed = 1;
- ELOGF("POL_VIS", "CLIENT VIS OFF. argb:%d, opaque:%2d, frame_v:%d, canvas_v:%d, calc_r:%d(%d), ignore_geometry:%d, show_p:%d, geo(%d,%d,%dx%d)",
- ec, ec->argb, ec->visibility.opaque,
- ec_frame_visible, canvas_vis, calc_region, calc_skip_type, ec->visibility.ignore_geometry, skip_by_pending_show, x, y, w, h);
- }
- }
- }
-
- if (!is_vis_on_skip &&
- (!skip_rot_pending_show || ec->visibility.changed))
- changed_list = eina_list_append(changed_list, ec);
-
- if (skip_rot_pending_show)
- {
- if (ec->e.state.rot.pending_show && !ec->argb)
- is_above_show_pending = EINA_TRUE;
- ELOGF("POL_VIS", "Rotation pending show. srps:%d, rps:%d, argb:%d, asp:%d", ec, skip_rot_pending_show, ec->e.state.rot.pending_show, ec->argb, is_above_show_pending);
- }
- }
-
- if (changed_list)
- {
- E_Comp_Wl_Data *comp_wl = e_comp_wl_get();
- touched_ec = comp_wl->ptr.ec ? comp_wl->ptr.ec : comp_wl->touch.faked_ec;
- EINA_LIST_FOREACH(changed_list, l, ec)
- {
- e_client_visibility_change_notify(ec);
-
- if (ec == touched_ec)
- touched_win_changed = EINA_TRUE;
-
- if (e_client_visibility_get(ec) == E_VISIBILITY_UNOBSCURED)
- {
- if (comp_wl->touch.pressed && !touched_win_changed && !e_policy_client_is_keyboard_sub(ec))
- {
- if (e_client_visibility_touched_check(ec))
- {
- touched_win_changed = EINA_TRUE;
- e_comp_wl_touch_cancel();
- }
- }
- }
-
- if (ec->visibility.changed)
- {
- ec->visibility.changed = 0;
- e_visibility_changed = EINA_TRUE;
- }
- }
-
- changed_list = eina_list_free(changed_list);
- }
- eina_tiler_free(t);
-
- // FIXME: need to notify a hook call for zone, not for client
- e_client_visibility_end_notify();
-
- TRACE_DS_END();
-
- return e_visibility_changed;
-}
-#endif
-
E_API E_Desk *
e_zone_desk_find_by_ec(E_Zone *zone, E_Client *ec)
{
return NULL;
}
-#ifdef CONTAINER_POLICY
-#else
-EINTERN void
-e_zone_focus_clear(E_Zone *zone)
-{
- EINA_SAFETY_ON_NULL_RETURN(zone);
-
- wl_signal_emit(&PRI(zone)->events.focus_clear, NULL);
-}
-
-EINTERN void
-e_zone_focus_reset(E_Zone *zone)
-{
- EINA_SAFETY_ON_NULL_RETURN(zone);
-
- wl_signal_emit(&PRI(zone)->events.focus_reset, NULL);
-}
-#endif
-
EINTERN void
e_zone_client_set_event_emit(E_Zone *zone, E_Client *ec)
{
wl_signal_add(&priv->events.destroy, listener);
}
-#ifdef CONTAINER_POLICY
EINTERN void
e_zone_zone_new_listener_add(E_Zone *zone, struct wl_listener *listener)
{
API_ENTRY;
wl_signal_add(&priv->events.bg_mouse_up, listener);
}
-#endif
EINTERN void
e_zone_client_add_listener_add(E_Zone *zone, struct wl_listener *listener)
wl_signal_add(&priv->events.client_add, listener);
}
-#ifdef CONTAINER_POLICY
-#else
-EINTERN void
-e_zone_client_remove_listener_add(E_Zone *zone, struct wl_listener *listener)
-{
- API_ENTRY;
- wl_signal_add(&priv->events.client_remove, listener);
-}
-
-EINTERN void
-e_zone_display_state_change_listener_add(E_Zone *zone, struct wl_listener *listener)
-{
- API_ENTRY;
- wl_signal_add(&priv->events.display_state_change, listener);
-}
-
-EINTERN void
-e_zone_focus_clear_listener_add(E_Zone *zone, struct wl_listener *listener)
-{
- API_ENTRY;
- wl_signal_add(&priv->events.focus_clear, listener);
-}
-
-EINTERN void
-e_zone_focus_reset_listener_add(E_Zone *zone, struct wl_listener *listener)
-{
- API_ENTRY;
- wl_signal_add(&priv->events.focus_reset, listener);
-}
-#endif
-
-
-
-#ifdef CONTAINER_POLICY
EINTERN void
e_desk_row_add(E_Zone *zone)
{
API_ENTRY;
wl_signal_add(&priv->events.desk_count, listener);
}
-
-#endif
\ No newline at end of file
extern EINTERN int E_EVENT_ZONE_DISPLAY_STATE_CHANGE;
extern EINTERN int E_EVENT_ZONE_USEFUL_GEOMETRY_CHANGE;
-#ifdef CONTAINER_POLICY
typedef struct _E_Zone_Data_Move_Resize
{
int dx, dy, dw, dh;
int *x, *y, *w, *h;
Eina_Bool consider_obstacle_area;
} E_Zone_Data_Useful_Geometry;
-#endif
-#ifdef CONTAINER_POLICY
typedef struct _E_Zone_Data_Desk_Get
{
E_Zone *zone;
unsigned int count;
} E_Zone_Data_Desk_Count;
-#endif
EINTERN int e_zone_init(void);
EINTERN int e_zone_shutdown(void);
EINTERN void e_zone_client_add(E_Zone *zone, E_Client *ec);
EINTERN Eina_Bool e_zone_has_ec(E_Zone *zone, E_Client *ec);
EINTERN Eina_Bool e_zone_is_displaying(E_Zone *zone);
-#ifdef CONTAINER_POLICY
-#else
-EINTERN Eina_Bool e_zone_visibility_calculate(E_Zone *zone);
-#endif
EINTERN void e_zone_desk_count_set(E_Zone *zone, int x_count, int y_count);
EINTERN void e_zone_desk_count_get(E_Zone *zone, int *x_count, int *y_count);
EINTERN Eina_Bool e_zone_obstacle_update(E_Zone *zone, E_Client *ec, Eina_Rectangle *geom, Eina_Bool vertical);
EINTERN void e_zone_obstacle_remove(E_Zone *zone, E_Client *ec);
-#ifdef CONTAINER_POLICY
-#else
-EINTERN void e_zone_focus_clear(E_Zone *zone);
-EINTERN void e_zone_focus_reset(E_Zone *zone);
-#endif
-#ifdef CONTAINER_POLICY
EINTERN void e_zone_client_set_event_emit(E_Zone *zone, E_Client *ec);
-#endif
// listeners
EINTERN void e_zone_destroy_listener_add(E_Zone *zone, struct wl_listener *listener);
-#ifdef CONTAINER_POLICY
EINTERN void e_zone_move_listener_add(E_Zone *zone, struct wl_listener *listener);
EINTERN void e_zone_resize_listener_add(E_Zone *zone, struct wl_listener *listener);
EINTERN void e_zone_move_resize_listener_add(E_Zone *zone, struct wl_listener *listener);
EINTERN void e_zone_useful_geometry_get_listener_add(E_Zone *zone, struct wl_listener *listener);
EINTERN void e_zone_bg_mouse_down_listener_add(E_Zone *zone, struct wl_listener *listener);
EINTERN void e_zone_bg_mouse_up_listener_add(E_Zone *zone, struct wl_listener *listener);
-#endif
EINTERN void e_zone_client_add_listener_add(E_Zone *zone, struct wl_listener *listener);
-#ifdef CONTAINER_POLICY
-#else
-EINTERN void e_zone_client_remove_listener_add(E_Zone *zone, struct wl_listener *listener);
-EINTERN void e_zone_display_state_change_listener_add(E_Zone *zone, struct wl_listener *listener);
-EINTERN void e_zone_focus_clear_listener_add(E_Zone *zone, struct wl_listener *listener);
-EINTERN void e_zone_focus_reset_listener_add(E_Zone *zone, struct wl_listener *listener);
-#endif
-
-#ifdef CONTAINER_POLICY
EINTERN void e_desk_row_add(E_Zone *zone);
EINTERN void e_desk_row_remove(E_Zone *zone);
EINTERN void e_desk_col_add(E_Zone *zone);
EINTERN void e_zone_desk_next_listener_add(E_Zone *zone, struct wl_listener *listener);
EINTERN void e_zone_desk_prev_listener_add(E_Zone *zone, struct wl_listener *listener);
EINTERN void e_zone_desk_count_listener_add(E_Zone *zone, struct wl_listener *listener);
-#endif
#endif
#include <dlfcn.h>
#include <mcheck.h>
-#ifdef CONTAINER_POLICY
#include "e_comp_canvas_intern.h"
-#endif
#define EDJE_EDIT_IS_UNSTABLE_AND_I_KNOW_ABOUT_IT
#include <Edje_Edit.h>
if (zone && zone->focus)
{
e_focus_del(zone->focus);
-#ifdef CONTAINER_POLICY
zone->focus = e_focus_new(e_comp_canvas_policy_zone_get(zone), res);
-#else
- zone->focus = e_focus_new(zone, res);
-#endif
if (!zone->focus)
ERR("Failed to create E_Focus.");
}
#include "e_focus_intern.h"
#include "e_focus_policy_iface.h"
-#ifdef CONTAINER_POLICY
#include "e_policy_zone_intern.h"
-#endif
struct _E_Focus {
E_Focus_Policy_Ext policy_type; // the focus policy type
E_Focus_Policy_Iface *policy_iface; // the focus policy iface
};
-#ifdef CONTAINER_POLICY
static E_Focus_Policy_Iface *
_e_focus_policy_iface_get(E_Policy_Zone* policy_zone, E_Focus_Policy_Ext type)
-#else
-static E_Focus_Policy_Iface *
-_e_focus_policy_iface_get(E_Zone* zone, E_Focus_Policy_Ext type)
-#endif
{
E_Focus_Policy_Iface *policy;
if (type == E_FOCUS_EXT_TOP_STACK)
{
-#ifdef CONTAINER_POLICY
policy = e_focus_policy_iface_topmost_new(policy_zone);
-#else
- policy = e_focus_policy_iface_topmost_new(zone);
-#endif
EINA_SAFETY_ON_NULL_RETURN_VAL(policy, NULL);
}
else if (type == E_FOCUS_EXT_HISTORY)
{
-#ifdef CONTAINER_POLICY
policy = e_focus_policy_iface_history_new(policy_zone);
-#else
- policy = e_focus_policy_iface_history_new(zone);
-#endif
EINA_SAFETY_ON_NULL_RETURN_VAL(policy, NULL);
}
else
return policy;
}
-#ifdef CONTAINER_POLICY
EINTERN E_Focus *
e_focus_new(E_Policy_Zone* policy_zone, E_Focus_Policy_Ext policy_type)
-#else
-EINTERN E_Focus *
-e_focus_new(E_Zone* zone, E_Focus_Policy_Ext policy_type)
-#endif
{
E_Focus *focus;
E_Focus_Policy_Iface *policy_iface;
-#ifdef CONTAINER_POLICY
EINA_SAFETY_ON_NULL_RETURN_VAL(policy_zone, NULL);
-#else
- EINA_SAFETY_ON_NULL_RETURN_VAL(zone, NULL);
-#endif
focus = E_NEW(E_Focus, 1);
EINA_SAFETY_ON_NULL_RETURN_VAL(focus, NULL);
-#ifdef CONTAINER_POLICY
policy_iface = _e_focus_policy_iface_get(policy_zone, policy_type);
-#else
- policy_iface = _e_focus_policy_iface_get(zone, policy_type);
-#endif
if (!policy_iface)
{
ERR("Fail to get the E_Focus_Policy_Iface type: %d", policy_type);
focus->policy_type = policy_type;
focus->policy_iface = policy_iface;
-#ifdef CONTAINER_POLICY
ELOGF("FOCUS", "Create E_Focus(%d) for policy_zone:%p", NULL, policy_type, policy_zone);
-#else
- ELOGF("FOCUS", "Create E_Focus(%d) for zone:%p", NULL, policy_type, zone);
-#endif
return focus;
}
#define E_FOCUS_INTERN_H
#include "e_intern.h"
-#ifdef CONTAINER_POLICY
#include "e_policy_zone_intern.h"
-#endif
typedef struct _E_Focus E_Focus;
-#ifdef CONTAINER_POLICY
EINTERN E_Focus *e_focus_new(E_Policy_Zone* policy_zone, E_Focus_Policy_Ext policy_type);
-#else
-EINTERN E_Focus *e_focus_new(E_Zone* zone, E_Focus_Policy_Ext policy_type);
-#endif
EINTERN void e_focus_del(E_Focus *focus);
EINTERN E_Client *e_focus_focused_ec_get(E_Focus *focus); // get the current focused ec
EINTERN Eina_Bool e_focus_update(E_Focus *focus); // update (find and set) the current focused ec
#include "e_desk_intern.h"
#include "e_config_intern.h"
#include "e_view_client_intern.h"
-
-#ifdef CONTAINER_POLICY
#include "e_policy_zone_intern.h"
#include "e_comp_canvas_intern.h"
-#endif
typedef struct _E_Focus_Policy_History_Impl E_Focus_Policy_History;
typedef struct _E_Focus_Policy_History_Client E_Focus_Policy_History_Client;
wl_signal_add(&history_policy->events.focused_ec_changed, listener);
}
-#ifdef CONTAINER_POLICY
EINTERN E_Focus_Policy_Iface *
e_focus_policy_iface_history_new(E_Policy_Zone* policy_zone)
-#else
-EINTERN E_Focus_Policy_Iface *
-e_focus_policy_iface_history_new(E_Zone* zone)
-#endif
{
E_Focus_Policy_Iface *policy_iface;
E_Focus_Policy_History *history_policy;
-
-#ifdef CONTAINER_POLICY
E_Zone *zone;
+
EINA_SAFETY_ON_NULL_RETURN_VAL(policy_zone, NULL);
zone = e_policy_zone_get_zone(policy_zone);
-#else
- EINA_SAFETY_ON_NULL_RETURN_VAL(zone, NULL);
-#endif
policy_iface = E_NEW(E_Focus_Policy_Iface, 1);
EINA_SAFETY_ON_NULL_RETURN_VAL(policy_iface, NULL);
// zone listeners
history_policy->zone_client_add.notify = _focus_policy_history_cb_zone_client_add;
e_zone_client_add_listener_add(zone, &history_policy->zone_client_add);
-#ifdef CONTAINER_POLICY
history_policy->policy_zone_client_add.notify = _focus_policy_history_cb_policy_zone_client_add;
e_policy_zone_client_add_listener_add(policy_zone, &history_policy->policy_zone_client_add);
history_policy->zone_client_remove.notify = _focus_policy_history_cb_zone_client_remove;
e_policy_zone_focus_clear_listener_add(policy_zone, &history_policy->zone_focus_clear);
history_policy->zone_focus_reset.notify = _focus_policy_history_cb_zone_focus_reset;
e_policy_zone_focus_reset_listener_add(policy_zone, &history_policy->zone_focus_reset);
-#else
- history_policy->zone_client_remove.notify = _focus_policy_history_cb_zone_client_remove;
- e_zone_client_remove_listener_add(zone, &history_policy->zone_client_remove);
- history_policy->zone_focus_clear.notify = _focus_policy_history_cb_zone_focus_clear;
- e_zone_focus_clear_listener_add(zone, &history_policy->zone_focus_clear);
- history_policy->zone_focus_reset.notify = _focus_policy_history_cb_zone_focus_reset;
- e_zone_focus_reset_listener_add(zone, &history_policy->zone_focus_reset);
-#endif
return policy_iface;
#define E_FOCUS_POLICY_IFACE_H
#include "e_intern.h"
-#ifdef CONTAINER_POLICY
#include "e_policy_zone_intern.h"
-#endif
typedef struct _E_Focus_Policy_Iface E_Focus_Policy_Iface;
typedef void E_Focus_Policy_Impl;
};
-#ifdef CONTAINER_POLICY
EINTERN E_Focus_Policy_Iface *e_focus_policy_iface_topmost_new(E_Policy_Zone* policy_zone);
EINTERN E_Focus_Policy_Iface *e_focus_policy_iface_history_new(E_Policy_Zone* policy_zone);
-#else
-EINTERN E_Focus_Policy_Iface *e_focus_policy_iface_topmost_new(E_Zone* zone);
-EINTERN E_Focus_Policy_Iface *e_focus_policy_iface_history_new(E_Zone* zone);
-#endif
EINTERN void e_focus_policy_iface_del(E_Focus_Policy_Iface *policy_iface);
wl_signal_add(&topmost_policy->events.focused_ec_changed, listener);
}
-#ifdef CONTAINER_POLICY
EINTERN E_Focus_Policy_Iface *
e_focus_policy_iface_topmost_new(E_Policy_Zone* policy_zone)
-#else
-EINTERN E_Focus_Policy_Iface *
-e_focus_policy_iface_topmost_new(E_Zone* zone)
-#endif
{
E_Focus_Policy_Iface *policy_iface;
E_Focus_Policy_Topmost *topmost_policy;
-#ifdef CONTAINER_POLICY
E_Zone *zone;
EINA_SAFETY_ON_NULL_RETURN_VAL(policy_zone, NULL);
zone = e_policy_zone_get_zone(policy_zone);
-#else
- EINA_SAFETY_ON_NULL_RETURN_VAL(zone, NULL);
-#endif
policy_iface = E_NEW(E_Focus_Policy_Iface, 1);
EINA_SAFETY_ON_NULL_RETURN_VAL(policy_iface, NULL);
policy_iface->focused_ec_changed_listener_add = _focus_policy_topmost_focused_ec_changed_listener_add;
// zone listeners
-#ifdef CONTAINER_POLICY
topmost_policy->zone_client_add.notify = _focus_policy_topmost_cb_zone_client_add;
e_policy_zone_client_add_listener_add(policy_zone, &topmost_policy->zone_client_add);
topmost_policy->zone_client_remove.notify = _focus_policy_topmost_cb_zone_client_remove;
e_policy_zone_client_remove_listener_add(policy_zone, &topmost_policy->zone_client_remove);
topmost_policy->zone_focus_clear.notify = _focus_policy_topmost_cb_zone_focus_clear;
e_policy_zone_focus_clear_listener_add(policy_zone, &topmost_policy->zone_focus_clear);
-#else
- topmost_policy->zone_client_remove.notify = _focus_policy_topmost_cb_zone_client_remove;
- e_zone_client_remove_listener_add(zone, &topmost_policy->zone_client_remove);
- topmost_policy->zone_focus_clear.notify = _focus_policy_topmost_cb_zone_focus_clear;
- e_zone_focus_clear_listener_add(zone, &topmost_policy->zone_focus_clear);
-#endif
return policy_iface;
#include "e_policy_softkey_intern.h"
#include "e_policy_stack_intern.h"
#include "e_compositor_intern.h"
-
-#ifdef CONTAINER_POLICY
#include "e_policy_desk_intern.h"
-#endif
E_Policy *e_policy = NULL;
-#ifdef CONTAINER_POLICY
-#else
-Eina_Hash *hash_policy_desks = NULL;
-#endif
Eina_Hash *hash_policy_clients = NULL;
E_Policy_System_Info e_policy_system_info =
{
static void _e_policy_cb_hook_pixmap_del(void *data EINA_UNUSED, E_Pixmap *cp);
static void _e_policy_cb_hook_pixmap_unusable(void *data EINA_UNUSED, E_Pixmap *cp);
-#ifdef CONTAINER_POLICY
-#else
-static void _e_policy_cb_desk_data_free(void *data);
-#endif
static void _e_policy_cb_client_data_free(void *data);
static Eina_Bool _e_policy_cb_zone_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event);
static Eina_Bool _e_policy_cb_zone_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event);
if (ec->internal) goto delete_hook;
if (ec->new_client) goto delete_hook;
-#ifdef CONTAINER_POLICY
pd = e_policy_desk_get(desk);
-#else
- pd = eina_hash_find(hash_policy_desks, &desk);
-#endif
if (pd)
_e_policy_client_maximize_policy_apply(pc);
else
pc->flt_policy_state = EINA_FALSE;
}
-#ifdef CONTAINER_POLICY
EINTERN E_Config_Policy_Desk *
-#else
-E_Config_Policy_Desk *
-#endif
_e_policy_desk_get_by_num(unsigned int zone_num, int x, int y)
{
Eina_List *l;
if (!_e_policy_client_normal_check(ec)) return;
-#ifdef CONTAINER_POLICY
pd = e_policy_desk_get(desk);
-#else
- pd = eina_hash_find(hash_policy_desks, &desk);
-#endif
if (!pd) return;
pc = eina_hash_find(hash_policy_clients, &ec);
e_policy_client_unmap(ec);
}
-#ifdef CONTAINER_POLICY
-#else
-static void
-_e_policy_cb_desk_data_free(void *data)
-{
- free(data);
-}
-#endif
-
static void
_e_policy_cb_client_data_free(void *data)
{
n = zone->desk_y_count * zone->desk_x_count;
for (i = 0; i < n; i++)
{
-#ifdef CONTAINER_POLICY
pd = e_policy_desk_get(zone->desks[i]);
-#else
- pd = eina_hash_find(hash_policy_desks, &zone->desks[i]);
-#endif
if (pd) e_policy_desk_del(pd);
}
E_Event_Zone_Desk_Count_Set *ev;
E_Zone *zone;
E_Desk *desk;
-#ifdef CONTAINER_POLICY
-#else
- Eina_Iterator *it;
- Eina_Bool found;
-#endif
E_Policy_Desk *pd;
E_Config_Policy_Desk *d;
int i, n;
zone = ev->zone;
/* remove deleted desk from hash */
-#ifdef CONTAINER_POLICY
n = zone->desk_y_count * zone->desk_x_count;
for (i = 0; i < n; i++)
{
break;
}
}
-#else
- it = eina_hash_iterator_data_new(hash_policy_desks);
- while (eina_iterator_next(it, (void **)&pd))
- {
- if (pd->zone != zone) continue;
-
- found = EINA_FALSE;
- n = zone->desk_y_count * zone->desk_x_count;
- for (i = 0; i < n; i++)
- {
- if (pd->desk == zone->desks[i])
- {
- found = EINA_TRUE;
- break;
- }
- }
- if (!found)
- desks_del = eina_list_append(desks_del, pd->desk);
- }
- eina_iterator_free(it);
-#endif
EINA_LIST_FREE(desks_del, desk)
{
-#ifdef CONTAINER_POLICY
pd = e_policy_desk_get(desk);
-#else
- pd = eina_hash_find(hash_policy_desks, &desk);
-#endif
if (pd) e_policy_desk_del(pd);
}
softkey = e_policy_softkey_get(ev->desk->zone);
if (!softkey)
softkey = e_policy_softkey_add(ev->desk->zone);
-#ifdef CONTAINER_POLICY
if (e_policy_desk_get(ev->desk))
-#else
- if (eina_hash_find(hash_policy_desks, &ev->desk))
-#endif
e_policy_softkey_show(softkey);
else
e_policy_softkey_hide(softkey);
return ECORE_CALLBACK_RENEW;
}
-#ifdef CONTAINER_POLICY
-#else
-EINTERN void
-e_policy_desk_add(E_Desk *desk)
-{
- E_Policy_Desk *pd;
- E_Client *ec;
- E_Policy_Client *pc;
-
- pd = eina_hash_find(hash_policy_desks, &desk);
- if (pd) return;
-
- pd = E_NEW(E_Policy_Desk, 1);
- if (!pd) return;
-
- pd->desk = desk;
- pd->zone = desk->zone;
-
- eina_hash_add(hash_policy_desks, &desk, pd);
-
- /* add clients */
- E_CLIENT_FOREACH(ec)
- {
- if (e_desk_has_ec(pd->desk, ec))
- {
- pc = eina_hash_find(hash_policy_clients, &ec);
- _e_policy_client_maximize_policy_apply(pc);
- }
- }
-}
-
-EINTERN void
-e_policy_desk_del(E_Policy_Desk *pd)
-{
- Eina_Iterator *it;
- E_Policy_Client *pc;
- E_Client *ec;
- Eina_List *clients_del = NULL;
- E_Policy_Softkey *softkey;
-
- /* hide and delete softkey */
- if (e_config->use_softkey)
- {
- softkey = e_policy_softkey_get(pd->zone);
- if (e_desk_current_get(pd->zone) == pd->desk)
- e_policy_softkey_hide(softkey);
- }
-
- /* remove clients */
- it = eina_hash_iterator_data_new(hash_policy_clients);
- while (eina_iterator_next(it, (void **)&pc))
- {
- if (e_desk_has_ec(pd->desk, pc->ec))
- clients_del = eina_list_append(clients_del, pc->ec);
- }
- eina_iterator_free(it);
-
- EINA_LIST_FREE(clients_del, ec)
- {
- pc = eina_hash_find(hash_policy_clients, &ec);
- _e_policy_client_maximize_policy_cancel(pc);
- }
-
- eina_hash_del_by_key(hash_policy_desks, &pd->desk);
-}
-#endif
-
EINTERN E_Policy_Client *
e_policy_client_launcher_get(E_Zone *zone)
{
desk = e_zone_desk_find_by_ec(pc->zone, ec);
EINA_SAFETY_ON_NULL_RETURN_VAL(desk, EINA_FALSE);
-#ifdef CONTAINER_POLICY
pd = e_policy_desk_get(desk);
-#else
- pd = eina_hash_find(hash_policy_desks, &desk);
-#endif
if (!pd) return EINA_FALSE;
if (pc->flt_policy_state)
return _e_policy_client_maximize_policy_apply(pc);
}
-#ifdef CONTAINER_POLICY
EINTERN Eina_Bool
e_policy_client_maximize_policy_apply(E_Policy_Client *pc)
{
_e_policy_client_maximize_policy_cancel(pc);
}
-#endif
EINTERN void
e_policy_keyboard_layout_apply(E_Client *ec EINA_UNUSED)
return pc;
}
-#ifdef CONTAINER_POLICY
EINTERN E_Policy_Client *
e_policy_client_get(E_Client *ec)
{
if (pc) return pc;
return NULL;
}
-#endif
EINTERN int
e_policy_init(void)
{
E_Policy *pol;
-#ifdef CONTAINER_POLICY
-#else
- E_Zone *zone;
- E_Config_Policy_Desk *d;
- const Eina_List *l, *comp_zone_list;
- int i, n;
-#endif
pol = E_NEW(E_Policy, 1);
EINA_SAFETY_ON_NULL_RETURN_VAL(pol, EINA_FALSE);
e_policy = pol;
hash_policy_clients = eina_hash_pointer_new(_e_policy_cb_client_data_free);
-#ifdef CONTAINER_POLICY
-#else
- hash_policy_desks = eina_hash_pointer_new(_e_policy_cb_desk_data_free);
-#endif
E_EVENT_POLICY_QUICKPANEL_VISIBLE_STATE_CHANGE = ecore_event_type_new();
e_policy_wl_init();
e_policy_wl_aux_hint_init();
-#ifdef CONTAINER_POLICY
-#else
- comp_zone_list = e_comp_zone_list_get();
- EINA_LIST_FOREACH(comp_zone_list, l, zone)
- {
- n = zone->desk_y_count * zone->desk_x_count;
- for (i = 0; i < n; i++)
- {
- if (e_config->use_configured_desks)
- {
- d = _e_policy_desk_get_by_num(zone->num,
- zone->desks[i]->x,
- zone->desks[i]->y);
- if (d)
- e_policy_desk_add(zone->desks[i]);
- }
- else
- e_policy_desk_add(zone->desks[i]);
- }
- }
-#endif
-
E_LIST_HANDLER_APPEND(handlers, E_EVENT_ZONE_ADD, _e_policy_cb_zone_add, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_ZONE_DEL, _e_policy_cb_zone_del, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_ZONE_MOVE_RESIZE, _e_policy_cb_zone_move_resize, NULL);
E_FREE_LIST(hooks_ec, e_client_hook_del);
E_FREE_LIST(handlers, ecore_event_handler_del);
-#ifdef CONTAINER_POLICY
-#else
- E_FREE_FUNC(hash_policy_desks, eina_hash_free);
-#endif
E_FREE_FUNC(hash_policy_clients, eina_hash_free);
e_policy_stack_shutdown();
#include "e_policy_desk_intern.h"
-#ifdef CONTAINER_POLICY
#include "e_policy_intern.h"
#include "e_policy_softkey_intern.h"
#include "e_desk_area_intern.h"
sc->member_add = _e_policy_desk_smart_member_add;
sc->member_del = _e_policy_desk_smart_member_del;
}
-#if 0
-static void
-_e_policy_desk_cb_desk_new(struct wl_listener *listener, void *data)
-{
- E_Policy_Desk *pd;
- E_Zone *zone;
- E_Desk *desk;
- Eina_List *l;
- E_Config_Desktop_Name *cfname;
- char name[40];
- int ok = 0;
-
- pd = wl_container_of(listener, pd, desk_new);
- desk = data;
- zone = desk->zone;
-
- ELOGF("POL_DESK", "Desk NEW. desk:%p", NULL, desk);
-
- /* init smart object */
- _e_policy_desk_smart_init(desk);
-
- /* Get current desktop's name */
- EINA_LIST_FOREACH(e_config->desktop_names, l, cfname)
- {
- if ((cfname->zone >= 0) &&
- ((int)zone->num != cfname->zone)) continue;
- if ((cfname->desk_x != desk->x) || (cfname->desk_y != desk->y))
- continue;
- desk->name = eina_stringshare_ref(cfname->name);
- ok = 1;
- break;
- }
-
- if (!ok)
- {
- snprintf(name, sizeof(name), _(e_config->desktop_default_name), desk->x, desk->y);
- desk->name = eina_stringshare_add(name);
- }
-
- // new 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)
- {
- e_object_del(E_OBJECT(desk));
- return;
- }
-}
-#endif
static void
_e_policy_desk_cb_desk_free(struct wl_listener *listener, void *data)
E_FREE_FUNC(hash_policy_desks, eina_hash_free);
}
-#endif
-
#include "e_policy_desk_area_intern.h"
-#ifdef CONTAINER_POLICY
-
struct _E_Policy_Desk_Area
{
E_Desk_Area *desk_area;
};
-
-#endif
#include "e_intern.h"
#include "e_desk_intern.h"
-#ifdef CONTAINER_POLICY
#define E_POLICY_DESK_SMART_OBJ_TYPE "E_Desk_Smart_Object"
-#endif
typedef struct _E_Policy_Desk E_Policy_Desk;
-#ifdef CONTAINER_POLICY
EINTERN void e_policy_desk_add(E_Desk *desk);
EINTERN void e_policy_desk_del(E_Policy_Desk *pd);
EINTERN void e_policy_desk_init(void);
EINTERN void e_policy_desk_shutdown(void);
-#endif
#endif
#include "e_intern.h"
#include "e_policy.h"
-#ifdef CONTAINER_POLICY
#include "e_policy_desk_intern.h"
-#endif
typedef struct _E_Policy E_Policy;
-#ifdef CONTAINER_POLICY
-#else
-typedef struct _E_Policy_Desk E_Policy_Desk;
-#endif
typedef struct _E_Policy_Client E_Policy_Client;
typedef struct _E_Policy_System_Info E_Policy_System_Info;
Eina_Inlist *softkeys; /* softkey ui object per zone */
};
-#ifdef CONTAINER_POLICY
-#else
-struct _E_Policy_Desk
-{
- E_Desk *desk;
- E_Zone *zone;
-};
-#endif
-
struct _E_Policy_Client
{
E_Client *ec;
EINTERN void e_policy_deferred_job(void);
EINTERN void e_policy_animatable_lock(E_Client *ec, E_Policy_Animatable_Lock animatable, Eina_Bool set);
-#ifdef CONTAINER_POLICY
-#else
-EINTERN void e_policy_desk_add(E_Desk *desk);
-EINTERN void e_policy_desk_del(E_Policy_Desk *pd);
-#endif
-
EINTERN E_Policy_Client *e_policy_client_add(E_Client *ec);
-#ifdef CONTAINER_POLICY
EINTERN E_Policy_Client *e_policy_client_get(E_Client *ec);
-#endif
EINTERN Eina_Bool e_policy_client_is_conformant(E_Client *ec);
EINTERN Eina_Bool e_policy_client_is_volume_tv(E_Client *ec);
EINTERN Eina_Bool e_policy_client_is_noti(E_Client *ec);
EINTERN void e_policy_client_iconic_state_change_send(E_Client *ec, int iconic);
EINTERN void e_policy_client_unmap(E_Client *ec);
EINTERN Eina_Bool e_policy_client_maximize(E_Client *ec);
-#ifdef CONTAINER_POLICY
EINTERN Eina_Bool e_policy_client_maximize_policy_apply(E_Policy_Client *pc);
EINTERN void e_policy_client_maximize_policy_cancel(E_Policy_Client *pc);
-#endif
EINTERN E_Policy_Client *e_policy_client_launcher_get(E_Zone *zone);
EINTERN void e_policy_client_buffer_flush_cancel(E_Client *ec);
EINTERN void e_policy_interceptors_clean(void);
EINTERN Eina_Bool e_policy_interceptor_call(E_Policy_Intercept_Point ipoint, E_Client *ec, ...);
-#ifdef CONTAINER_POLICY
EINTERN E_Config_Policy_Desk *_e_policy_desk_get_by_num(unsigned int zone_num, int x, int y);
-#endif
#endif
#include "e_comp_wl_subsurface_intern.h"
#include "e_view_client_intern.h"
-#ifdef CONTAINER_POLICY
#include "e_desk_intern.h"
#include "e_comp_canvas_intern.h"
#include "e_comp_object_intern.h"
#include "e_comp_input_intern.h"
#include "e_bindings_intern.h"
#include "e_comp_intern.h"
-#endif
-#ifdef CONTAINER_POLICY
#define ZONE_EC_DATA_KEY "E_Zone_Client"
typedef struct _E_Policy_Zone_Client E_Policy_Zone_Client;
return;
}
-#endif // CONTAINER_POLICY
#include <e_client.h>
#define E_DESK_TYPE 0xE0b01005
-#ifdef CONTAINER_POLICY
-#else
-#define E_DESK_SMART_OBJ_TYPE "E_Desk_Smart_Object"
-#endif
#define E_DESK_AREA_LAYER_COUNT 9
typedef struct _E_Desk_Hook E_Desk_Hook;