e_service_taskbar: remove the use of ec->zone 01/295301/1
authorSooChan Lim <sc1.lim@samsung.com>
Tue, 4 Jul 2023 07:58:46 +0000 (16:58 +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: I2a02ee040225e84334a52edf1d17fec67afc26a2

src/bin/services/e_service_taskbar.c
src/bin/services/e_service_taskbar.h

index cc07113..da6d52d 100644 (file)
@@ -20,6 +20,7 @@ e_service_taskbar_client_get(void)
 static void
 _taskbar_client_unset(void)
 {
+   E_FREE_LIST(_taskbar_service->events, ecore_event_handler_del);
    E_FREE_FUNC(_taskbar_del_hook, e_client_hook_del);
    E_FREE(_taskbar_service);
 }
@@ -33,10 +34,34 @@ _taskbar_hook_client_del(void *d EINA_UNUSED, E_Client *ec)
 
    ELOGF("TASKBAR","Del Client", ec);
 
-   e_zone_obstacle_remove(ec->zone, ec);
+   e_zone_obstacle_remove(_taskbar_service->zone, ec);
    _taskbar_client_unset();
 }
 
+static Eina_Bool
+_taskbar_cb_client_zone_set(void *data, int type EINA_UNUSED, void *event)
+{
+   E_Service_Taskbar *taskbar_service;
+   E_Event_Client_Zone_Set *ev;
+
+   taskbar_service = data;
+   ev = event;
+
+   if (taskbar_service->ec != ev->ec)
+     goto end;
+
+   if (taskbar_service->zone == ev->zone)
+     goto end;
+
+   ELOGF("TASKBAR", "Change Zone | taskbar_service %p old(%p) new(%p)",
+         taskbar_service->ec, taskbar_service, taskbar_service->zone, ev->zone);
+
+   taskbar_service->zone = ev->zone;
+
+end:
+   return ECORE_CALLBACK_PASS_ON;
+}
+
 EINTERN Eina_Bool
 e_service_taskbar_client_set(E_Client *ec)
 {
@@ -58,6 +83,7 @@ e_service_taskbar_client_set(E_Client *ec)
    ELOGF("TASKBAR","Set Client", ec);
 
    taskbar_service->ec = ec;
+   taskbar_service->zone = e_comp_zone_find_by_ec(ec);
    taskbar_service->x = ec->x;
    taskbar_service->y = ec->y;
    taskbar_service->w = ec->w;
@@ -67,6 +93,7 @@ e_service_taskbar_client_set(E_Client *ec)
 
    _taskbar_del_hook =
       e_client_hook_add(E_CLIENT_HOOK_DEL, _taskbar_hook_client_del, NULL);
+   E_LIST_HANDLER_APPEND(taskbar_service->events, E_EVENT_CLIENT_ZONE_SET, _taskbar_cb_client_zone_set, taskbar_service);
 
    // set taskbar layer
    if (e_config->use_desk_area)
@@ -85,7 +112,7 @@ e_service_taskbar_client_set(E_Client *ec)
    // set skip focus
    ec->icccm.accepts_focus = ec->icccm.take_focus = 0;
 
-   e_zone_obstacle_add(ec->zone, ec,
+   e_zone_obstacle_add(taskbar_service->zone, ec,
                        &(Eina_Rectangle){_taskbar_service->x, _taskbar_service->y, _taskbar_service->w, _taskbar_service->h},
                        0);
 
@@ -105,7 +132,7 @@ _e_service_taskbar_update(E_Service_Taskbar *taskbar_service)
    if (taskbar_service->place_type == 0)
      {
         taskbar_service->x = 0;
-        taskbar_service->y = ec->zone->h - taskbar_service->h;
+        taskbar_service->y = taskbar_service->zone->h - taskbar_service->h;
         vertical = EINA_FALSE;
      }
    else if (taskbar_service->place_type == 1)
@@ -122,12 +149,12 @@ _e_service_taskbar_update(E_Service_Taskbar *taskbar_service)
      }
    else
      {
-        taskbar_service->x = ec->zone->w - taskbar_service->w;
+        taskbar_service->x = taskbar_service->zone->w - taskbar_service->w;
         taskbar_service->y = 0;
         vertical = EINA_TRUE;
      }
 
-   e_zone_obstacle_update(ec->zone, ec,
+   e_zone_obstacle_update(taskbar_service->zone, ec,
                           &(Eina_Rectangle){taskbar_service->x, taskbar_service->y, taskbar_service->w, taskbar_service->h},
                           vertical);
 }
index 801367a..fcde94b 100644 (file)
@@ -8,6 +8,10 @@ typedef struct _E_Service_Taskbar E_Service_Taskbar;
 struct _E_Service_Taskbar
 {
    E_Client *ec;
+   E_Zone *zone;
+
+   Eina_List *events;
+
    int place_type;
    int x, y;
    unsigned int w, h;