From: Doyoun Kang Date: Tue, 20 Jul 2021 07:46:29 +0000 (+0900) Subject: e_policy_wl: implement callback function for tizen_policy's new requests X-Git-Tag: submit/tizen/20210720.080518^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1f65c67ffb9ad488fa57e38ae77abe4194d0b7fe;p=platform%2Fupstream%2Fenlightenment.git e_policy_wl: implement callback function for tizen_policy's new requests we implement callback fuctions for below requests - tizen_policy_set_transient_for_below - tizen_policy_set_parent_with_below Change-Id: I52d4b4ac17926699f51bebe7ea221012f311472e --- diff --git a/src/bin/e_policy.h b/src/bin/e_policy.h index 6a2ab43017..b6c3bd57e4 100644 --- a/src/bin/e_policy.h +++ b/src/bin/e_policy.h @@ -267,6 +267,7 @@ E_API void e_policy_stack_transient_for_set(E_Client *child, E_Cli EINTERN void e_policy_stack_transient_for_apply(E_Client *ec); EINTERN void e_policy_stack_transient_child_raise(E_Client *ec); EINTERN void e_policy_stack_transient_child_lower(E_Client *ec); +E_API void e_policy_stack_transient_for_below_set(E_Client *ec, E_Client *parent, Eina_Bool transient); EINTERN void e_policy_stack_cb_client_remove(E_Client *ec); diff --git a/src/bin/e_policy_stack.c b/src/bin/e_policy_stack.c index a54f2add22..0e895813fb 100644 --- a/src/bin/e_policy_stack.c +++ b/src/bin/e_policy_stack.c @@ -285,8 +285,9 @@ _e_policy_stack_transient_for_set(E_Client *ec, E_Client *parent, Eina_Bool tran EINA_SAFETY_ON_NULL_RETURN(ec); - ELOGF("POL", "Set Transient_stack. new parent(win:%zx, ec:%p) old parent(win:%zx, ec:%p), is_transient_for:%d", - ec, e_client_util_win_get(parent), parent, e_client_util_win_get(ec->parent), ec->parent, transient); + ELOGF("POL", "Set Transient_stack. new parent(win:%zx, ec:%p) old parent(win:%zx, ec:%p), is_transient_for:%d, policy: %d", + ec, e_client_util_win_get(parent), parent, e_client_util_win_get(ec->parent), ec->parent, + transient, e_client_transient_policy_get(ec)); if (!parent) { @@ -372,6 +373,22 @@ e_policy_stack_transient_for_set(E_Client *ec, E_Client *parent) _e_policy_stack_transient_for_set(ec, parent, EINA_TRUE); } +void +e_policy_stack_transient_for_below_set(E_Client *ec, E_Client *parent, Eina_Bool transient) +{ + if (parent) + { + e_client_transient_policy_set(ec, E_TRANSIENT_BELOW); + e_client_belong_to_parent_set(ec, EINA_TRUE); + } + else + { + e_client_transient_policy_set(ec, E_TRANSIENT_ABOVE); + e_client_belong_to_parent_set(ec, EINA_FALSE); + } + _e_policy_stack_transient_for_set(ec, parent, transient); +} + void e_policy_stack_transient_child_raise(E_Client *ec) { E_Client *parent; diff --git a/src/bin/e_policy_wl.c b/src/bin/e_policy_wl.c index 244df6ca7f..3c8f8a85fa 100644 --- a/src/bin/e_policy_wl.c +++ b/src/bin/e_policy_wl.c @@ -3254,13 +3254,44 @@ _tzpol_iface_cb_hide(struct wl_client *client EINA_UNUSED, struct wl_resource *r static void _tzpol_iface_cb_set_transient_for_below(struct wl_client *client EINA_UNUSED, struct wl_resource *res_tzpol, uint32_t child_id, uint32_t parent_id) { - // TODO: need to implement + E_Client *ec, *parent_ec; + E_Comp_Wl_Client_Data *cdata, *p_cdata; + + ELOGF("TZPOL", + "TF_SET(B) |res_tzpol:%8p|parent_id:%8d |child_id:8%d", + NULL, res_tzpol, parent_id, child_id); + + ec = e_pixmap_find_client_by_res_id(child_id); + EINA_SAFETY_ON_NULL_RETURN(ec); + parent_ec = e_pixmap_find_client_by_res_id(parent_id); + + cdata = e_client_cdata_get(ec); + p_cdata = e_client_cdata_get(parent_ec); + ELOGF("TZPOL", + " |res_tzpol:%8p|parent_surf:%8p|child_surf:%8p", + NULL, res_tzpol, (p_cdata ? p_cdata->surface : NULL), (cdata ? cdata->surface : NULL)); + + e_policy_stack_transient_for_below_set(ec, parent_ec, EINA_TRUE); } static void _tzpol_iface_cb_set_parent_with_below(struct wl_client *client, struct wl_resource *res_tzpol, struct wl_resource *child, struct wl_resource *parent) { - // TODO: need to implement + E_Client *ec, *parent_ec; + + ELOGF("TZPOL", + "PARENT_SET(B)|res_tzpol:%8p|parent_surf:%8p|child_surf:%8p", + NULL, res_tzpol, parent, child); + + ec = wl_resource_get_user_data(child); + EINA_SAFETY_ON_NULL_RETURN(ec); + + if (parent) + parent_ec = wl_resource_get_user_data(parent); + else + parent_ec = NULL; + + e_policy_stack_transient_for_below_set(ec, parent_ec, EINA_FALSE); } // -------------------------------------------------------- diff --git a/src/bin/e_test_helper.c b/src/bin/e_test_helper.c index 174166a5a7..8fdd8affd6 100644 --- a/src/bin/e_test_helper.c +++ b/src/bin/e_test_helper.c @@ -1168,16 +1168,12 @@ _e_test_helper_cb_set_transient_for_below(const Eldbus_Service_Interface *iface if (set) { - e_client_transient_policy_set(ec, E_TRANSIENT_BELOW); - e_client_belong_to_parent_set(ec, EINA_TRUE); - e_policy_stack_transient_for_set(ec, pec); + e_policy_stack_transient_for_below_set(ec, pec, EINA_TRUE); accept = EINA_TRUE; } else { - e_client_transient_policy_set(ec, E_TRANSIENT_ABOVE); - e_client_belong_to_parent_set(ec, EINA_FALSE); - e_policy_stack_transient_for_set(ec, NULL); + e_policy_stack_transient_for_below_set(ec, NULL, EINA_TRUE); accept = EINA_TRUE; } }