e client - desk wait - ref it properly and clean up delfn

delfn's on desks being referred to as profile.wait_desk were never
cleared when client was freed. als the desk itself never got an obj
reference - fix that and ref/unref it.
This commit is contained in:
Carsten Haitzler 2015-04-21 09:36:33 +09:00 committed by Mike Blumenkrantz
parent cd04374949
commit cbe533c848
1 changed files with 18 additions and 1 deletions

View File

@ -195,10 +195,13 @@ _e_client_desk_window_profile_wait_desk_delfn(void *data, void *obj)
const char *p;
int i;
printf("DELFN %p\n", ec);
if (e_object_is_del(E_OBJECT(ec))) return;
ec->e.state.profile.wait_desk_delfn = NULL;
eina_stringshare_replace(&ec->e.state.profile.wait, NULL);
if (ec->e.state.profile.wait_desk)
e_object_unref(E_OBJECT(ec->e.state.profile.wait_desk));
ec->e.state.profile.wait_desk = NULL;
ec->e.state.profile.wait_for_done = 0;
@ -540,6 +543,14 @@ _e_client_free(E_Client *ec)
e_hints_client_list_set();
evas_object_del(ec->frame);
if (ec->e.state.profile.wait_desk)
{
e_object_delfn_del(E_OBJECT(ec->e.state.profile.wait_desk),
ec->e.state.profile.wait_desk_delfn);
ec->e.state.profile.wait_desk_delfn = NULL;
e_object_unref(E_OBJECT(ec->e.state.profile.wait_desk));
}
ec->e.state.profile.wait_desk = NULL;
free(ec);
}
@ -2606,15 +2617,21 @@ e_client_desk_window_profile_wait_desk_set(E_Client *ec, E_Desk *desk)
ec->e.state.profile.wait_desk_delfn = NULL;
}
if (ec->e.state.profile.wait_desk)
e_object_unref(E_OBJECT(ec->e.state.profile.wait_desk));
ec->e.state.profile.wait_desk = NULL;
if (desk)
{
printf("ADD DELFN to %p\n", desk);
ec->e.state.profile.wait_desk_delfn =
e_object_delfn_add(E_OBJECT(desk),
_e_client_desk_window_profile_wait_desk_delfn,
ec);
}
ec->e.state.profile.wait_desk = desk;
if (ec->e.state.profile.wait_desk)
e_object_ref(E_OBJECT(ec->e.state.profile.wait_desk));
}
EAPI void