e_client: remove the use of ec->zone 89/297589/1
authorSooChan Lim <sc1.lim@samsung.com>
Fri, 18 Aug 2023 07:38:12 +0000 (16:38 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 21 Aug 2023 09:23:59 +0000 (18:23 +0900)
The zone variable at e_client will be deprecated.

Change-Id: I52674f3755ad11ece97e4527498fe78ec95dd3d8

src/bin/e_client.c

index ab5c8e2..74a37be 100644 (file)
@@ -518,11 +518,15 @@ _e_client_transform_resize_handle(E_Client *ec)
    int button_id;
    int cx, cy;
    Evas_Point current, moveinfo;
+   E_Zone *zone;
 
    if (e_object_is_del(E_OBJECT(ec))) return;
    if (e_client_util_ignored_get(ec)) return;
    if (!ec->transformed) return;
 
+   zone = e_comp_zone_find_by_ec(ec);
+   if (!zone) return;
+
    button_id = ec->moveinfo.down.button;
 
    org_w = ec->mouse.last_down[button_id - 1].w;
@@ -590,8 +594,8 @@ _e_client_transform_resize_handle(E_Client *ec)
           new_h = ec->moveinfo.down.h + (current.y - moveinfo.y);
      }
 
-   new_w = MIN(new_w, ec->zone->w);
-   new_h = MIN(new_h, ec->zone->h);
+   new_w = MIN(new_w, zone->w);
+   new_h = MIN(new_h, zone->h);
 
    /* step 4: move to new position */
    if ((ec->resize_mode == E_POINTER_RESIZE_TL) ||
@@ -718,7 +722,7 @@ EINTERN E_Client *
 e_client_check_fully_contain_by_above(E_Client *ec, Eina_Bool check_layer)
 {
    E_Client *above = NULL;
-   E_Zone *_z = NULL;
+   E_Zone *zone = NULL;
    int x = 0, y = 0, w = 0, h = 0;
    int ax = 0, ay = 0, aw = 0, ah = 0;
 
@@ -726,11 +730,9 @@ e_client_check_fully_contain_by_above(E_Client *ec, Eina_Bool check_layer)
 
    e_client_geometry_get(ec, &x, &y, &w, &h);
 
-   if (ec->zone)
-     {
-        _z = ec->zone;
-        E_RECTS_CLIP_TO_RECT(x, y, w, h, _z->x, _z->y, _z->w, _z->h);
-     }
+   zone = e_comp_zone_find_by_ec(ec);
+   if (zone)
+     E_RECTS_CLIP_TO_RECT(x, y, w, h, zone->x, zone->y, zone->w, zone->h);
 
    above = e_client_above_get(ec);
    while (above)
@@ -855,7 +857,7 @@ _e_client_focus_can_take(E_Client *ec)
    if (ec->visibility.force_obscured) return EINA_FALSE;
    if (!_e_client_focus_can_take_by_vis_obscured(ec)) return EINA_FALSE;
 
-   zone = ec->zone;
+   zone = e_comp_zone_find_by_ec(ec);
    if (zone)
      {
         e_client_geometry_get(ec, &x, &y, &w, &h);
@@ -927,14 +929,16 @@ static E_Client *
 _e_client_revert_focus_get(E_Client *ec)
 {
    E_Client *pec = NULL, *focus_ec = NULL;
+   E_Zone *zone;
    E_Desk *desk = NULL;
 
    if (stopping) return NULL;
    if (!ec)
      return _e_client_find_next_focus(NULL);
 
-   if (!ec->zone) return NULL;
-   desk = e_desk_current_get(ec->zone);
+   zone = e_comp_zone_find_by_ec(ec);
+   if (!zone) return NULL;
+   desk = e_desk_current_get(zone);
    if (!desk) return NULL;
    if (!e_comp_client_zone_is_displaying(ec)) return NULL;
 
@@ -1727,10 +1731,12 @@ _e_client_resize_handle(E_Client *ec)
    new_h = h;
    if (e_config->screen_limits == E_CLIENT_OFFSCREEN_LIMIT_ALLOW_NONE)
      {
-        if (ec->zone)
+        E_Zone *zone;
+        zone = e_comp_zone_find_by_ec(ec);
+        if (zone)
           {
-             w = MIN(w, ec->zone->w);
-             h = MIN(h, ec->zone->h);
+             w = MIN(w, zone->w);
+             h = MIN(h, zone->h);
           }
      }
    e_client_resize_limit(ec, &new_w, &new_h);
@@ -1995,12 +2001,14 @@ _e_client_zones_layout_calc(E_Client *ec, int *zx, int *zy, int *zw, int *zh)
 {
    int x, y, w, h;
    E_Zone *zone_above, *zone_below, *zone_left, *zone_right;
+   E_Zone *zone;
 
-   if (!ec->zone) return;
-   x = ec->zone->x;
-   y = ec->zone->y;
-   w = ec->zone->w;
-   h = ec->zone->h;
+   zone = e_comp_zone_find_by_ec(ec);
+   if (!zone) return;
+   x = zone->x;
+   y = zone->y;
+   w = zone->w;
+   h = zone->h;
 
    if (eina_list_count(e_comp->zones) == 1)
      {
@@ -2026,22 +2034,22 @@ _e_client_zones_layout_calc(E_Client *ec, int *zx, int *zy, int *zw, int *zh)
      w = zone_right->x + zone_right->w;
 
    if (zone_left)
-     w = ec->zone->x + ec->zone->w;
+     w = zone->x + zone->w;
 
    if (zone_below)
      h = zone_below->y + zone_below->h;
 
    if (zone_above)
-     h = ec->zone->y + ec->zone->h;
+     h = zone->y + zone->h;
 
    if ((zone_left) && (zone_right))
-     w = ec->zone->w + zone_right->x;
+     w = zone->w + zone_right->x;
 
    if ((zone_above) && (zone_below))
-     h = ec->zone->h + zone_below->y;
+     h = zone->h + zone_below->y;
 
-   if (x) x -= ec->zone->w;
-   if (y) y -= ec->zone->h;
+   if (x) x -= zone->w;
+   if (y) y -= zone->h;
 
    if (zx) *zx = x > 0 ? x : 0;
    if (zy) *zy = y > 0 ? y : 0;
@@ -2055,8 +2063,10 @@ _e_client_stay_within_canvas(E_Client *ec, int x, int y, int *new_x, int *new_y)
    int new_x_max, new_y_max;
    int zw, zh;
    Eina_Bool lw, lh;
+   E_Zone *zone;
 
-   if (!ec->zone)
+   zone = e_comp_zone_find_by_ec(ec);
+   if (!zone)
      {
         if (new_x) *new_x = x;
         if (new_y) *new_y = y;
@@ -2108,8 +2118,10 @@ _e_client_stay_within_canvas_margin(E_Client *ec, int x, int y, int *new_x, int
    int margin_w, margin_h;
    int zw, zh;
    int cw, ch;
+   E_Zone *zone;
 
-   if (!ec->zone)
+   zone = e_comp_zone_find_by_ec(ec);
+   if (!zone)
      {
         if (new_x) *new_x = x;
         if (new_y) *new_y = y;
@@ -2149,9 +2161,11 @@ _e_client_zone_update(E_Client *ec)
    E_Zone *zone;
 
    /* still within old zone - leave it there */
-   if (ec->zone && E_INTERSECTS(ec->x, ec->y, ec->w, ec->h,
-                    ec->zone->x, ec->zone->y, ec->zone->w, ec->zone->h))
+   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)
      {
@@ -2254,8 +2268,10 @@ _e_client_cb_evas_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN
 #else
    if (ec->focused)
      {
-        if (!E_INTERSECTS(ec->x, ec->y, ec->w, ec->h,
-                          ec->zone->x, ec->zone->y, ec->zone->w, ec->zone->h))
+        E_Zone *zone;
+        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))
           {
              e_client_revert_focus(ec);
           }
@@ -2386,11 +2402,14 @@ _e_client_maximize(E_Client *ec, E_Maximize max)
    int ecx, ecy, ecw, ech;
    int desk_x, desk_y, desk_w, desk_h;
    Eina_Bool override = ec->maximize_override;
+   E_Zone *zone;
 
-   if (!ec->zone) return;
    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;
@@ -2460,7 +2479,7 @@ _e_client_maximize(E_Client *ec, E_Maximize max)
                }
              else
                {
-                  e_zone_desk_useful_geometry_get(ec->zone, ec->desk, &zx, &zy, &zw, &zh);
+                  e_zone_desk_useful_geometry_get(zone, ec->desk, &zx, &zy, &zw, &zh);
                }
           }
         else
@@ -2612,6 +2631,7 @@ _e_client_apply_auto_placement(E_Client *ec)
    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))
@@ -2621,7 +2641,11 @@ _e_client_apply_auto_placement(E_Client *ec)
      }
 
    int zx = 0, zy = 0, zw = 0, zh = 0;
-   e_zone_useful_geometry_get(ec->zone, &zx, &zy, &zw, &zh);
+
+   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);
 
@@ -2652,7 +2676,7 @@ _e_client_apply_auto_placement(E_Client *ec)
                                     ec->x, ec->y, ec->w, ec->h,
                                     &new_x, &new_y);
         else
-          e_place_zone_region_smart(ec->zone, skiplist,
+          e_place_zone_region_smart(zone, skiplist,
                                     ec->x, ec->y, ec->w, ec->h,
                                     &new_x, &new_y);
 
@@ -2661,12 +2685,12 @@ _e_client_apply_auto_placement(E_Client *ec)
    else if (e_config->window_placement_policy == E_WINDOW_PLACEMENT_MANUAL)
      {
         type = 3;
-        e_place_zone_manual(ec->zone, ec->w, t, &new_x, &new_y);
+        e_place_zone_manual(zone, ec->w, t, &new_x, &new_y);
      }
    else
      {
         type = 0;
-        e_place_zone_cursor(ec->zone, ec->x, ec->y, ec->w, ec->h,
+        e_place_zone_cursor(zone, ec->x, ec->y, ec->w, ec->h,
                             t, &new_x, &new_y);
      }
 
@@ -2686,6 +2710,7 @@ _e_client_eval(E_Client *ec)
    int ex, ey, ew, eh;
    int px, py, pw, ph;
    int nw, nh;
+   E_Zone *zone;
 
    if (e_object_is_del(E_OBJECT(ec)))
      {
@@ -2702,16 +2727,17 @@ _e_client_eval(E_Client *ec)
         return;
      }
 
-   if ((ec->new_client) && (!e_client_util_ignored_get(ec)) && (ec->zone))
+   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(ec->zone, &zx, &zy, &zw, &zh);
+        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, ec->zone->w);
-             th = MIN(ec->h, ec->zone->h);
+             tw = MIN(ec->w, zone->w);
+             th = MIN(ec->h, zone->h);
              e_client_size_set(ec, tw, th);
           }
 
@@ -2736,7 +2762,7 @@ _e_client_eval(E_Client *ec)
                   if (ec->parent->zone != e_zone_current_get())
                     {
                        e_client_zone_set(ec, ec->parent->zone);
-                       e_zone_useful_geometry_get(ec->zone, &zx, &zy, &zw, &zh);
+                       e_zone_useful_geometry_get(zone, &zx, &zy, &zw, &zh);
                     }
 
                   if (evas_object_visible_get(ec->parent->frame))
@@ -2814,22 +2840,22 @@ _e_client_eval(E_Client *ec)
         /* if the explicit geometry request asks for the app to be
          * in another zone - well move it there */
         {
-           E_Zone *zone = NULL;
+           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)))
-             zone = e_comp_zone_xy_get(x, y);
+             zone1 = e_comp_zone_xy_get(x, y);
 
