E_Client *ec = eda_client->ec;
E_Comp_Object *cw;
+ if (!e_desk_area_has_ec(eda, ec)) return;
+
// TODO: this code has to be refactoring
e_util_transform_del(ec->desk_area.transform);
ec->desk_area.transform = NULL;
_e_desk_area_client_data_del(eda, ec);
// wl_list remove
- wl_list_remove(&eda_client->comp_object_color_set.link);
- wl_list_remove(&eda_client->comp_object_resize.link);
+ if (eda_client->comp_object_color_set.notify)
+ wl_list_remove(&eda_client->comp_object_color_set.link);
+ if (eda_client->comp_object_resize.notify)
+ wl_list_remove(&eda_client->comp_object_resize.link);
+ if (eda_client->redirect.notify)
+ wl_list_remove(&eda_client->redirect.link);
+ if (eda_client->ping.notify)
+ wl_list_remove(&eda_client->ping.link);
+ if (eda_client->kill_request.notify)
+ wl_list_remove(&eda_client->kill_request.link);
+ if (eda_client->delete_request.notify)
+ wl_list_remove(&eda_client->delete_request.link);
+
wl_list_remove(&eda_client->comp_object_stack_below.link);
wl_list_remove(&eda_client->comp_object_stack_above.link);
wl_list_remove(&eda_client->comp_object_set_layer.link);
wl_list_remove(&eda_client->comp_object_lower.link);
wl_list_remove(&eda_client->comp_object_raise.link);
- wl_list_remove(&eda_client->redirect.link);
- wl_list_remove(&eda_client->ping.link);
- wl_list_remove(&eda_client->kill_request.link);
- wl_list_remove(&eda_client->delete_request.link);
wl_list_remove(&eda_client->client_activate_done.link);
wl_list_remove(&eda_client->client_unmaximize.link);
wl_list_remove(&eda_client->client_maximize.link);
e_client_unmaximize_listener_add(ec, &eda_client->client_unmaximize);
eda_client->client_activate_done.notify = _desk_area_cb_client_activate_done;
e_client_activate_done_listener_add(ec, &eda_client->client_activate_done);
- eda_client->delete_request.notify = _desk_area_cb_client_delete_request;
- e_client_delete_request_listener_add(ec, &eda_client->delete_request);
- eda_client->kill_request.notify = _desk_area_cb_client_kill_request;
- e_client_kill_request_listener_add(ec, &eda_client->kill_request);
- eda_client->ping.notify = _desk_area_cb_client_ping;
- e_client_ping_listener_add(ec, &eda_client->ping);
- eda_client->redirect.notify = _desk_area_cb_client_redirect;
- e_client_redirect_listener_add(ec, &eda_client->redirect);
// e_comp_object listeners
eda_client->comp_object_lower.notify = _desk_area_cb_comp_object_lower;
e_comp_object_stack_above_listener_add(ec->frame, &eda_client->comp_object_stack_above);
eda_client->comp_object_stack_below.notify = _desk_area_cb_comp_object_stack_below;
e_comp_object_stack_below_listener_add(ec->frame, &eda_client->comp_object_stack_below);
- eda_client->comp_object_resize.notify = _desk_area_cb_comp_object_resize;
- e_comp_object_resize_listener_add(ec->frame, &eda_client->comp_object_resize);
- eda_client->comp_object_color_set.notify = _desk_area_cb_comp_object_color_set;
- e_comp_object_color_set_listener_add(ec->frame, &eda_client->comp_object_color_set);
+
+ // needs ec->comp_data listeners
+ if (ec->comp_data)
+ {
+ eda_client->redirect.notify = _desk_area_cb_client_redirect;
+ e_client_redirect_listener_add(ec, &eda_client->redirect);
+ eda_client->ping.notify = _desk_area_cb_client_ping;
+ e_client_ping_listener_add(ec, &eda_client->ping);
+ eda_client->kill_request.notify = _desk_area_cb_client_kill_request;
+ e_client_kill_request_listener_add(ec, &eda_client->kill_request);
+ eda_client->delete_request.notify = _desk_area_cb_client_delete_request;
+ e_client_delete_request_listener_add(ec, &eda_client->delete_request);
+ eda_client->comp_object_resize.notify = _desk_area_cb_comp_object_resize;
+ e_comp_object_resize_listener_add(ec->frame, &eda_client->comp_object_resize);
+ eda_client->comp_object_color_set.notify = _desk_area_cb_comp_object_color_set;
+ e_comp_object_color_set_listener_add(ec->frame, &eda_client->comp_object_color_set);
+ }
_e_desk_area_client_data_set(eda, ec);
_e_desk_area_smart_client_add(eda->smart_obj, ec);