[E_CLIENT_HOOK_FOCUS_SET] = NULL,
[E_CLIENT_HOOK_FOCUS_UNSET] = NULL,
[E_CLIENT_HOOK_NEW_CLIENT] = NULL,
-//#ifdef REFACTOR_ZONE_DESK
-//#else
- [E_CLIENT_HOOK_DESK_SET] = NULL,
-//#endif
[E_CLIENT_HOOK_MOVE_BEGIN] = NULL,
[E_CLIENT_HOOK_MOVE_UPDATE] = NULL,
[E_CLIENT_HOOK_MOVE_END] = NULL,
ecore_event_add(E_EVENT_CLIENT_PROPERTY, ev, (Ecore_End_Cb)_e_client_event_simple_free, NULL);
}
-#ifdef REFACTOR_ZONE_DESK
-#else
-static void
-_e_client_event_desk_set_free(void *d EINA_UNUSED, E_Event_Client_Desk_Set *ev)
-{
- UNREFD(ev->ec, 4);
- e_object_unref(E_OBJECT(ev->ec));
- e_object_unref(E_OBJECT(ev->desk));
- free(ev);
-}
-
-static void
-_e_client_event_zone_set_free(void *d EINA_UNUSED, E_Event_Client_Zone_Set *ev)
-{
- UNREFD(ev->ec, 5);
- e_object_unref(E_OBJECT(ev->ec));
- e_object_unref(E_OBJECT(ev->zone));
- free(ev);
-}
-#endif
////////////////////////////////////////////////
static int
e_comp_object_render_update_del(ec->frame);
E_OBJECT(ec)->references++;
-#ifdef REFACTOR_ZONE_DESK
-#else
- if (ec->fullscreen)
- {
- ec->desk->fullscreen_clients = eina_list_remove(ec->desk->fullscreen_clients, ec);
- if (!ec->desk->fullscreen_clients)
- e_comp_render_queue();
- }
-#endif
+
if (ec->new_client)
e_comp->new_clients--;
ELOGF("COMP", "CLIENT FREE", ec);
e_uuid_store_entry_del(ec->uuid);
-#ifdef REFACTOR_ZONE_DESK
-#else
- e_desk_client_del(ec->desk, ec);
-#endif
_e_client_private_finish(ec);
free(ec);
ec->changed = 0;
-#ifdef REFACTOR_ZONE_DESK
-#else
- e_desk_visible_client_iconified_list_remove(ec->desk, ec);
-#endif
if (ec == e_comp_object_dim_client_get())
{
INF("[DIM] client deleted\n");
ec->base_output_resolution.transform = NULL;
E_FREE_FUNC(ec->base_output_resolution.hook_subsurf_create, e_comp_wl_hook_del);
-#ifdef REFACTOR_ZONE_DESK
-#else
- // 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);
-#endif
-
if (ec->transform_core.transform_list)
{
E_Util_Transform *transform;
ec->transform_core.result.enable = EINA_FALSE;
-#ifdef REFACTOR_ZONE_DESK
-#else
- e_client_desk_area_set(ec, NULL);
- e_util_transform_del(ec->desk_area.transform);
- ec->desk_area.transform = NULL;
-#endif
-
_e_client_resize_object_del(ec);
e_comp_visibility_calculation_set(EINA_TRUE);
}
////////////////////////////////////////////////
-#ifdef REFACTOR_ZONE_DESK
-#else
-static void
-_e_client_zone_update(E_Client *ec)
-{
- Eina_List *l;
- E_Zone *zone;
-
- /* still within old zone - leave it there */
- zone = e_comp_zone_find_by_ec(ec);
- if (zone && E_INTERSECTS(ec->x, ec->y, ec->w, ec->h,
- zone->x, zone->y, zone->w, zone->h))
- return;
-
- /* find a new zone */
- EINA_LIST_FOREACH(e_comp->zones, l, zone)
- {
- if (E_INTERSECTS(ec->x, ec->y, ec->w, ec->h,
- zone->x, zone->y, zone->w, zone->h))
- {
- e_client_zone_set(ec, zone);
- return;
- }
- }
-}
-#endif
-////////////////////////////////////////////////
static void
_e_client_transform_core_activate_set(E_Client *ec, Eina_Bool set)
_e_client_event_simple(ec, E_EVENT_CLIENT_MOVE);
-#ifdef REFACTOR_ZONE_DESK
-#else
- _e_client_zone_update(ec);
-#endif
evas_object_geometry_get(ec->frame, &x, &y, NULL, NULL);
if ((e_config->transient.move) && (ec->transients))
{
_e_client_event_simple(ec, E_EVENT_CLIENT_RESIZE);
-#ifdef REFACTOR_ZONE_DESK
-#else
- _e_client_zone_update(ec);
-#endif
evas_object_geometry_get(ec->frame, &x, &y, &w, &h);
if ((e_config->transient.resize) && (ec->transients))
{
}
////////////////////////////////////////////////
-
-#ifdef REFACTOR_ZONE_DESK
-#else
-static void
-_e_client_maximize(E_Client *ec, E_Maximize max)
-{
- int x1, yy1, x2, y2;
- int zx, zy, zw, zh;
- int desk_x, desk_y, desk_w, desk_h;
- Eina_Bool override = ec->maximize_override;
- E_Zone *zone;
-
- zx = zy = zw = zh = 0;
- ec->maximize_override = 1;
-
- zone = e_comp_zone_find_by_ec(ec);
- if (!zone) return;
-
- if (ec->desk_area.enable && ec->desk_area.desk_area)
- {
- desk_x = ec->desk_area.desk_area->x;
- desk_y = ec->desk_area.desk_area->y;
- desk_w = ec->desk_area.desk_area->w;
- desk_h = ec->desk_area.desk_area->h;
- }
- else
- {
- desk_x = ec->desk->geom.x;
- desk_y = ec->desk->geom.y;
- desk_w = ec->desk->geom.w;
- desk_h = ec->desk->geom.h;
- }
-
- switch (max & E_MAXIMIZE_TYPE)
- {
- case E_MAXIMIZE_NONE:
- /* Ignore */
- break;
-
- case E_MAXIMIZE_FULLSCREEN:
- case E_MAXIMIZE_FILL:
- if (ec->base_output_resolution.use)
- {
- zx = desk_x;
- zy = desk_y;
- zw = ec->base_output_resolution.w;
- zh = ec->base_output_resolution.h;
- }
- else
- {
- e_zone_desk_useful_geometry_get(zone, ec->desk, &zx, &zy, &zw, &zh, EINA_FALSE);
- }
-
- switch (max & E_MAXIMIZE_DIRECTION)
- {
- case E_MAXIMIZE_BOTH:
- e_client_maximized_geometry_set(ec, zx, zy, zw, zh);
- break;
-
- case E_MAXIMIZE_VERTICAL:
- e_client_maximized_geometry_set(ec, ec->x, zy, ec->w, zh);
- break;
-
- case E_MAXIMIZE_HORIZONTAL:
- e_client_maximized_geometry_set(ec, zx, ec->y, zw, ec->h);
- break;
-
- case E_MAXIMIZE_LEFT:
- e_client_maximized_geometry_set(ec, zx, zy, zw / 2, zh);
- break;
-
- case E_MAXIMIZE_RIGHT:
- e_client_maximized_geometry_set(ec, zx + zw / 2, zy, zw / 2, zh);
- break;
- }
- break;
-
- case E_MAXIMIZE_SMART:
- case E_MAXIMIZE_EXPAND:
- if (ec->desk->visible)
- {
- // base_output_resolution
- if (ec->base_output_resolution.use)
- {
- zx = desk_x;
- zy = desk_y;
- zw = ec->base_output_resolution.w;
- zh = ec->base_output_resolution.h;
- }
- else
- {
- e_zone_desk_useful_geometry_get(zone, ec->desk, &zx, &zy, &zw, &zh, EINA_TRUE);
- }
- }
- else
- {
- x1 = desk_x;
- yy1 = desk_y;
- x2 = desk_x + desk_w;
- y2 = desk_y + desk_h;
- e_maximize_client_shelf_fill(ec, &x1, &yy1, &x2, &y2, max);
- zx = x1, zy = yy1;
- zw = x2 - x1;
- zh = y2 - yy1;
- }
-
- evas_object_smart_callback_call(ec->frame, "maximize", NULL);
-
- switch (max & E_MAXIMIZE_DIRECTION)
- {
- case E_MAXIMIZE_BOTH:
- e_client_maximized_geometry_set(ec, zx, zy, zw, zh);
- break;
-
- case E_MAXIMIZE_VERTICAL:
- e_client_maximized_geometry_set(ec, ec->x, zy, ec->w, zh);
- break;
-
- case E_MAXIMIZE_HORIZONTAL:
- e_client_maximized_geometry_set(ec, zx, ec->y, zw, ec->h);
- break;
-
- case E_MAXIMIZE_LEFT:
- e_client_maximized_geometry_set(ec, zx, zy, zw / 2, zh);
- break;
-
- case E_MAXIMIZE_RIGHT:
- e_client_maximized_geometry_set(ec, zx + zw / 2, zy, zw / 2, zh);
- break;
- }
-
- break;
- }
-
- if (ec->maximize_override)
- ec->maximize_override = override;
-}
-#endif
-
-////////////////////////////////////////////////
static void
_e_client_aux_hint_eval(E_Client *ec)
{
}
}
-#ifdef REFACTOR_ZONE_DESK
-#else
-static void
-_e_client_apply_auto_placement(E_Client *ec)
-{
- Eina_List *skiplist = NULL;
- int new_x, new_y, t = 0;
- int type;
- E_Client *parent_ec;
- E_Zone *zone;
-
- // intercept auto placement policy
- if (!_e_client_intercept_hook_call(E_CLIENT_INTERCEPT_HOOK_AUTO_PLACEMENT, ec))
- {
- ELOGF("POL", "Intercepted auto_placement policy.", ec);
- return;
- }
-
- int zx = 0, zy = 0, zw = 0, zh = 0;
-
- zone = e_comp_zone_find_by_ec(ec);
- if (!zone) return;
-
- e_zone_useful_geometry_get(zone, &zx, &zy, &zw, &zh);
-
- unsigned int seed = (unsigned int)time(NULL);
-
- 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_comp_object_frame_geometry_get(ec->frame, 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);
- if (ec->desk)
- e_place_desk_region_smart(ec->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;
-}
-#endif
-
static void
_e_client_eval(E_Client *ec)
{
int send_event = 1;
unsigned int prop = 0;
-#ifdef REFACTOR_ZONE_DESK
int tx, ty;
-#else
- E_Zone *zone;
- int tx, ty, tw, th;
- int nw, nh;
-#endif
if (e_object_is_del(E_OBJECT(ec)))
{
return;
}
-#ifdef REFACTOR_ZONE_DESK
if ((ec->new_client) && (!e_client_util_ignored_get(ec)))
{
wl_signal_emit_mutable(&PRI(ec)->events.eval_post_new_client, NULL);
return;
}
}
-#else
- zone = e_comp_zone_find_by_ec(ec);
- if ((ec->new_client) && (!e_client_util_ignored_get(ec)) && (zone))
- {
- int zx = 0, zy = 0, zw = 0, zh = 0;
-
- 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_comp_object_frame_xy_adjust(ec->frame, ec->x, 0, &ec->x, NULL);
- if (ec->y) e_comp_object_frame_xy_adjust(ec->frame, 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_client_apply_auto_placement(ec);
- }
- else
- {
- if (e_appinfo_auto_placement_get(eai))
- _e_client_apply_auto_placement(ec);
- }
-
- /* Recreate state */
- if (ec->e.state.centered)
- {
- tx = zx + (zw - ec->w) / 2;
- ty = zy + (zh - ec->h) / 2;
- e_client_pos_set(ec, tx, ty);
- ec->changes.pos = 1;
- }
-
- /* 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;
-
- EINA_LIST_FOREACH(e_comp->zones, 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_client_zone_set(ec, zone1);
- }
- }
-
- wl_signal_emit_mutable(&PRI(ec)->events.eval_post_new_client, NULL);
- if (!_e_client_hook_call(E_CLIENT_HOOK_EVAL_POST_NEW_CLIENT, ec))
- {
- TRACE_DS_END();
- return;
- }
-#endif
/* effect changes to the window border itself */
if ((ec->changes.shading))
TRACE_DS_END();
}
-#ifdef REFACTOR_ZONE_DESK
EINTERN void
e_client_frame_update(E_Client *ec)
-#else
-static void
-_e_client_frame_update(E_Client *ec)
-#endif
{
const char *bordername;
-#ifdef REFACTOR_ZONE_DESK
EINA_SAFETY_ON_NULL_RETURN(ec);
if (e_object_is_del(E_OBJECT(ec))) return;
-#endif
ec->border.changed = 0;
if (!e_comp_object_frame_allowed(ec->frame)) return;
evas_object_smart_callback_add(ec->frame, "shade_done", _e_client_cb_evas_shade_done, ec);
}
-#ifdef REFACTOR_ZONE_DESK
-#else
- if (ec->override)
- _e_client_zone_update(ec);
- else
- e_client_desk_set(ec, e_desk_current_get(e_zone_current_get()));
-#endif
-
wl_signal_emit_mutable(&PRI(ec)->events.new_client_post, NULL);
+
#ifdef _F_E_CLIENT_NEW_CLIENT_POST_HOOK_
_e_client_hook_call(E_CLIENT_HOOK_NEW_CLIENT_POST, ec);
#endif
return ec->internal;
}
-#ifdef REFACTOR_ZONE_DESK
-#else
-EINTERN void
-e_client_desk_set(E_Client *ec, E_Desk *desk)
-{
- E_Event_Client_Desk_Set *ev;
- E_Desk *old_desk;
- E_Zone *zone;
-
- E_OBJECT_CHECK(ec);
- E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
- E_OBJECT_CHECK(desk);
- E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
- if (e_desk_has_ec(desk, ec)) return;
-
- if (ec->fullscreen)
- {
- ec->desk->fullscreen_clients = eina_list_remove(ec->desk->fullscreen_clients, ec);
- desk->fullscreen_clients = eina_list_append(desk->fullscreen_clients, ec);
- }
- old_desk = ec->desk;
- if (old_desk)
- e_desk_client_del(old_desk, ec);
- ec->desk = desk;
- e_desk_client_add(desk, ec);
- if (!ec->new_client)
- {
- if (ec->frame)
- {
- e_comp_object_effect_unclip(ec->frame);
- e_comp_object_effect_set(ec->frame, NULL);
- }
- if (desk->visible || ec->sticky)
- {
- if ((!ec->hidden) && (!ec->iconic))
- evas_object_show(ec->frame);
- }
- else
- {
- ec->hidden = 1;
- evas_object_hide(ec->frame);
- }
- }
- e_client_comp_hidden_set(ec, (!desk->visible) && (!ec->sticky));
- e_client_zone_set(ec, desk->zone);
-
- if (old_desk)
- {
- ev = E_NEW(E_Event_Client_Desk_Set, 1);
- if (ev)
- {
- ev->ec = ec;
- UNREFD(ec, 4);
- e_object_ref(E_OBJECT(ec));
- ev->desk = old_desk;
- e_object_ref(E_OBJECT(old_desk));
- ecore_event_add(E_EVENT_CLIENT_DESK_SET, ev, (Ecore_End_Cb)_e_client_event_desk_set_free, NULL);
- }
-
- zone = e_comp_zone_find_by_ec(ec);
- if (old_desk->zone == zone)
- {
- e_client_res_change_geometry_save(ec);
- e_client_res_change_geometry_restore(ec);
- ec->pre_res_change.valid = 0;
- }
- }
-
- if (e_config->transient.desktop)
- {
- E_Client *child;
- const Eina_List *l;
-
- EINA_LIST_FOREACH(ec->transients, l, child)
- e_client_desk_set(child, ec->desk);
- }
-
- _e_client_hook_call(E_CLIENT_HOOK_DESK_SET, ec);
- evas_object_smart_callback_call(ec->frame, "desk_change", ec);
-
- if (ec->desk->desk_area.enable)
- {
- if (!ec->desk_area.desk_area)
- {
- E_Desk_Area *eda;
- eda = e_desk_desk_area_base_get(ec->desk);
- e_client_desk_area_set(ec, eda);
- }
-
- e_client_desk_area_enable_set(ec, EINA_TRUE);
- }
-}
-#endif
-
EINTERN void
e_client_desk_iconify_skip_set(E_Client *ec, Eina_Bool skip)
{
memcpy(&ec->pre_res_change, &pre_res_change, sizeof(pre_res_change));
}
-#ifdef REFACTOR_ZONE_DESK
-#else
-EINTERN void
-e_client_zone_set(E_Client *ec, E_Zone *zone)
-{
- E_Event_Client_Zone_Set *ev;
-
- E_OBJECT_CHECK(ec);
- E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
- E_OBJECT_CHECK(zone);
- E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE);
- if (e_zone_has_ec(zone, ec)) return;
-
- 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;
- }
- evas_object_move(ec->frame, x, y);
- }
-
- // TODO: NEED TO DELETE LINE BELOW
- ec->zone = zone;
-
- 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);
-
- // TODO: change all use of e_client_zone_set() to e_zone_client_add()
- e_zone_client_add(zone, ec);
-}
-#endif
-
EINTERN void
e_client_pos_set(E_Client *ec, int x, int y)
{
// send the client_focuse_in event
_e_client_event_simple(ec, E_EVENT_CLIENT_FOCUS_IN);
-#ifdef REFACTOR_ZONE_DESK
-#else
- // TODO: This is not for focus, but for Window Placement policy.
- // Move this code to the better place.
- if (ec->sticky && ec->desk && (!ec->desk->visible))
- e_client_desk_set(ec, e_desk_current_get(zone));
-#endif
-
TRACE_DS_END();
}
ec->exp_iconify.by_client = 0;
e_client_iconified_type_set(ec, E_ICONIFIED_TYPE_NONE);
-#ifdef REFACTOR_ZONE_DESK
-#else
- if ((!ec->iconic) && (!ec->sticky))
- {
- e_desk_show(ec->desk);
- }
- if (!ec->lock_user_stacking)
- e_client_raise(ec);
- if (ec->shaded || ec->shading)
- e_client_unshade(ec, ec->shade_dir);
-#endif
-
-#ifdef REFACTOR_ZONE_DESK
-#else
- if (!e_client_desk_iconify_skip_get(ec))
- {
- e_desk_visible_client_iconified_list_remove_all(ec->desk);
- }
-#endif
-
wl_signal_emit_mutable(&PRI(ec)->events.activate_done, NULL);
_e_client_hook_call(E_CLIENT_HOOK_ACTIVATE_DONE, ec);
E_API void
e_client_maximize(E_Client *ec, E_Maximize max)
{
-#ifdef REFACTOR_ZONE_DESK
E_OBJECT_CHECK(ec);
E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
ec->changes.need_unmaximize = 0;
evas_object_smart_callback_call(ec->frame, "maximize_done", NULL);
-#else
- int desk_x, desk_y;
- E_Zone *zone;
-
- E_OBJECT_CHECK(ec);
- E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-
- zone = e_comp_zone_find_by_ec(ec);
- if (!zone) return;
- if (!(max & E_MAXIMIZE_DIRECTION)) max |= E_MAXIMIZE_BOTH;
-
- if ((ec->shaded) || (ec->shading)) return;
-
- if ((ec->maximized & E_MAXIMIZE_DIRECTION) == (max & E_MAXIMIZE_DIRECTION))
- {
- if ((ec->maximized & E_MAXIMIZE_TYPE) == (max & E_MAXIMIZE_TYPE))
- return;
- }
-
- if (ec->new_client)
- {
- ec->changes.need_maximize = 1;
- ec->maximized &= ~E_MAXIMIZE_TYPE;
- ec->maximized |= max;
- EC_CHANGED(ec);
- return;
- }
-
- if (ec->desk_area.enable && ec->desk_area.desk_area)
- {
- desk_x = ec->desk_area.desk_area->x;
- desk_y = ec->desk_area.desk_area->y;
- }
- else
- {
- desk_x = ec->desk->geom.x;
- desk_y = ec->desk->geom.y;
- }
-
- evas_object_smart_callback_call(ec->frame, "maximize_pre", NULL);
-
- if (ec->fullscreen)
- e_client_unfullscreen(ec);
- ec->pre_res_change.valid = 0;
- if (!(ec->maximized & E_MAXIMIZE_HORIZONTAL))
- {
- /* Horizontal hasn't been set */
- ec->saved.x = ec->client.x - desk_x;
- ec->saved.w = ec->client.w;
- }
- if (!(ec->maximized & E_MAXIMIZE_VERTICAL))
- {
- /* Vertical hasn't been set */
- ec->saved.y = ec->client.y - desk_y;
- ec->saved.h = ec->client.h;
- }
-
- ec->saved.zone = zone->num;
-
- _e_client_maximize(ec, max);
-
- ec->maximized = max;
- ec->changes.need_unmaximize = 0;
-
- evas_object_smart_callback_call(ec->frame, "maximize_done", NULL);
-#endif
}
E_API void
e_client_unmaximize(E_Client *ec, E_Maximize max)
{
-#ifdef REFACTOR_ZONE_DESK
E_OBJECT_CHECK(ec);
E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
evas_object_smart_callback_call(ec->frame, "unmaximize_done", NULL);
ec->changes.need_unmaximize = 0;
-#else
- E_Zone *zone;
-
- E_OBJECT_CHECK(ec);
- E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-
- zone = e_comp_zone_find_by_ec(ec);
- if (!zone) return;
- if (!(max & E_MAXIMIZE_DIRECTION))
- {
- CRI("BUG: Unmaximize call without direction!");
- return;
- }
- if (ec->new_client)
- {
- ec->changes.need_unmaximize = 1;
- EC_CHANGED(ec);
- return;
- }
-
- if ((ec->shaded) || (ec->shading)) return;
-
- /* Remove directions not used */
- max &= (ec->maximized & E_MAXIMIZE_DIRECTION);
- /* Can only remove existing maximization directions */
- if (!max) return;
-
- evas_object_smart_callback_call(ec->frame, "unmaximize_pre", NULL);
-
- if (ec->maximized & E_MAXIMIZE_TYPE)
- {
- ec->pre_res_change.valid = 0;
- ec->changes.need_maximize = 0;
-
- if ((ec->maximized & E_MAXIMIZE_TYPE) == E_MAXIMIZE_FULLSCREEN)
- {
- E_Maximize tmp_max = ec->maximized;
-
- //un-set maximized state for updating frame.
- ec->maximized = E_MAXIMIZE_NONE;
- _e_client_frame_update(ec);
- // re-set maximized state for unmaximize smart callback.
- ec->maximized = tmp_max;
- evas_object_smart_callback_call(ec->frame, "unfullscreen", NULL);
- // un-set maximized state.
- ec->maximized = E_MAXIMIZE_NONE;
- e_client_util_move_resize_without_frame(ec,
- ec->saved.x + zone->x,
- ec->saved.y + zone->y,
- ec->saved.w, ec->saved.h);
- ec->saved.x = ec->saved.y = ec->saved.w = ec->saved.h = 0;
- }
- else
- {
- int w, h, x, y;
- Eina_Bool horiz = EINA_FALSE, vert = EINA_FALSE;
-
- w = ec->client.w;
- h = ec->client.h;
- x = ec->client.x;
- y = ec->client.y;
-
- if (max & E_MAXIMIZE_VERTICAL)
- {
- /* Remove vertical */
- h = ec->saved.h;
- vert = EINA_TRUE;
- y = ec->saved.y + zone->y;
- if ((max & E_MAXIMIZE_VERTICAL) == E_MAXIMIZE_VERTICAL)
- {
- ec->maximized &= ~E_MAXIMIZE_VERTICAL;
- ec->maximized &= ~E_MAXIMIZE_LEFT;
- ec->maximized &= ~E_MAXIMIZE_RIGHT;
- }
- if ((max & E_MAXIMIZE_LEFT) == E_MAXIMIZE_LEFT)
- ec->maximized &= ~E_MAXIMIZE_LEFT;
- if ((max & E_MAXIMIZE_RIGHT) == E_MAXIMIZE_RIGHT)
- ec->maximized &= ~E_MAXIMIZE_RIGHT;
- }
- if (max & E_MAXIMIZE_HORIZONTAL)
- {
- /* Remove horizontal */
- w = ec->saved.w;
- x = ec->saved.x + zone->x;
- horiz = EINA_TRUE;
- ec->maximized &= ~E_MAXIMIZE_HORIZONTAL;
- }
-
- if (!(ec->maximized & E_MAXIMIZE_DIRECTION))
- {
- ec->maximized = E_MAXIMIZE_NONE;
- _e_client_frame_update(ec);
- evas_object_smart_callback_call(ec->frame, "unmaximize", NULL);
- e_client_resize_limit(ec, &w, &h);
- e_client_pos_set(ec, x, y);
- if ((ec->saved.w != 0) && (ec->saved.h != 0))
- {
- if ((w != ec->saved.w) || (h != ec->saved.h))
- {
- e_policy_visibility_client_defer_move(ec);
- }
- }
- }
- else
- {
- evas_object_smart_callback_call(ec->frame, "unmaximize", NULL);
- e_client_resize_limit(ec, &w, &h);
- e_client_pos_set(ec, x, y);
- if ((ec->saved.w != 0) && (ec->saved.h != 0))
- {
- if ((w != ec->saved.w) || (h != ec->saved.h))
- {
- e_policy_visibility_client_defer_move(ec);
- }
- }
- }
- if (vert)
- ec->saved.h = ec->saved.y = 0;
- if (horiz)
- ec->saved.w = ec->saved.x = 0;
- }
- }
- evas_object_smart_callback_call(ec->frame, "unmaximize_done", NULL);
- ec->changes.need_unmaximize = 0;
-#endif
}
EINTERN void
e_client_fullscreen(E_Client *ec, E_Fullscreen policy)
{
-#ifdef REFACTOR_ZONE_DESK
E_OBJECT_CHECK(ec);
E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
ec->fullscreen_policy = policy;
_e_client_event_simple(ec, E_EVENT_CLIENT_FULLSCREEN);
-#else
- int x, y, w, h;
- E_Zone *zone;
-
- E_OBJECT_CHECK(ec);
- E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-
- zone = e_comp_zone_find_by_ec(ec);
- if (!zone) return;
-
- if ((ec->shaded) || (ec->shading) || (ec->fullscreen)) return;
-
- wl_signal_emit_mutable(&PRI(ec)->events.fullscreen_pre, NULL);
- _e_client_hook_call(E_CLIENT_HOOK_FULLSCREEN_PRE, ec);
-
- if (ec->skip_fullscreen) return;
- if (!ec->desk->visible) return;
- if (ec->new_client)
- {
- ec->need_fullscreen = 1;
- return;
- }
- if (e_comp->nocomp_ec && (ec->desk == e_comp->nocomp_ec->desk))
- e_comp->nocomp_ec = ec;
- ec->desk->fullscreen_clients = eina_list_append(ec->desk->fullscreen_clients, ec);
- ec->pre_res_change.valid = 0;
-
- if (ec->maximized)
- {
- x = ec->saved.x;
- y = ec->saved.y;
- w = ec->saved.w;
- h = ec->saved.h;
- }
- else
- {
- ec->saved.x = ec->client.x - zone->x;
- ec->saved.y = ec->client.y - zone->y;
- ec->saved.w = ec->client.w;
- ec->saved.h = ec->client.h;
- }
- ec->saved.maximized = ec->maximized;
- ec->saved.zone = zone->num;
-
- if (ec->maximized)
- {
- e_client_unmaximize(ec, E_MAXIMIZE_BOTH);
- ec->saved.x = x;
- ec->saved.y = y;
- ec->saved.w = w;
- ec->saved.h = h;
- }
-
- ec->saved.layer = ec->layer;
- e_client_layer_set(ec, E_LAYER_CLIENT_FULLSCREEN);
-
- ec->fullscreen = 1;
- if ((eina_list_count(e_comp->zones) > 1) ||
- (policy == E_FULLSCREEN_RESIZE))
- {
- e_client_frame_geometry_set(ec, zone->x, zone->y, zone->w, zone->h);
- }
- else if (policy == E_FULLSCREEN_ZOOM)
- {
- /* compositor backends! */
- evas_object_smart_callback_call(ec->frame, "fullscreen_zoom", NULL);
- }
-
- if (!e_client_util_ignored_get(ec))
- _e_client_frame_update(ec);
- ec->fullscreen_policy = policy;
- evas_object_smart_callback_call(ec->frame, "fullscreen", NULL);
-
- wl_signal_emit_mutable(&PRI(ec)->events.fullscreen, &policy);
- _e_client_event_simple(ec, E_EVENT_CLIENT_FULLSCREEN);
-#endif
}
EINTERN void
e_client_unfullscreen(E_Client *ec)
{
-#ifdef REFACTOR_ZONE_DESK
E_OBJECT_CHECK(ec);
E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
ec->fullscreen_policy = E_FULLSCREEN_RESIZE;
_e_client_event_simple(ec, E_EVENT_CLIENT_UNFULLSCREEN);
-#else
- E_Zone *zone;
-
- E_OBJECT_CHECK(ec);
- E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-
- zone = e_comp_zone_find_by_ec(ec);
- if (!zone) return;
- if ((ec->shaded) || (ec->shading)) return;
- if (!ec->fullscreen) return;
- ec->pre_res_change.valid = 0;
- ec->fullscreen = 0;
- ec->need_fullscreen = 0;
- ec->desk->fullscreen_clients = eina_list_remove(ec->desk->fullscreen_clients, ec);
-
- if (ec->fullscreen_policy == E_FULLSCREEN_ZOOM)
- evas_object_smart_callback_call(ec->frame, "unfullscreen_zoom", NULL);
-
- if (!e_client_util_ignored_get(ec))
- _e_client_frame_update(ec);
- ec->fullscreen_policy = 0;
- evas_object_smart_callback_call(ec->frame, "unfullscreen", NULL);
- e_client_util_move_resize_without_frame(ec, zone->x + ec->saved.x,
- zone->y + ec->saved.y,
- ec->saved.w, ec->saved.h);
-
- if (ec->saved.maximized)
- e_client_maximize(ec, (ec->maximize_type & E_MAXIMIZE_TYPE) |
- ec->saved.maximized);
-
- e_client_layer_set(ec, ec->saved.layer);
-
- _e_client_event_simple(ec, E_EVENT_CLIENT_UNFULLSCREEN);
-
- if (!ec->desk->fullscreen_clients)
- e_comp_render_queue();
-#endif
}
///////////////////////////////////////
-#ifdef REFACTOR_ZONE_DESK
EINTERN Eina_Bool
e_client_is_parent_iconify_by_client(E_Client *ec)
-#else
-static Eina_Bool
-_e_client_is_parent_iconify_by_client(E_Client *ec)
-#endif
{
E_Client *parent = ec->parent;
if (!parent) return EINA_FALSE;
TRACE_DS_BEGIN(CLIENT:ICONIFY);
-#ifdef REFACTOR_ZONE_DESK
-#else
- e_comp_wl_remote_surface_image_save(ec);
-
- ec->iconic = 1;
- ec->want_focus = ec->take_focus = 0;
- ec->changes.visible = 0;
- if (ec->fullscreen)
- ec->desk->fullscreen_clients = eina_list_remove(ec->desk->fullscreen_clients, ec);
- e_client_comp_hidden_set(ec, 1);
- evas_object_hide(ec->frame);
- e_client_urgent_set(ec, ec->icccm.urgent);
-
- _e_client_event_simple(ec, E_EVENT_CLIENT_ICONIFY);
-
- if (e_config->transient.iconify)
- {
- E_Client *child;
- Eina_List *list = eina_list_clone(ec->transients);
-
- EINA_LIST_FREE(list, child)
- {
- if ((child->exp_iconify.type != E_ICONIFIED_TYPE_ICONIFY_BY_CLIENT) &&
- (_e_client_is_parent_iconify_by_client(child)))
- {
- e_client_iconified_type_set(child, E_ICONIFIED_TYPE_PARENT_ICONIFY_BY_CLIENT);
- child->exp_iconify.by_client = 1;
- e_policy_client_iconic_state_change_send(child, 1);
- }
- e_client_iconify(child);
- }
- }
-
-#endif
-
wl_signal_emit_mutable(&PRI(ec)->events.iconify, NULL);
_e_client_hook_call(E_CLIENT_HOOK_ICONIFY, ec);
E_API void
e_client_uniconify(E_Client *ec)
{
-#ifdef REFACTOR_ZONE_DESK
E_Comp_Wl_Client_Data *cdata;
E_OBJECT_CHECK(ec);
_e_client_hook_call(E_CLIENT_HOOK_UNICONIFY, ec);
TRACE_DS_END();
-#else
- E_Desk *desk;
- Eina_Bool not_raise;
-
- E_OBJECT_CHECK(ec);
- E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-
- E_Comp_Wl_Client_Data *cdata = e_client_cdata_get(ec);
-
- ELOGF("TZVIS", "UNICONIFY|iconic:%d |argb:%d |not_raise:%d |by_client:%d, type:%d |mapped:%d",
- ec, ec->iconic, ec->argb, (unsigned int)ec->exp_iconify.not_raise,
- ec->exp_iconify.by_client, ec->exp_iconify.type,
- cdata ? cdata->mapped : 0);
-
- if (ec->shading || (!ec->iconic)) return;
-
- TRACE_DS_BEGIN(CLIENT:UNICONIFY);
-
- e_comp_wl_remote_surface_image_save_cancel(ec);
-
- desk = e_desk_current_get(ec->desk->zone);
- e_client_desk_set(ec, desk);
- not_raise = ec->exp_iconify.not_raise;
-
- ec->exp_iconify.by_client = 0;
- e_client_iconified_type_set(ec, E_ICONIFIED_TYPE_NONE);
-
- if (e_config->transient.iconify)
- {
- E_Client *child;
- Eina_List *list = eina_list_clone(ec->transients);
-
- EINA_LIST_FREE(list, child)
- {
- if (e_client_transient_policy_get(child) == E_TRANSIENT_BELOW)
- {
- child->exp_iconify.not_raise = not_raise;
- e_client_uniconify(child);
- }
- }
- }
-
- if (!not_raise)
- e_client_raise(ec);
-
- if (ec->internal)
- {
- ELOGF("TZVIS", "UNICONIFY|internal object force show", ec);
- evas_object_show(ec->frame);
- }
-
- if (ec->pixmap)
- {
- if (e_pixmap_usable_get(ec->pixmap))
- {
- if (cdata && cdata->mapped)
- {
- ELOGF("TZVIS", "UNICONIFY|object show. frame_visible:%d", ec, evas_object_visible_get(ec->frame));
- evas_object_show(ec->frame);
- }
- else
- {
- ELOGF("TZVIS", "UNICONIFY|object no show. currently unmapped", ec);
- }
- }
- else
- {
- if (!ec->exp_iconify.buffer_flush &&
- !ec->exp_iconify.deiconify_update)
- {
- if (cdata && cdata->mapped)
- {
- ELOGF("TZVIS", "UNICONIFY|object show. no use buffer flush. frame_visible:%d", ec, evas_object_visible_get(ec->frame));
- evas_object_show(ec->frame);
- }
- }
- }
- }
- e_client_comp_hidden_set(ec, 0);
- ec->deskshow = ec->iconic = 0;
-
-#if 0 // focus should be set to the top window not uniconify window
- if (ec->pixmap && e_pixmap_usable_get(ec->pixmap))
- e_client_frame_focus_set(ec, EINA_TRUE);
-#endif
-
- _e_client_event_simple(ec, E_EVENT_CLIENT_UNICONIFY);
-
- if (e_config->transient.iconify)
- {
- E_Client *child;
- Eina_List *list = eina_list_clone(ec->transients);
-
- EINA_LIST_FREE(list, child)
- {
- if (e_client_transient_policy_get(child) == E_TRANSIENT_ABOVE)
- {
- if (child->exp_iconify.type == E_ICONIFIED_TYPE_PARENT_ICONIFY_BY_CLIENT)
- e_policy_client_iconic_state_change_send(child, 0);
- child->exp_iconify.not_raise = not_raise;
- e_client_uniconify(child);
- }
- }
- }
-
- wl_signal_emit_mutable(&PRI(ec)->events.uniconify, NULL);
- _e_client_hook_call(E_CLIENT_HOOK_UNICONIFY, ec);
-
- ec->exp_iconify.not_raise = 0;
-
- TRACE_DS_END();
-#endif
}
E_API void
EINTERN void
e_client_stick(E_Client *ec)
{
-#ifdef REFACTOR_ZONE_DESK
E_OBJECT_CHECK(ec);
E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
if (ec->sticky) return;
// send the sticky property event of a client
_e_client_event_property(ec, E_CLIENT_PROPERTY_STICKY);
-#else
- E_Desk *desk;
-
- E_OBJECT_CHECK(ec);
- E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
- if (ec->sticky) return;
- desk = ec->desk;
- ec->desk = NULL;
- ec->sticky = 1;
- ec->hidden = 0;
- e_client_desk_set(ec, desk);
- evas_object_smart_callback_call(ec->frame, "stick", NULL);
-
- if (e_config->transient.desktop)
- {
- E_Client *child;
- Eina_List *list = eina_list_clone(ec->transients);
-
- EINA_LIST_FREE(list, child)
- {
- child->sticky = 1;
- evas_object_show(ec->frame);
- }
- }
-
- _e_client_event_property(ec, E_CLIENT_PROPERTY_STICKY);
-#endif
}
EINTERN void
e_client_unstick(E_Client *ec)
{
-#ifdef REFACTOR_ZONE_DESK
E_OBJECT_CHECK(ec);
E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
// send the sticky property event of a client
_e_client_event_property(ec, E_CLIENT_PROPERTY_STICKY);
-#else
- E_Desk *desk;
- E_Zone *zone;
-
- E_OBJECT_CHECK(ec);
- E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
- /* Set the desk before we unstick the client */
- if (!ec->sticky) return;
-
- zone = e_comp_zone_find_by_ec(ec);
- desk = e_desk_current_get(zone);
- ec->desk = NULL;
- ec->hidden = ec->sticky = 0;
- e_client_desk_set(ec, desk);
- evas_object_smart_callback_call(ec->frame, "unstick", NULL);
-
- if (e_config->transient.desktop)
- {
- E_Client *child;
- Eina_List *list = eina_list_clone(ec->transients);
-
- EINA_LIST_FREE(list, child)
- {
- child->sticky = 0;
- }
- }
-
- _e_client_event_property(ec, E_CLIENT_PROPERTY_STICKY);
-
- e_client_desk_set(ec, e_desk_current_get(zone));
-#endif
}
EINTERN void
return ec->desk_area.edgc_layer;
}
-#ifdef REFACTOR_ZONE_DESK
-#else
-EINTERN Eina_Bool
-e_client_desk_area_enable_set(E_Client *ec, Eina_Bool enable)
-{
- E_OBJECT_CHECK_RETURN(ec, EINA_FALSE);
- E_OBJECT_TYPE_CHECK_RETURN(ec, E_CLIENT_TYPE, EINA_FALSE);
-
- ec->desk_area.enable = enable;
-
- ELOGF("EDG", "Desk group enable set to %d", ec, enable);
- if (enable)
- {
- if (!ec->desk_area.transform)
- {
- ec->desk_area.transform = e_util_transform_new();
- e_util_transform_role_set(ec->desk_area.transform, "desk_area");
- }
- }
- else
- {
- if (ec->desk_area.transform)
- {
- e_util_transform_del(ec->desk_area.transform);
- ec->desk_area.transform = NULL;
- }
- }
-
- e_desk_area_ec_update(ec->desk_area.desk_area, ec);
- return EINA_TRUE;
-}
-#endif
-
//FIXME: use e_desk_area_ec_reassign(eda, ec) instead of this api
E_API Eina_Bool
e_client_desk_area_set(E_Client *ec, E_Desk_Area *eda)
return EINA_TRUE;
}
-#ifdef REFACTOR_ZONE_DESK
EINTERN Eina_Bool
e_client_intercept_hook_auto_placement_call(E_Client *ec)
{
_e_client_event_simple(ec, E_EVENT_CLIENT_UNICONIFY);
}
-#endif
EINTERN void
e_client_stack_transient_for_done_notify(E_Client *ec)