-           if (!zone)
+           if (!zone1)
              {
-                zone = e_comp_zone_xy_get(ec->x + (ec->w / 2), ec->y + (ec->h / 2));
-                if (zone)
+                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 != zone))
+                     if (z2 && (z2 != zone1))
                        {
                           size_t psz = 0;
                           E_Zone *zf = z2;
@@ -2857,16 +2883,16 @@ _e_client_eval(E_Client *ec)
                        }
                   }
              }
-           if (!zone)
-             zone = e_comp_zone_xy_get(ec->x, ec->y);
-           if (!zone)
-             zone = e_comp_zone_xy_get(ec->x + ec->w - 1, ec->y);
-           if (!zone)
-             zone = e_comp_zone_xy_get(ec->x + ec->w - 1, ec->y + ec->h - 1);
-           if (!zone)
-             zone = e_comp_zone_xy_get(ec->x, ec->y + ec->h - 1);
-           if ((zone) && (zone != ec->zone))
-             e_client_zone_set(ec, zone);
+           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);
         }
      }
 
@@ -3022,7 +3048,7 @@ _e_client_eval(E_Client *ec)
    // This code executes at E_CLIENT_HOOK_EVAL_END callback at e_focus_policy_topmost.c and e_focus_policy_history.c
 #else
    if ((!ec->input_only) && (!ec->iconic) &&
-       ((!ec->zone) || e_client_util_desk_visible(ec, e_desk_current_get(ec->zone))) &&
+       ((!zone) || e_client_util_desk_visible(ec, e_desk_current_get(zone))) &&
        ((ec->take_focus) || (ec->want_focus)))
      {
         ec->take_focus = 0;
@@ -3422,9 +3448,9 @@ _e_client_candidate_focus(E_Zone *zone, E_Client *reverted_focus_ec)
 
         if (e_object_is_del(E_OBJECT(ec))) continue;
         if (e_client_util_ignored_get(ec)) continue;
-        if (ec->zone != zone) continue;
-        if (!e_desk_current_get(ec->zone)) continue;
-        if (ec->desk != e_desk_current_get(ec->zone)) continue;
+        if (!e_zone_has_ec(zone, ec)) continue;
+        if (!e_desk_current_get(zone)) continue;
+        if (ec->desk != e_desk_current_get(zone)) continue;
 
         if (!(ec->icccm.accepts_focus || ec->icccm.take_focus)) continue;
         if (ec->lock_focus_in || ec->lock_focus_out) continue;
@@ -4269,6 +4295,7 @@ 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);
@@ -4335,7 +4362,8 @@ e_client_desk_set(E_Client *ec, E_Desk *desk)
              ecore_event_add(E_EVENT_CLIENT_DESK_SET, ev, (Ecore_End_Cb)_e_client_event_desk_set_free, NULL);
           }
 
