From 3101bd8df5fa1a7c3b3f2d1597ca45bc2a65c401 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Mon, 30 Nov 2020 15:17:34 +0900 Subject: [PATCH] e_policy/e_service_quickpanel: add E_EVENT_POLICY_QUICKPANEL_VISIBLE_STATE_CHANGE event When a quickpanel window is shown or hidden, then e generates E_EVENT_POLICY_QUICKPANEL_VISIBLE_STATE_CHANGE event to notify another module. Change-Id: I00c86c53dba0e5302daa93b1bd4ee9d4d35206ea --- src/bin/e_policy.c | 4 ++++ src/bin/e_policy.h | 2 ++ src/bin/services/e_service_quickpanel.c | 25 +++++++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/src/bin/e_policy.c b/src/bin/e_policy.c index d71cd8ae81..5c765d7693 100644 --- a/src/bin/e_policy.c +++ b/src/bin/e_policy.c @@ -47,6 +47,8 @@ static Eina_Inlist *_e_policy_hooks[] = [E_POLICY_HOOK_CLIENT_ROTATION_GEOMETRY_SET] = NULL, }; +E_API int E_EVENT_POLICY_QUICKPANEL_VISIBLE_STATE_CHANGE = -1; + static E_Policy_Client *_e_policy_client_add(E_Client *ec); static void _e_policy_client_del(E_Policy_Client *pc); static Eina_Bool _e_policy_client_normal_check(E_Client *ec); @@ -2359,6 +2361,8 @@ e_policy_init(void) hash_policy_clients = eina_hash_pointer_new(_e_policy_cb_client_data_free); hash_policy_desks = eina_hash_pointer_new(_e_policy_cb_desk_data_free); + E_EVENT_POLICY_QUICKPANEL_VISIBLE_STATE_CHANGE = ecore_event_type_new(); + e_policy_stack_init(); e_policy_wl_init(); e_policy_wl_aux_hint_init(); diff --git a/src/bin/e_policy.h b/src/bin/e_policy.h index 08990facb5..e16feaf215 100644 --- a/src/bin/e_policy.h +++ b/src/bin/e_policy.h @@ -205,6 +205,8 @@ E_API extern int E_EVENT_POLICY_INDICATOR_STATE_CHANGE; E_API extern int E_EVENT_POLICY_INDICATOR_OPACITY_MODE_CHANGE; E_API extern int E_EVENT_POLICY_INDICATOR_VISIBLE_STATE_CHANGE; +E_API extern int E_EVENT_POLICY_QUICKPANEL_VISIBLE_STATE_CHANGE; + EINTERN E_Policy_Config_Desk *e_policy_conf_desk_get_by_nums(E_Policy_Config *conf, unsigned int zone_num, int x, int y); EINTERN E_Policy_Client *e_policy_client_get(E_Client *ec); EINTERN void e_policy_desk_add(E_Desk *desk); diff --git a/src/bin/services/e_service_quickpanel.c b/src/bin/services/e_service_quickpanel.c index 494ebfb1f4..5718ea52e6 100644 --- a/src/bin/services/e_service_quickpanel.c +++ b/src/bin/services/e_service_quickpanel.c @@ -547,6 +547,29 @@ _e_qp_srv_mover_cb_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN E_FREE_FUNC(qp->effect.animator, ecore_animator_del); } +static void +_e_qp_srv_event_free(void *d EINA_UNUSED, E_Event_Client *ev) +{ + e_object_unref(E_OBJECT(ev->ec)); + E_FREE(ev); +} + +static void +_e_qp_srv_visible_state_change_event(E_Client *ec, int vis_state) +{ + E_Event_Client_Property *ev; + + if (!ec) return; + + ev = E_NEW(E_Event_Client_Property, 1); + if (!ev) return; + + ev->ec = ec; + ev->property = vis_state; + e_object_ref(E_OBJECT(ec)); + ecore_event_add(E_EVENT_POLICY_QUICKPANEL_VISIBLE_STATE_CHANGE, ev, (Ecore_End_Cb)_e_qp_srv_event_free, NULL); +} + static void _e_qp_srv_effect_finish_job_end(E_Policy_Quickpanel *qp) { @@ -607,6 +630,8 @@ _e_qp_srv_effect_finish_job_end(E_Policy_Quickpanel *qp) } } + _e_qp_srv_visible_state_change_event(qp->ec, qp->effect.final_visible_state); + EC_CHANGED(qp->ec); } -- 2.34.1