struct wl_signal desk_area_active_change;
struct wl_signal desk_new;
struct wl_signal desk_free;
- struct wl_signal top_visible_get;
struct wl_signal name_set;
- struct wl_signal name_add;
- struct wl_signal name_del;
- struct wl_signal name_update;
struct wl_signal desk_show;
- struct wl_signal desk_deskshow;
struct wl_signal geometry_set;
struct wl_signal zoom_set;
struct wl_signal zoom_get;
EINTERN int E_EVENT_DESK_SHOW = 0;
EINTERN int E_EVENT_DESK_BEFORE_SHOW = 0;
EINTERN int E_EVENT_DESK_AFTER_SHOW = 0;
-EINTERN int E_EVENT_DESK_DESKSHOW = 0;
EINTERN int E_EVENT_DESK_NAME_CHANGE = 0;
E_API int E_EVENT_DESK_GEOMETRY_CHANGE = 0;
E_API int E_EVENT_DESK_ZOOM_SET = 0;
wl_signal_init(&priv->events.desk_area_active_change);
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.name_set);
- wl_signal_init(&priv->events.name_add);
- wl_signal_init(&priv->events.name_del);
- wl_signal_init(&priv->events.name_update);
wl_signal_init(&priv->events.desk_show);
- wl_signal_init(&priv->events.desk_deskshow);
wl_signal_init(&priv->events.geometry_set);
wl_signal_init(&priv->events.zoom_set);
wl_signal_init(&priv->events.zoom_get);
E_EVENT_DESK_SHOW = ecore_event_type_new();
E_EVENT_DESK_BEFORE_SHOW = ecore_event_type_new();
E_EVENT_DESK_AFTER_SHOW = ecore_event_type_new();
- E_EVENT_DESK_DESKSHOW = ecore_event_type_new();
E_EVENT_DESK_NAME_CHANGE = ecore_event_type_new();
E_EVENT_DESK_GEOMETRY_CHANGE = ecore_event_type_new();
E_EVENT_DESK_ZOOM_SET = ecore_event_type_new();
return desk;
}
-EINTERN E_Client *
-e_desk_client_top_visible_get(E_Desk *desk)
-{
- E_Desk_Data_Top_Visible_Get top_visible_data = {0,};
- top_visible_data.desk = desk;
-
- E_OBJECT_CHECK_RETURN(desk, NULL);
- E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, NULL);
-
- wl_signal_emit(&PRI(desk)->events.top_visible_get, &top_visible_data);
- return top_visible_data.visible_ec;
-}
-
EINTERN void
e_desk_name_set(E_Desk *desk, const char *name)
{
wl_signal_emit(&PRI(desk)->events.name_set, NULL);
}
-EINTERN void
-e_desk_name_add(int zone, int desk_x, int desk_y, const char *name)
-{
- E_Desk_Data_Name name_data = {0,};
- E_Zone *zone_ptr;
- E_Desk *desk;
- name_data.name = name;
- name_data.desk_x = desk_x;
- name_data.desk_y = desk_y;
-
- zone_ptr = e_zone_get_by_id(zone);
- // TODO: should we consider it as policy?
- desk = e_desk_at_xy_get(zone_ptr, desk_x, desk_y);
-
- if (!desk)
- {
- ERR("Desk at %d, %d is NULL...", desk_x, desk_y);
- return;
- }
-
- wl_signal_emit(&PRI(desk)->events.name_add, &name_data);
-}
-
-EINTERN void
-e_desk_name_del(int zone, int desk_x, int desk_y)
-{
- E_Desk_Data_Name name_data = {0,};
- E_Zone *zone_ptr;
- E_Desk *desk;
- name_data.desk_x = desk_x;
- name_data.desk_y = desk_y;
-
- zone_ptr = e_zone_get_by_id(zone);
- // TODO: should we consider it as policy?
- desk = e_desk_at_xy_get(zone_ptr, desk_x, desk_y);
-
- if (!desk)
- {
- ERR("Desk at %d, %d is NULL...", desk_x, desk_y);
- return;
- }
-
- wl_signal_emit(&PRI(desk)->events.name_del, &name_data);
-}
-
-EINTERN void
-e_desk_name_update(void)
-{
- E_Desk *desk = e_desk_current_get(e_zone_current_get());
- if (!desk) return;
-
- wl_signal_emit(&PRI(desk)->events.name_update, NULL);
-}
-
EINTERN void
e_desk_show(E_Desk *desk)
{
wl_signal_emit(&PRI(desk)->events.desk_show, NULL);
}
-EINTERN void
-e_desk_deskshow(E_Zone *zone)
-{
- E_Desk *desk;
-
- E_OBJECT_CHECK(zone);
- E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE);
-
- desk = e_desk_current_get(zone);
- EINA_SAFETY_ON_NULL_RETURN(desk);
-
- // TODO: Should we move it to zone?
- wl_signal_emit(&PRI(desk)->events.desk_show, NULL);
-}
-
-EINTERN void
-e_desk_xy_get(E_Desk *desk, int *x, int *y)
-{
- E_OBJECT_CHECK(desk);
- E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
-
- if (x) *x = desk->x;
- if (y) *y = desk->y;
-}
-
EINTERN void
e_desk_client_add(E_Desk *desk, E_Client *ec)
{
wl_signal_add(&priv->events.desk_free, listener);
}
-EINTERN void
-e_desk_top_visible_get_listener_add(E_Desk *desk, struct wl_listener *listener)
-{
- API_ENTRY;
- wl_signal_add(&priv->events.top_visible_get, listener);
-}
-
EINTERN void
e_desk_name_set_listener_add(E_Desk *desk, struct wl_listener *listener)
{
wl_signal_add(&priv->events.name_set, listener);
}
-EINTERN void
-e_desk_name_add_listener_add(E_Desk *desk, struct wl_listener *listener)
-{
- API_ENTRY;
- wl_signal_add(&priv->events.name_add, listener);
-}
-
-EINTERN void
-e_desk_name_del_listener_add(E_Desk *desk, struct wl_listener *listener)
-{
- API_ENTRY;
- wl_signal_add(&priv->events.name_del, listener);
-}
-
-EINTERN void
-e_desk_name_update_listener_add(E_Desk *desk, struct wl_listener *listener)
-{
- API_ENTRY;
- wl_signal_add(&priv->events.name_update, listener);
-}
-
EINTERN void
e_desk_desk_show_listener_add(E_Desk *desk, struct wl_listener *listener)
{
wl_signal_add(&priv->events.desk_show, listener);
}
-EINTERN void
-e_desk_desk_deskshow_listener_add(E_Desk *desk, struct wl_listener *listener)
-{
- API_ENTRY;
- wl_signal_add(&priv->events.desk_deskshow, listener);
-}
-
EINTERN void
e_desk_geometry_set_listener_add(E_Desk *desk, struct wl_listener *listener)
{
#define E_DESK_CLIENT_REVERSE_FOREACH(DESK, EC) \
for (EC = e_desk_client_top_get(DESK); EC; EC = e_desk_client_below_get(DESK, EC))
-typedef struct _E_Desk_Data_Top_Visible_Get
-{
- E_Desk *desk;
- E_Client *visible_ec;
-} E_Desk_Data_Top_Visible_Get;
-
-typedef struct _E_Desk_Data_Name
-{
- const char *name;
- int desk_x, desk_y;
-} E_Desk_Data_Name;
-
-typedef struct _E_Desk_Data_Desk_Control
-{
- E_Zone *zone;
-} E_Desk_Data_Desk_Control;
typedef struct _E_Desk_Data_Geometry
{
extern EINTERN int E_EVENT_DESK_SHOW;
extern EINTERN int E_EVENT_DESK_BEFORE_SHOW;
extern EINTERN int E_EVENT_DESK_AFTER_SHOW;
-extern EINTERN int E_EVENT_DESK_DESKSHOW;
extern EINTERN int E_EVENT_DESK_NAME_CHANGE;
EINTERN int e_desk_init(void);
EINTERN int e_desk_shutdown(void);
EINTERN E_Desk *e_desk_new(E_Zone *zone, int x, int y);
EINTERN void e_desk_name_set(E_Desk *desk, const char *name);
-EINTERN void e_desk_name_add(int zone, int desk_x, int desk_y, const char *name);
-EINTERN void e_desk_name_del(int zone, int desk_x, int desk_y);
-EINTERN void e_desk_name_update(void);
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);
-EINTERN void e_desk_xy_get(E_Desk *desk, int *x, int *y);
EINTERN Eina_Bool e_desk_has_ec(E_Desk *desk, E_Client *ec);
EINTERN void e_desk_geometry_set(E_Desk *desk, int x, int y, int w, int h);
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_name_set_listener_add(E_Desk *desk, struct wl_listener *listener);
-EINTERN void e_desk_name_add_listener_add(E_Desk *desk, struct wl_listener *listener);
-EINTERN void e_desk_name_del_listener_add(E_Desk *desk, struct wl_listener *listener);
-EINTERN void e_desk_name_update_listener_add(E_Desk *desk, struct wl_listener *listener);
EINTERN void e_desk_desk_show_listener_add(E_Desk *desk, struct wl_listener *listener);
-EINTERN void e_desk_desk_deskshow_listener_add(E_Desk *desk, struct wl_listener *listener);
EINTERN void e_desk_geometry_set_listener_add(E_Desk *desk, struct wl_listener *listener);
EINTERN void e_desk_zoom_set_listener_add(E_Desk *desk, struct wl_listener *listener);
EINTERN void e_desk_zoom_get_listener_add(E_Desk *desk, struct wl_listener *listener);
E_FREE_LIST(desk->handlers, ecore_event_handler_del);
}
-static void
-_e_policy_desk_cb_top_visible_get(struct wl_listener *listener, void *data)
-{
- E_Desk_Data_Top_Visible_Get *top_visible_data;
- E_Policy_Desk *pd;
- E_Desk *desk;
- E_Client *ec;
-
- pd = wl_container_of(listener, pd, top_visible_get);
- top_visible_data = data;
- desk = top_visible_data->desk;
-
- E_DESK_CLIENT_REVERSE_FOREACH(desk, ec)
- if (e_view_client_visible_get(e_client_view_get(ec)))
- {
- top_visible_data->visible_ec = ec;
- return;
- }
-
- top_visible_data->visible_ec = NULL;
- return;
-}
-
static void
_e_policy_desk_cb_name_set(struct wl_listener *listener, void *data)
{
_e_policy_desk_event_simple_add(desk, E_EVENT_DESK_NAME_CHANGE);
}
-static void
-_e_policy_desk_cb_name_add(struct wl_listener *listener, void *data)
-{
- E_Desk_Data_Name *name_data;
- E_Policy_Desk *pd;
- int zone;
- int desk_x, desk_y;
- const char *name;
- E_Config_Desktop_Name *cfname;
-
- pd = wl_container_of(listener, pd, name_add);
- name_data = data;
- zone = pd->zone->id;
- desk_x = name_data->desk_x;
- desk_y = name_data->desk_y;
- name = name_data->name;
-
- 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);
-}
-
-static void
-_e_policy_desk_cb_name_del(struct wl_listener *listener, void *data)
-{
- E_Desk_Data_Name *name_data;
- E_Policy_Desk *pd;
- int zone;
- int desk_x, desk_y;
- E_Config_Desktop_Name *cfname;
- Eina_List *l = NULL;
-
- pd = wl_container_of(listener, pd, name_del);
- name_data = data;
- zone = pd->zone->id;
- desk_x = name_data->desk_x;
- desk_y = name_data->desk_y;
-
- 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;
- }
- }
-
-}
-
-static void
-_e_policy_desk_cb_name_update(struct wl_listener *listener, void *data)
-{
- const Eina_List *z, *l;
- Eina_List *comp_zone_list;
- E_Zone *zone;
- E_Desk *desk;
- E_Config_Desktop_Name *cfname;
- int d_x, d_y, ok;
- char name[40];
-
- if (!(comp_zone_list = e_comp_zone_list_get())) return;
-
- 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);
- }
- }
- }
- }
-}
-
static void
_e_policy_desk_cb_desk_show(struct wl_listener *listener, void *data)
{
E_Policy_Desk *pd;
E_Desk *desk;
- Edje_Message_Float_Set *msg = NULL;
E_Desk *desk2 = NULL;
int dx = 0, dy = 0;
Ecore_Event *eev_ecore_event = NULL;
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_policy_desk_show_begin(desk, dx, dy);
if (desk->smart_obj)
evas_object_show(desk->smart_obj);
if (eev_ecore_event) ecore_event_del(eev_ecore_event);
}
-static void
-_e_policy_desk_cb_desk_deskshow(struct wl_listener *listener, void *data)
-{
- E_Policy_Desk *pd;
- E_Desk *desk;
- E_Client *ec;
-
- pd = wl_container_of(listener, pd, desk_deskshow);
- desk = pd->desk;
-
- if (desk->deskshow_toggle)
- {
- /* uniconify raises windows and changes stacking order
- * go top-down to avoid skipping windows
- */
- E_DESK_CLIENT_REVERSE_FOREACH(desk, ec)
- {
- if (e_client_util_ignored_get(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_DESK_CLIENT_FOREACH(desk, ec)
- {
- if (e_client_util_ignored_get(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_policy_desk_event_simple_add(desk, E_EVENT_DESK_DESKSHOW);
-}
-
static void
_e_policy_desk_cb_desk_client_add(struct wl_listener *listener, void *data)
{
//e_desk_desk_new_listener_add(pd->desk, &pd->desk_new);
pd->desk_free.notify = _e_policy_desk_cb_desk_free;
e_desk_desk_free_listener_add(pd->desk, &pd->desk_free);
- pd->top_visible_get.notify = _e_policy_desk_cb_top_visible_get;
- e_desk_top_visible_get_listener_add(pd->desk, &pd->top_visible_get);
pd->name_set.notify = _e_policy_desk_cb_name_set;
e_desk_name_set_listener_add(pd->desk, &pd->name_set);
- pd->name_add.notify = _e_policy_desk_cb_name_add;
- e_desk_name_add_listener_add(pd->desk, &pd->name_add);
- pd->name_del.notify = _e_policy_desk_cb_name_del;
- e_desk_name_del_listener_add(pd->desk, &pd->name_del);
- pd->name_update.notify = _e_policy_desk_cb_name_update;
- e_desk_name_update_listener_add(pd->desk, &pd->name_update);
pd->desk_show.notify = _e_policy_desk_cb_desk_show;
e_desk_desk_show_listener_add(pd->desk, &pd->desk_show);
- pd->desk_deskshow.notify = _e_policy_desk_cb_desk_deskshow;
- e_desk_desk_deskshow_listener_add(pd->desk, &pd->desk_deskshow);
pd->desk_client_add.notify = _e_policy_desk_cb_desk_client_add;
e_desk_client_add_listener_add(pd->desk, &pd->desk_client_add);
pd->desk_client_del.notify = _e_policy_desk_cb_desk_client_remove;