return ret;
}
+static void
+_e_vis_client_remove(E_Client *ec)
+{
+ E_VIS_CLIENT_GET_OR_RETURN(vc, ec);
+ eina_hash_del_by_key(pol_vis->clients_hash, &ec);
+
+ if (pol_vis->activity == ec)
+ pol_vis->activity = NULL;
+
+ if (!stopping)
+ _e_vis_update_foreground_job_queue();
+}
+
+static void
+_e_vis_client_cb_client_destroy(struct wl_listener *listener, void *data)
+{
+ E_Vis_Client *vc;
+ E_Client *ec;
+
+ vc = wl_container_of(listener, vc, client_destroy_listener);
+ ec = vc->ec;
+
+ _e_vis_client_remove(ec);
+}
+
static void
_e_vis_ec_setup(E_Vis_Client *vc)
{
e_view_event_listener_add(view, E_VIEW_MOVE, &vc->view_move_listener);
vc->view_restack_listener.notify = _e_vis_client_cb_view_restack;
e_view_event_listener_add(view, E_VIEW_RESTACK, &vc->view_restack_listener);
+
+ // e_client listeners
+ vc->client_destroy_listener.notify = _e_vis_client_cb_client_destroy;
+ e_client_destroy_listener_add(ec, &vc->client_destroy_listener);
}
static void
e_view_event_listener_del(view, E_VIEW_RESTACK, &vc->view_restack_listener);
wl_list_remove(&vc->view_client_resize_listener.link);
+
+ wl_list_remove(&vc->client_destroy_listener.link);
}
static void
_e_vis_client_add(ec);
}
-static void
-_e_vis_client_remove(E_Client *ec)
-{
- E_VIS_CLIENT_GET_OR_RETURN(vc, ec);
- eina_hash_del_by_key(pol_vis->clients_hash, &ec);
-
- if (pol_vis->activity == ec)
- pol_vis->activity = NULL;
-
- if (!stopping)
- _e_vis_update_foreground_job_queue();
-}
-
-static void
-_e_vis_hook_client_del(void *data EINA_UNUSED, E_Client *ec)
-{
- E_VIS_CLIENT_GET_OR_RETURN(vc, ec);
-
- _e_vis_client_remove(ec);
-}
-
static void
_e_vis_cb_child_launch_done(void *data, Evas_Object *obj, const char *signal, const char *source)
{
_e_vis_event_init(void)
{
E_LIST_HOOK_APPEND(pol_vis->hooks, E_CLIENT_HOOK_NEW_CLIENT_POST, _e_vis_hook_new_client_post, NULL);
- E_LIST_HOOK_APPEND(pol_vis->hooks, E_CLIENT_HOOK_DEL, _e_vis_hook_client_del, NULL);
E_COMP_OBJECT_INTERCEPT_HOOK_APPEND(pol_vis->interceptors, E_COMP_OBJECT_INTERCEPT_HOOK_SHOW_HELPER, _e_vis_intercept_show, NULL);
E_COMP_OBJECT_INTERCEPT_HOOK_APPEND(pol_vis->interceptors, E_COMP_OBJECT_INTERCEPT_HOOK_HIDE, _e_vis_intercept_hide, NULL);