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);
}
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)
{
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;
_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)
// 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);
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)
}
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);
}