e_zone: move desk code to E_CLIENT_HOOK_FULLSCREEN callback 22/298222/1
authorSooChan Lim <sc1.lim@samsung.com>
Sun, 27 Aug 2023 23:58:19 +0000 (08:58 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 4 Sep 2023 02:36:41 +0000 (11:36 +0900)
For removing the dependency of the desk at e_client

Change-Id: I6e4d76a46501a46cab16201352e350b88c22e72d

src/bin/e_client.c
src/bin/e_client.h
src/bin/e_zone.c

index 2c97a64173cfff7e25457122dd6f2aeee86ebd66..6627a8244f31433c600af460bd6c2da92232a4eb 100644 (file)
@@ -93,6 +93,7 @@ static Eina_Inlist *_e_client_hooks[] =
    [E_CLIENT_HOOK_RESIZE_UPDATE] = NULL,
    [E_CLIENT_HOOK_RESIZE_END] = NULL,
    [E_CLIENT_HOOK_FULLSCREEN_PRE] = NULL,
+   [E_CLIENT_HOOK_FULLSCREEN] = NULL,
    [E_CLIENT_HOOK_DEL] = NULL,
    [E_CLIENT_HOOK_UNREDIRECT] = NULL,
    [E_CLIENT_HOOK_REDIRECT] = NULL,
@@ -4899,75 +4900,19 @@ e_client_unmaximize(E_Client *ec, E_Maximize max)
 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);
 
-   zone = e_comp_zone_find_by_ec(ec);
-   if (!zone) return;
-
    if ((ec->shaded) || (ec->shading) || (ec->fullscreen)) return;
 
+   // call the fullscreen_pre hook of a client
    _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_policy = policy;
 
-   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);
-     }
+   // call the fullscreen hook of a client
+   _e_client_hook_call(E_CLIENT_HOOK_FULLSCREEN, ec);
 
-   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);
 
    _e_client_event_simple(ec, E_EVENT_CLIENT_FULLSCREEN);
index 3750a926f501170201067933e9f0a5f2655029a4..4777c407c2686f5ac6a4c5d73dffc8e9811088ce 100644 (file)
@@ -256,6 +256,7 @@ typedef enum _E_Client_Hook_Point
    E_CLIENT_HOOK_RESIZE_UPDATE,
    E_CLIENT_HOOK_RESIZE_END,
    E_CLIENT_HOOK_FULLSCREEN_PRE,
+   E_CLIENT_HOOK_FULLSCREEN,
    E_CLIENT_HOOK_DEL,
    E_CLIENT_HOOK_UNREDIRECT,
    E_CLIENT_HOOK_REDIRECT,
index dd673a797f726bad8d163446b7be02dc96150520..d5b76e80148d0ac937255065c7581cec93b3d4b2 100644 (file)
@@ -955,6 +955,88 @@ _e_zone_cb_hook_client_activate_done(void *d, E_Client *ec)
      }
 }
 
+static void
+_e_zone_cb_hook_client_fullscreen(void *d, E_Client *ec)
+{
+   E_Zone *zone;
+   E_Desk *desk, *nocomp_ec_desk;
+   int x, y, w, h;
+
+   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;
+
+   desk = e_zone_desk_find_by_ec(zone, ec);
+   EINA_SAFETY_ON_NULL_RETURN(desk);
+
+   if (ec->skip_fullscreen) return;
+
+   if (!desk->visible) return;
+
+   if (ec->new_client)
+     {
+        ec->need_fullscreen = 1;
+        return;
+     }
+
+   nocomp_ec_desk = e_zone_desk_find_by_ec(zone, e_comp->nocomp_ec);
+   if (e_comp->nocomp_ec && (desk == nocomp_ec_desk))
+     e_comp->nocomp_ec = ec;
+   desk->fullscreen_clients = eina_list_append(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) ||
+       (ec->fullscreen_policy == E_FULLSCREEN_RESIZE))
+     {
+        e_client_frame_geometry_set(ec, zone->x, zone->y, zone->w, zone->h);
+     }
+   else if (ec->fullscreen_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);
+
+   evas_object_smart_callback_call(ec->frame, "fullscreen", NULL);
+}
+
 static void
 _e_zone_client_data_set(E_Zone *zone, E_Client *ec)
 {
@@ -1069,6 +1151,7 @@ e_zone_new(int num, int id, int x, int y, int w, int h)
    E_LIST_HOOK_APPEND(zone->ec_hooks, E_CLIENT_HOOK_MAXIMIZE, _e_zone_cb_hook_client_maximize, zone);
    E_LIST_HOOK_APPEND(zone->ec_hooks, E_CLIENT_HOOK_UNMAXIMIZE, _e_zone_cb_hook_client_unmaximize, zone);
    E_LIST_HOOK_APPEND(zone->ec_hooks, E_CLIENT_HOOK_ACTIVATE_DONE, _e_zone_cb_hook_client_activate_done, zone);
+   E_LIST_HOOK_APPEND(zone->ec_hooks, E_CLIENT_HOOK_FULLSCREEN, _e_zone_cb_hook_client_fullscreen, zone);
 
    if (starting) return zone;