From 87e8a052c8869ace9173a8eb3b0985cc83c2beaa Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Mon, 28 Aug 2017 16:21:14 +0900 Subject: [PATCH] e_service_quickpanel: fix crashing enlightenment There was a bug that enlightenment is crashed if the quickpanel service window is deleted while closing quickpanel. Change-Id: Ib41f75b89ea5271f6eaaf9b2c84b306964bc93e5 --- src/bin/services/e_service_quickpanel.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/bin/services/e_service_quickpanel.c b/src/bin/services/e_service_quickpanel.c index 230ce53..f128d05 100644 --- a/src/bin/services/e_service_quickpanel.c +++ b/src/bin/services/e_service_quickpanel.c @@ -124,6 +124,10 @@ static void _e_qp_srv_effect_update(E_Policy_Quickpanel *qp, int x, int static E_QP_Client * _e_qp_client_ec_get(E_Client *ec); static Eina_Bool _e_qp_client_scrollable_update(void); +static void _quickpanel_client_evas_cb_show(void *data, Evas *evas, Evas_Object *obj, void *event); +static void _quickpanel_client_evas_cb_hide(void *data, Evas *evas, Evas_Object *obj, void *event); +static void _quickpanel_client_evas_cb_move(void *data, Evas *evas, Evas_Object *obj, void *event); + inline static Eina_Bool _e_qp_srv_is_effect_finish_job_started(E_Policy_Quickpanel *qp) { @@ -922,6 +926,12 @@ _region_obj_cb_gesture_end(void *data EINA_UNUSED, Evas_Object *handler, int x, static void _quickpanel_free(E_Policy_Quickpanel *qp) { + ELOGF("QUICKPANEL", "Remove Client | qp %p", qp->ec->pixmap, qp->ec, qp); + + evas_object_event_callback_del(qp->ec->frame, EVAS_CALLBACK_SHOW, _quickpanel_client_evas_cb_show); + evas_object_event_callback_del(qp->ec->frame, EVAS_CALLBACK_HIDE, _quickpanel_client_evas_cb_hide); + evas_object_event_callback_del(qp->ec->frame, EVAS_CALLBACK_MOVE, _quickpanel_client_evas_cb_move); + E_FREE_LIST(qp_clients, free); E_FREE_FUNC(qp->mover, evas_object_del); E_FREE_FUNC(qp->indi_obj, evas_object_del); @@ -1587,12 +1597,12 @@ e_service_quickpanel_client_set(E_Client *ec) /* if we have not setup evas callbacks for this client, do it */ if (_pol_quickpanel) return; - ELOGF("QUICKPANEL", "Set Client | ec %p", NULL, NULL, ec); - qp = calloc(1, sizeof(*qp)); if (!qp) return; + ELOGF("QUICKPANEL", "Set Client | qp %p", ec->pixmap, ec, qp); + _pol_quickpanel = qp; qp->ec = ec; -- 2.7.4