e_policy_wl: add zone varaible at E_Policy_Wl_Tzsh_Client 81/295681/1
authorSooChan Lim <sc1.lim@samsung.com>
Fri, 7 Jul 2023 02:24:56 +0000 (11:24 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 12 Jul 2023 09:06:12 +0000 (18:06 +0900)
E_Policy_Wl_Tzsh_Client uses this zone varaible when it needs the zone.

Change-Id: Ib4d2a4894b70b4fd8be5d860a8d3046a9df0c862

src/bin/e_policy_wl.c

index d1ef6b9..ca9b313 100644 (file)
@@ -100,7 +100,9 @@ typedef struct _E_Policy_Wl_Tzsh_Client
    Tzsh_Client_Handle_Type handle_type;
    E_Pixmap *ep;
    E_Client *ec;
+   E_Zone *zone;
    void *client_data;
+   Eina_List *events;
 } E_Policy_Wl_Tzsh_Client;
 
 typedef struct _E_Policy_Wl_Tzsh_Client_Data_Quickpanel
@@ -815,6 +817,30 @@ _e_policy_wl_tzsh_srv_state_broadcast(E_Policy_Wl_Tzsh_Srv *tzsh_srv, Eina_Bool
 // --------------------------------------------------------
 // E_Policy_Wl_Tzsh_Client
 // --------------------------------------------------------
+static Eina_Bool
+_e_policy_wl_tzsh_client_cb_client_zone_set(void *data, int type EINA_UNUSED, void *event)
+{
+   E_Policy_Wl_Tzsh_Client *tzsh_client;
+   E_Event_Client_Zone_Set *ev;
+
+   tzsh_client = data;
+   ev = event;
+
+   if (tzsh_client->ec != ev->ec)
+     goto end;
+
+   if (tzsh_client->zone == ev->zone)
+     goto end;
+
+   ELOGF("TZSH", "Change Zone | e_policy_wl_tzsh_client %p old(%p) new(%p)",
+         tzsh_client->ec, tzsh_client, tzsh_client->zone, ev->zone);
+
+   tzsh_client->zone = ev->zone;
+
+end:
+   return ECORE_CALLBACK_PASS_ON;
+}
+
 static E_Policy_Wl_Tzsh_Client *
 _e_policy_wl_tzsh_client_add(E_Policy_Wl_Tzsh *tzsh, struct wl_resource *res_tzsh_client, E_Pixmap *ep, E_Client *ec)
 {
@@ -827,10 +853,13 @@ _e_policy_wl_tzsh_client_add(E_Policy_Wl_Tzsh *tzsh, struct wl_resource *res_tzs
    tzsh_client->res_tzsh_client = res_tzsh_client;
    tzsh_client->ep = ep;
    tzsh_client->ec = ec;
+   tzsh_client->zone = e_comp_zone_find_by_ec(ec);
    tzsh_client->tzsh->client_list = eina_list_append(tzsh_client->tzsh->client_list, tzsh_client);
 
    polwl->tzsh_clients = eina_list_append(polwl->tzsh_clients, tzsh_client);
 
+   E_LIST_HANDLER_APPEND(tzsh_client->events, E_EVENT_CLIENT_ZONE_SET, _e_policy_wl_tzsh_client_cb_client_zone_set, tzsh_client);
+
 #ifdef TZSH_DEBUG
    _print_tzsh_client_info();
 #endif
@@ -843,6 +872,8 @@ _e_policy_wl_tzsh_client_del(E_Policy_Wl_Tzsh_Client *tzsh_client)
 {
    if (!tzsh_client) return;
 
+   E_FREE_LIST(tzsh_client->events, ecore_event_handler_del);
+
    if (tzsh_client->tzsh)
      tzsh_client->tzsh->service_list = eina_list_remove(tzsh_client->tzsh->service_list, tzsh_client);
 
@@ -5649,18 +5680,23 @@ _tzsh_softkey_iface_cb_support_check(struct wl_client *client EINA_UNUSED, struc
 }
 
 static void
-_tzsh_softkey_show(E_Client *ec)
+_tzsh_softkey_show(E_Policy_Wl_Tzsh_Client *tzsh_client)
 {
+   E_Zone *zone;
+   E_Client *ec;
+
+   zone = tzsh_client->zone;
+   if (!zone) return;
+   ec = tzsh_client->ec;
    if (!ec) return;
-   if (!ec->zone) return;
 
    if (e_config->use_softkey)
      {
         E_Policy_Softkey *softkey;
-        softkey = e_policy_softkey_get(ec->zone);
+        softkey = e_policy_softkey_get(zone);
         if (softkey)
           {
-             ELOGF("TZ_SOFTKEY", "SHOW softkey", NULL);
+             ELOGF("TZ_SOFTKEY", "SHOW softkey", ec);
              e_policy_softkey_show(softkey);
           }
      }
@@ -5668,10 +5704,10 @@ _tzsh_softkey_show(E_Client *ec)
    if (e_config->use_softkey_service)
      {
         E_Service_Softkey *softkey_service;
-        softkey_service = e_service_softkey_get(ec->zone);
+        softkey_service = e_service_softkey_get(zone);
         if (softkey_service)
           {
-             ELOGF("TZ_SOFTKEY", "Request to SHOW softkey service. (service:%p)", NULL, softkey_service);
+             ELOGF("TZ_SOFTKEY", "Request to SHOW softkey service. (service:%p)", ec, softkey_service);
              e_service_softkey_visible_set(softkey_service, 1);
           }
         else
@@ -5708,19 +5744,24 @@ _tzsh_softkey_iface_cb_show(struct wl_client *client EINA_UNUSED, struct wl_reso
      return;
 
    tzsh_client_data_softkey->show_state = 1;
-   _tzsh_softkey_show(tzsh_client->ec);
+   _tzsh_softkey_show(tzsh_client);
 }
 
 static void
-_tzsh_softkey_hide(E_Client *ec)
+_tzsh_softkey_hide(E_Policy_Wl_Tzsh_Client *tzsh_client)
 {
+   E_Zone *zone;
+   E_Client *ec;
+
+   zone = tzsh_client->zone;
+   if (!zone) return;
+   ec = tzsh_client->ec;
    if (!ec) return;
-   if (!ec->zone) return;
 
    if (e_config->use_softkey)
      {
         E_Policy_Softkey *softkey;
-        softkey = e_policy_softkey_get(ec->zone);
+        softkey = e_policy_softkey_get(zone);
         if (softkey)
           {
              ELOGF("TZ_SOFTKEY", "HIDE softkey", NULL);
@@ -5731,10 +5772,10 @@ _tzsh_softkey_hide(E_Client *ec)
    if (e_config->use_softkey_service)
      {
         E_Service_Softkey *softkey_service;
-        softkey_service = e_service_softkey_get(ec->zone);
+        softkey_service = e_service_softkey_get(zone);
         if (softkey_service)
           {
-             ELOGF("TZ_SOFTKEY", "Request to HIDE softkey service. (service:%p)", NULL, softkey_service);
+             ELOGF("TZ_SOFTKEY", "Request to HIDE softkey service. (service:%p)", ec, softkey_service);
              e_service_softkey_visible_set(softkey_service, 0);
           }
         else
@@ -5771,7 +5812,7 @@ _tzsh_softkey_iface_cb_hide(struct wl_client *client EINA_UNUSED, struct wl_reso
      return;
 
    tzsh_client_data_softkey->show_state = 0;
-   _tzsh_softkey_hide(tzsh_client->ec);
+   _tzsh_softkey_hide(tzsh_client);
 }
 
 static void
@@ -5797,7 +5838,7 @@ _tzsh_softkey_iface_cb_state_set(struct wl_client *client EINA_UNUSED, struct wl
    if (e_config->use_softkey)
      {
         E_Policy_Softkey *softkey;
-        softkey = e_policy_softkey_get(tzsh_client->ec->zone);
+        softkey = e_policy_softkey_get(tzsh_client->zone);
         if (!softkey) return;
 
         switch (type)
@@ -5831,7 +5872,7 @@ _tzsh_softkey_iface_cb_state_set(struct wl_client *client EINA_UNUSED, struct wl
      {
         E_Service_Softkey *softkey_service;
 
-        softkey_service = e_service_softkey_get(tzsh_client->ec->zone);
+        softkey_service = e_service_softkey_get(tzsh_client->zone);
         if (!softkey_service) return;
 
         switch (type)
@@ -5868,6 +5909,7 @@ _tzsh_softkey_iface_cb_state_get(struct wl_client *client EINA_UNUSED, struct wl
    E_Policy_Wl_Tzsh_Client *tzsh_client;
    E_Policy_Softkey_Expand expand;
    E_Policy_Softkey_Opacity opacity;
+   E_Zone *zone;
    int visible;
    int val;
 
@@ -5880,6 +5922,8 @@ _tzsh_softkey_iface_cb_state_get(struct wl_client *client EINA_UNUSED, struct wl
    EINA_SAFETY_ON_NULL_RETURN(tzsh_client);
    EINA_SAFETY_ON_NULL_RETURN(tzsh_client->tzsh);
    EINA_SAFETY_ON_NULL_RETURN(tzsh_client->ec);
+   zone = tzsh_client->zone;
+   EINA_SAFETY_ON_NULL_RETURN(zone);
 
    if (!eina_list_data_find(polwl->tzsh_clients, tzsh_client))
      return;
@@ -5887,7 +5931,7 @@ _tzsh_softkey_iface_cb_state_get(struct wl_client *client EINA_UNUSED, struct wl
    if (e_config->use_softkey)
      {
         E_Policy_Softkey *softkey;
-        softkey = e_policy_softkey_get(tzsh_client->ec->zone);
+        softkey = e_policy_softkey_get(zone);
         if (!softkey) return;
 
         switch (type)
@@ -5933,7 +5977,7 @@ _tzsh_softkey_iface_cb_state_get(struct wl_client *client EINA_UNUSED, struct wl
    if (e_config->use_softkey_service)
      {
         E_Service_Softkey *softkey_service;
-        softkey_service = e_service_softkey_get(tzsh_client->ec->zone);
+        softkey_service = e_service_softkey_get(zone);
         if (!softkey_service) return;
 
         switch (type)
@@ -6014,7 +6058,7 @@ _tzsh_cb_softkey_destroy(struct wl_resource *res_tzsh_softkey)
         if (tzsh_client_data_softkey->show_state == 0)
           {
              ELOGF("TZ_SOFTKEY", "Request to Show softkey by destroying client", NULL);
-             _tzsh_softkey_show(tzsh_client->ec);
+             _tzsh_softkey_show(tzsh_client);
           }
      }
    E_FREE(tzsh_client->client_data);