e_service_cbhm: remove the use of ec->zone 98/295298/1
authorSooChan Lim <sc1.lim@samsung.com>
Tue, 4 Jul 2023 02:22:40 +0000 (11:22 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 5 Jul 2023 02:01:10 +0000 (11:01 +0900)
The zone variable at ec will be deleted.

Change-Id: Ic9cca680e6ae1dcfa5270642e27b377e159f3ea5

src/bin/services/e_service_cbhm.c

index 4985131..e663952 100644 (file)
@@ -8,10 +8,12 @@ typedef struct _E_Policy_Cbhm E_Policy_Cbhm;
 struct _E_Policy_Cbhm
 {
    E_Client *ec; /* cbhm service client */
+   E_Zone *zone;
 
    Eina_Bool show_block;
    Eina_List *hooks;
    Eina_List *intercept_hooks;
+   Eina_List *events;
 };
 
 static E_Policy_Cbhm *_pol_cbhm = NULL;
@@ -25,6 +27,7 @@ _cbhm_get()
 static void
 _cbhm_free(E_Policy_Cbhm *cbhm)
 {
+   E_FREE_LIST(cbhm->events, ecore_event_handler_del);
    E_FREE_LIST(cbhm->hooks, e_client_hook_del);
    E_FREE_LIST(cbhm->intercept_hooks, e_comp_object_intercept_hook_del);
    E_FREE(_pol_cbhm);
@@ -71,6 +74,30 @@ _cbhm_hook_client_del(void *d, E_Client *ec)
 }
 
 static Eina_Bool
+_cbhm_cb_client_zone_set(void *data, int type EINA_UNUSED, void *event)
+{
+   E_Policy_Cbhm *cbhm;
+   E_Event_Client_Zone_Set *ev;
+
+   cbhm = data;
+   ev = event;
+
+   if (cbhm->ec != ev->ec)
+     goto end;
+
+   if (cbhm->zone == ev->zone)
+     goto end;
+
+   ELOGF("CBHM", "Change Zone | taskbar_service %p old(%p) new(%p)",
+         cbhm->ec, cbhm, cbhm->zone, ev->zone);
+
+   cbhm->zone = ev->zone;
+
+end:
+   return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
 _cbhm_intercept_hook_show(void *d, E_Client *ec)
 {
    E_Policy_Cbhm *cbhm;
@@ -95,14 +122,16 @@ static void
 _e_cbhm_vis_change(E_Policy_Cbhm *cbhm, Eina_Bool vis)
 {
    E_Client *ec;
+   E_Zone *zone;
    Eina_Bool cur_vis = EINA_FALSE;
    int x, y, w, h;
 
    ec = cbhm->ec;
+   zone = cbhm->zone;
 
    evas_object_geometry_get(ec->frame, &x, &y, &w, &h);
 
-   if (E_INTERSECTS(x, y, w, h, ec->zone->x, ec->zone->y, ec->zone->w, ec->zone->h))
+   if (E_INTERSECTS(x, y, w, h, zone->x, zone->y, zone->w, zone->h))
      cur_vis = evas_object_visible_get(ec->frame);
 
    if (cur_vis == vis)
@@ -183,6 +212,7 @@ e_service_cbhm_client_set(E_Client *ec)
    _pol_cbhm = cbhm;
 
    cbhm->ec = ec;
+   cbhm->zone = e_comp_zone_find_by_ec(ec);
    cbhm->show_block = EINA_TRUE;
 
    // set skip iconify
@@ -195,6 +225,7 @@ e_service_cbhm_client_set(E_Client *ec)
 
    evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_SHOW, _cbhm_cb_evas_show, cbhm);
    E_CLIENT_HOOK_APPEND(cbhm->hooks, E_CLIENT_HOOK_DEL, _cbhm_hook_client_del, cbhm);
+   E_LIST_HANDLER_APPEND(cbhm->events, E_EVENT_CLIENT_ZONE_SET, _cbhm_cb_client_zone_set, cbhm);
    E_COMP_OBJECT_INTERCEPT_HOOK_APPEND(cbhm->intercept_hooks, E_COMP_OBJECT_INTERCEPT_HOOK_SHOW_HELPER, _cbhm_intercept_hook_show, cbhm);
 }