-        if (old_desk->zone == ec->zone)
+        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);
@@ -4591,6 +4619,8 @@ e_client_res_change_geometry_save(E_Client *ec)
 EINTERN void
 e_client_res_change_geometry_restore(E_Client *ec)
 {
+   E_Zone *zone;
+
    struct
    {
       unsigned char valid : 1;
@@ -4605,7 +4635,9 @@ e_client_res_change_geometry_restore(E_Client *ec)
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
    if (!ec->pre_res_change.valid) return;
    if (ec->new_client) return;
-   if (!ec->zone) return;
+
+   zone = e_comp_zone_find_by_ec(ec);
+   if (!zone) return;
 
    memcpy(&pre_res_change, &ec->pre_res_change, sizeof(pre_res_change));
 
@@ -4631,7 +4663,7 @@ e_client_res_change_geometry_restore(E_Client *ec)
         ec->saved.w = ec->pre_res_change.saved.w;
         ec->saved.h = ec->pre_res_change.saved.h;
 
-        e_zone_useful_geometry_get(ec->zone, &zx, &zy, &zw, &zh);
+        e_zone_useful_geometry_get(zone, &zx, &zy, &zw, &zh);
 
         if (ec->saved.w > zw)
           ec->saved.w = zw;
@@ -4669,7 +4701,7 @@ e_client_zone_set(E_Client *ec, E_Zone *zone)
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
    E_OBJECT_CHECK(zone);
    E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE);
-   if (ec->zone == zone) return;
+   if (e_zone_has_ec(zone, ec)) return;
 
    ev = E_NEW(E_Event_Client_Zone_Set, 1);
    if (!ev) return;
@@ -4700,6 +4732,7 @@ e_client_zone_set(E_Client *ec, E_Zone *zone)
         evas_object_move(ec->frame, x, y);
      }
 
