From: Doyoun Kang Date: Mon, 20 Jul 2020 07:23:01 +0000 (+0900) Subject: e_policy_visibility: add job for activating while handling activate request X-Git-Tag: submit/tizen/20200720.080509^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3ce64d3a2593332f0a7d2dd9e94cf1dccc954a32;p=platform%2Fupstream%2Fenlightenment.git e_policy_visibility: add job for activating while handling activate request If there is a child which have to run uniconify_render_pending when a parent window request to activate, e add the parent window to job to sync showing windows both parent and children. Change-Id: I68c183cdb392a8488e1771f3d763ba5ea677ccd5 --- diff --git a/src/bin/e_policy_visibility.c b/src/bin/e_policy_visibility.c index 328b2a76a1..6e13f70037 100644 --- a/src/bin/e_policy_visibility.c +++ b/src/bin/e_policy_visibility.c @@ -2422,12 +2422,25 @@ e_policy_visibility_client_uniconify(E_Client *ec, Eina_Bool raise) return ret; } +EINTERN Eina_Bool +e_policy_visibility_client_wait_child(E_Client *ec, E_Vis_Job_Type type) +{ + E_VIS_CLIENT_GET_OR_RETURN_VAL(vc, ec, EINA_FALSE); + + vc->grab = _e_vis_client_grab_get(vc, type, __func__); + _e_vis_client_job_add(vc, type); + E_FREE_FUNC(vc->grab, _e_vis_grab_release); + + return EINA_TRUE; +} + E_API Eina_Bool e_policy_visibility_client_activate(E_Client *ec) { E_Client *child; Eina_List *l; Eina_Bool ret = EINA_FALSE; + Eina_Bool ret_child = EINA_FALSE; E_VIS_CLIENT_GET_OR_RETURN_VAL(vc, ec, EINA_FALSE); @@ -2441,10 +2454,24 @@ e_policy_visibility_client_activate(E_Client *ec) /* uniconify its transients recursively */ if (e_config->transient.iconify) { + Eina_Bool pend = EINA_FALSE; l = eina_list_clone(ec->transients); EINA_LIST_FREE(l, child) - ret |= e_policy_visibility_client_uniconify(child, EINA_TRUE); + { + pend = e_policy_visibility_client_uniconify(child, EINA_TRUE); + if (pend) + { + ELOGF("POL", "uniconify_pending child (win:0x%08zx ec:%p)", ec, e_client_util_win_get(child), child); + ret_child = pend; + } + } + } + + if ((ret == EINA_FALSE) && (ret_child == EINA_TRUE)) + { + e_policy_visibility_client_wait_child(ec, E_VIS_JOB_TYPE_ACTIVATE); + ret = EINA_TRUE; } /* TODO find topmost activity client and emit signal */