EINA_LIST_FOREACH(e_client_focus_stack_get(), l, ec)
{
if ((!ec->iconic) && (evas_object_visible_get(ec->frame) || ec->changes.visible) &&
- ((ec->desk == desk) || ((ec->zone == desk->zone) && ec->sticky)) &&
+ ((ec->desk == desk) || (e_zone_has_ec(desk->zone, ec) && ec->sticky)) &&
(ec->icccm.accepts_focus || ec->icccm.take_focus) &&
(ec->netwm.type != E_WINDOW_TYPE_DOCK) &&
(ec->netwm.type != E_WINDOW_TYPE_TOOLBAR) &&
static void
_e_desk_show_end(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
{
+ E_Zone *zone;
E_Client *ec = data;
ec->desk->animate_count--;
e_comp_object_effect_unclip(ec->frame);
ec->hidden = 0;
if (!ec->visible) evas_object_show(ec->frame);
- if (ec->desk != e_desk_current_get(ec->zone)) return;
+ zone = e_comp_zone_find_by_ec(ec);
+ if (ec->desk != e_desk_current_get(zone)) return;
if (!ec->desk->animate_count) e_desk_flip_end(ec->desk);
}
E_CLIENT_FOREACH(ec)
{
- if (ec->zone != zone) continue;
+ if (!e_zone_has_ec(zone, ec)) continue;
if ((dx != 0) || (dy != 0))
evas_object_move(ec->frame, ec->x + dx, ec->y + dy);
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(zone == ec->zone, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(e_zone_has_ec(zone, ec), EINA_FALSE);
// check in the list...
EINA_LIST_FOREACH(zone->obstacles, l, obs)
if (!zone) return EINA_FALSE;
if (!ec) return EINA_FALSE;
- if (zone != ec->zone) return EINA_FALSE;
+ if (!e_zone_has_ec(zone, ec)) return EINA_FALSE;
EINA_LIST_FOREACH(zone->obstacles, l, obs)
{
if (!zone) return;
if (!ec) return;
- if (zone != ec->zone) return;
+ if (!e_zone_has_ec(zone, ec)) return;
EINA_LIST_FOREACH_SAFE(zone->obstacles, l, ll, obs)
{
EINTERN void
e_zone_client_add(E_Zone *zone, E_Client *ec)
{
+ E_Zone *ec_zone;
+
+ ec_zone = e_comp_zone_find_by_ec(ec);
+
/* 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;
- if (ec->zone)
+ if (ec_zone)
{
/* first guess -- get offset from old zone, and apply to new zone */
- x = zone->x + (ec->x - ec->zone->x);
- y = zone->y + (ec->y - ec->zone->y);
+ x = zone->x + (ec->x - ec_zone->x);
+ y = zone->y + (ec->y - ec_zone->y);
}
else
x = ec->x, y = ec->y;
// 2. This code should be removed because e_client_zone_set() is called
// inside e_client_desk_set(). It makes the infinite loop calls(circular calls).
// e_client_desk_set() -> e_client_zone_set() -> e_zone_client_add() -> e_client_desk_set() -> ... and so on.
- if ((!ec->desk) || (ec->desk->zone != ec->zone))
- e_client_desk_set(ec, e_desk_current_get(ec->zone));
+ if ((!ec->desk) || (ec->desk->zone != ec_zone))
+ e_client_desk_set(ec, e_desk_current_get(ec_zone));
e_client_res_change_geometry_save(ec);
e_client_res_change_geometry_restore(ec);