+   // TODO: NEED TO DELETE LINE BELOW
    ec->zone = zone;
 
    ev->ec = ec;
@@ -5280,6 +5313,7 @@ e_client_focused_set(E_Client *ec)
 #else
    E_Client *ec2, *ec_unfocus = focused;
    Eina_List *l, *ll;
+   E_Zone *zone;
 
    if (ec == focused) return;
 
@@ -5291,15 +5325,16 @@ e_client_focused_set(E_Client *ec)
    focused = ec;
    g_mutex_unlock(&focused_ec_mutex);
 
-   if ((ec) && (ec->zone))
+   zone = e_comp_zone_find_by_ec(ec);
+   if (zone)
      {
         ec->focused = 1;
         e_client_urgent_set(ec, 0);
-        int x, total = ec->zone->desk_x_count * ec->zone->desk_y_count;
+        int x, total = zone->desk_x_count * zone->desk_y_count;
 
         for (x = 0; x < total; x++)
           {
-             E_Desk *desk = ec->zone->desks[x];
+             E_Desk *desk = zone->desks[x];
              /* if there's any fullscreen non-parents on this desk, unfullscreen them */
              EINA_LIST_FOREACH_SAFE(desk->fullscreen_clients, l, ll, ec2)
                {
@@ -5370,7 +5405,7 @@ e_client_focused_set(E_Client *ec)
 
    _e_client_event_simple(ec, E_EVENT_CLIENT_FOCUS_IN);
    if (ec->sticky && ec->desk && (!ec->desk->visible))
-     e_client_desk_set(ec, e_desk_current_get(ec->zone));
+     e_client_desk_set(ec, e_desk_current_get(zone));
 
    TRACE_DS_END();
 #endif
@@ -5524,13 +5559,13 @@ e_client_lost_windows_get(E_Zone *zone)
    E_OBJECT_TYPE_CHECK_RETURN(zone, E_ZONE_TYPE, NULL);
    EINA_LIST_FOREACH(e_comp->clients, l, ec)
      {
-        if (ec->zone != zone) continue;
+        if (!e_zone_has_ec(zone, ec)) continue;
         if (e_client_util_ignored_get(ec)) continue;
 
-        if (!E_INTERSECTS(ec->zone->x + loss_overlap,
-                          ec->zone->y + loss_overlap,
-                          ec->zone->w - (2 * loss_overlap),
-                          ec->zone->h - (2 * loss_overlap),
+        if (!E_INTERSECTS(zone->x + loss_overlap,
+                          zone->y + loss_overlap,
+                          zone->w - (2 * loss_overlap),
+                          zone->h - (2 * loss_overlap),
                           ec->x, ec->y, ec->w, ec->h))
           {
              list = eina_list_append(list, ec);
@@ -5618,11 +5653,13 @@ E_API void
 e_client_maximize(E_Client *ec, E_Maximize max)
 {
   int desk_x, desk_y;
+  E_Zone *zone;
 
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
 
-   if (!ec->zone) return;
+   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;
@@ -5671,7 +5708,7 @@ e_client_maximize(E_Client *ec, E_Maximize max)
         ec->saved.h = ec->client.h;
      }
 
-   ec->saved.zone = ec->zone->num;
+   ec->saved.zone = zone->num;
 
    _e_client_maximize(ec, max);
 
@@ -5684,9 +5721,13 @@ e_client_maximize(E_Client *ec, E_Maximize max)
 E_API void
 e_client_unmaximize(E_Client *ec, E_Maximize max)
 {
+   E_Zone *zone;
+
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-   if (!ec->zone) return;
+
+   zone = e_comp_zone_find_by_ec(ec);
+   if (!zone) return;
    if (!(max & E_MAXIMIZE_DIRECTION))
      {
         CRI("BUG: Unmaximize call without direction!");
@@ -5726,8 +5767,8 @@ e_client_unmaximize(E_Client *ec, E_Maximize max)
              // un-set maximized state.
              ec->maximized = E_MAXIMIZE_NONE;
              e_client_util_move_resize_without_frame(ec,
-                                                     ec->saved.x + ec->zone->x,
-                                                     ec->saved.y + ec->zone->y,
+                                                     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;
           }
@@ -5746,7 +5787,7 @@ e_client_unmaximize(E_Client *ec, E_Maximize max)
                   /* Remove vertical */
                   h = ec->saved.h;
                   vert = EINA_TRUE;
-                  y = ec->saved.y + ec->zone->y;
+                  y = ec->saved.y + zone->y;
                   if ((max & E_MAXIMIZE_VERTICAL) == E_MAXIMIZE_VERTICAL)
                     {
                        ec->maximized &= ~E_MAXIMIZE_VERTICAL;
@@ -5762,7 +5803,7 @@ e_client_unmaximize(E_Client *ec, E_Maximize max)
                {
                   /* Remove horizontal */
                   w = ec->saved.w;
-                  x = ec->saved.x + ec->zone->x;
+                  x = ec->saved.x + zone->x;
                   horiz = EINA_TRUE;
                   ec->maximized &= ~E_MAXIMIZE_HORIZONTAL;
                }
@@ -5797,10 +5838,13 @@ EINTERN void
 e_client_fullscreen(E_Client *ec, E_Fullscreen policy)
 {
    int x, y, w, h;
+   E_Zone *zone;
 
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-   if (!ec->zone) return;
+
+   zone = e_comp_zone_find_by_ec(ec);
+   if (!zone) return;
 
    if ((ec->shaded) || (ec->shading) || (ec->fullscreen)) return;
 
@@ -5827,13 +5871,13 @@ e_client_fullscreen(E_Client *ec, E_Fullscreen policy)
      }
    else
      {
-        ec->saved.x = ec->client.x - ec->zone->x;
-        ec->saved.y = ec->client.y - ec->zone->y;
+        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 = ec->zone->num;
+   ec->saved.zone = zone->num;
 
    if (ec->maximized)
      {
@@ -5851,7 +5895,7 @@ e_client_fullscreen(E_Client *ec, E_Fullscreen policy)
    if ((eina_list_count(e_comp->zones) > 1) ||
        (policy == E_FULLSCREEN_RESIZE))
      {
-        e_client_frame_geometry_set(ec, ec->zone->x, ec->zone->y, ec->zone->w, ec->zone->h);
+        e_client_frame_geometry_set(ec, zone->x, zone->y, zone->w, zone->h);
      }
    else if (policy == E_FULLSCREEN_ZOOM)
      {
@@ -5870,9 +5914,13 @@ e_client_fullscreen(E_Client *ec, E_Fullscreen policy)
 EINTERN void
 e_client_unfullscreen(E_Client *ec)
 {
+   E_Zone *zone;
+
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-   if (!ec->zone) return;
+
+   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;
@@ -5887,8 +5935,8 @@ e_client_unfullscreen(E_Client *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, ec->zone->x + ec->saved.x,
-                                           ec->zone->y + ec->saved.y,
+   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)
@@ -5930,7 +5978,6 @@ e_client_iconify(E_Client *ec)
          ec, ec->iconic, ec->argb, (unsigned int)ec->exp_iconify.not_raise,
          ec->exp_iconify.by_client, ec->exp_iconify.type);
 
-   if (!ec->zone) return;
    if (ec->shading || ec->iconic) return;
    if (ec->exp_iconify.skip_iconify && !iconified_by_client) return;
    if (ec->exp_iconify.skip_by_remote) return;
@@ -6001,7 +6048,6 @@ e_client_uniconify(E_Client *ec)
          ec->exp_iconify.by_client, ec->exp_iconify.type,
          cdata ? cdata->mapped : 0);
 
-   if (!ec->zone) return;
    if (ec->shading || (!ec->iconic)) return;
 
    TRACE_DS_BEGIN(CLIENT:UNICONIFY);
@@ -6144,8 +6190,6 @@ e_client_urgent_set(E_Client *ec, Eina_Bool urgent)
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
 
-   if (!ec->zone) return;
-
    urgent = !!urgent;
    if (urgent == ec->urgent) return;
    _e_client_event_property(ec, E_CLIENT_PROPERTY_URGENCY);
@@ -6170,7 +6214,6 @@ e_client_stick(E_Client *ec)
 
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-   if (!ec->zone) return;
    if (ec->sticky) return;
    desk = ec->desk;
    ec->desk = NULL;
@@ -6198,13 +6241,15 @@ EINTERN void
 e_client_unstick(E_Client *ec)
 {
    E_Desk *desk;
+   E_Zone *zone;
 
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-   if (!ec->zone) return;
    /* Set the desk before we unstick the client */
    if (!ec->sticky) return;
-   desk = e_desk_current_get(ec->zone);
+
+   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);
@@ -6223,7 +6268,7 @@ e_client_unstick(E_Client *ec)
 
    _e_client_event_property(ec, E_CLIENT_PROPERTY_STICKY);
 
-   e_client_desk_set(ec, e_desk_current_get(ec->zone));
+   e_client_desk_set(ec, e_desk_current_get(zone));
 }
 
 EINTERN void
@@ -6279,7 +6324,6 @@ e_client_comp_hidden_set(E_Client *ec, Eina_Bool hidden)
 {
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-   if (!ec->zone) return;
 
    hidden = !!hidden;
    if (ec->comp_hidden == hidden) return;
@@ -6293,7 +6337,6 @@ EINTERN void
 e_client_act_move_keyboard(E_Client *ec)
 {
    EINA_SAFETY_ON_NULL_RETURN(ec);
-   if (!ec->zone) return;
 
    if (!_e_client_move_begin(ec))
      return;
@@ -6311,7 +6354,6 @@ EINTERN void
 e_client_act_resize_keyboard(E_Client *ec)
 {
    EINA_SAFETY_ON_NULL_RETURN(ec);
-   if (!ec->zone) return;
 
    ec->resize_mode = E_POINTER_RESIZE_TL;
    ec->keyboard_resizing = 1;
@@ -6334,7 +6376,6 @@ e_client_act_move_begin(E_Client *ec, E_Binding_Event_Mouse_Button *ev)
 {
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-   if (!ec->zone) return;
    if (e_client_util_resizing_get(ec) || (ec->moving)) return;
    if (ev)
      {
@@ -6354,7 +6395,6 @@ e_client_act_move_end(E_Client *ec, E_Binding_Event_Mouse_Button *ev EINA_UNUSED
 {
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-   if (!ec->zone) return;
    if (!ec->moving) return;
    _e_client_move_end(ec);
    _e_client_action_finish();
@@ -6365,7 +6405,6 @@ e_client_act_resize_begin(E_Client *ec, E_Binding_Event_Mouse_Button *ev, E_Poin
 {
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-   if (!ec->zone) return;
    if (ec->lock_user_size || ec->shaded || ec->shading) return;
    if (e_client_util_resizing_get(ec) || (ec->moving)) return;
    if (ev)
@@ -6413,7 +6452,6 @@ e_client_act_resize_end(E_Client *ec, E_Binding_Event_Mouse_Button *ev EINA_UNUS
 {
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-   if (!ec->zone) return;
    if (e_client_util_resizing_get(ec))
      {
         _e_client_resize_end(ec);
@@ -6429,7 +6467,6 @@ e_client_act_menu_begin(E_Client *ec, E_Binding_Event_Mouse_Button *ev, int key)
 {
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-   if (!ec->zone) return;
 }
 
 EINTERN void
@@ -6437,7 +6474,6 @@ e_client_act_close_begin(E_Client *ec)
 {
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-   if (!ec->zone) return;
    if (ec->lock_close) return;
    if (ec->icccm.delete_request)
      {
@@ -6455,7 +6491,6 @@ e_client_act_kill_begin(E_Client *ec)
 {
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-   if (!ec->zone) return;
    if (ec->internal) return;
    if (ec->lock_close) return;
    if ((ec->netwm.pid > 1) && (e_config->kill_process))
@@ -6596,7 +6631,6 @@ e_client_signal_move_begin(E_Client *ec, const char *sig, const char *src EINA_U
 {
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-   if (!ec->zone) return;
 
    if (e_client_util_resizing_get(ec) || (ec->moving)) return;
    _e_client_moveinfo_gather(ec, sig);
@@ -6608,7 +6642,6 @@ e_client_signal_move_end(E_Client *ec, const char *sig EINA_UNUSED, const char *
 {
    E_OBJECT_CHECK(ec);
    E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
-   if (!ec->zone) return;
    if (!ec->moving) return;
    _e_client_move_end(ec);
 }
@@ -7558,11 +7591,14 @@ E_API Eina_Bool
 e_client_base_output_resolution_useful_geometry_get(E_Client *ec, int *x, int *y, int *w, int *h)
 {
    int zx, zy, zw, zh;
+   E_Zone *zone;
 
    E_OBJECT_CHECK_RETURN(ec, EINA_FALSE);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(ec->zone, EINA_FALSE);
 
-   e_zone_useful_geometry_get(ec->zone, &zx, &zy, &zw, &zh);
+   zone = e_comp_zone_find_by_ec(ec);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(zone, EINA_FALSE);
+
+   e_zone_useful_geometry_get(zone, &zx, &zy, &zw, &zh);
 
    if (x) *x = zx;
    if (y) *y = zy;