From: Doyoun Kang Date: Wed, 27 Dec 2023 01:12:51 +0000 (+0900) Subject: e_comp_wl_shell/e_policy: apply transient_for stack when the window is mapped X-Git-Tag: accepted/tizen/8.0/unified/20240101.155026~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F85%2F303485%2F1;p=platform%2Fupstream%2Fenlightenment.git e_comp_wl_shell/e_policy: apply transient_for stack when the window is mapped Change-Id: Ie17b5d7d09ff7cb5a885c14bd0c07469d132d26c --- diff --git a/src/bin/e_comp_wl_shell.c b/src/bin/e_comp_wl_shell.c index c2ea5c976a..cc33d04169 100644 --- a/src/bin/e_comp_wl_shell.c +++ b/src/bin/e_comp_wl_shell.c @@ -766,7 +766,7 @@ _e_shell_client_map_common_post(E_Client *ec) if ((!ec->iconic) && (!e_client_util_ignored_get(ec))) { - if (ec->icccm.fetch.transient_for) + if (ec->parent) { e_policy_stack_transient_for_apply(ec); diff --git a/src/bin/e_policy.c b/src/bin/e_policy.c index 0d9f745058..63f0c03c22 100644 --- a/src/bin/e_policy.c +++ b/src/bin/e_policy.c @@ -598,7 +598,7 @@ _e_policy_cb_hook_client_eval_pre_fetch(void *d EINA_UNUSED, E_Client *ec) { if (e_object_is_del(E_OBJECT(ec))) return; - e_policy_stack_transient_for_apply(ec); + e_policy_stack_transient_for_fetch(ec); } static void diff --git a/src/bin/e_policy.h b/src/bin/e_policy.h index 5ddbcd484b..99965d8fb9 100644 --- a/src/bin/e_policy.h +++ b/src/bin/e_policy.h @@ -267,6 +267,7 @@ EINTERN void e_policy_stack_init(void); EINTERN void e_policy_stack_shutdown(void); EINTERN void e_policy_stack_parent_set(E_Client *child, E_Client *parent); E_API void e_policy_stack_transient_for_set(E_Client *child, E_Client *parent); +EINTERN void e_policy_stack_transient_for_fetch(E_Client *ec); 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); diff --git a/src/bin/e_policy_stack.c b/src/bin/e_policy_stack.c index 60a55b9ca0..9b7fc77248 100644 --- a/src/bin/e_policy_stack.c +++ b/src/bin/e_policy_stack.c @@ -31,10 +31,36 @@ void _e_policy_stack_transient_for_apply(E_Client *ec) { int raise; + E_Client *parent = NULL; E_Client *child, *top, *bottom; Eina_List *l; Eina_Bool intercepted = EINA_FALSE; + parent = e_pixmap_find_client(E_PIXMAP_TYPE_WL, ec->icccm.transient_for); + + if (parent != ec->parent) + { + ELOGF("POL", "CRITICAL. parent(win:%zx, ec:%p), ec->parent(win:%zx, ec:%p)...", ec, + e_client_util_win_get(parent), parent, e_client_util_win_get(ec->parent), ec->parent); + } + + if (ec->icccm.transient_for != e_client_util_win_get(ec->parent)) + { + ELOGF("POL", "CRITICAL. icccm.transient_for(%zx), ec->parent win(%zx)...", ec, + ec->icccm.transient_for, e_client_util_win_get(ec->parent)); + } + + if (parent) + { + if (ec->desk_area.desk_area && parent->desk_area.desk_area) + { + if (ec->desk_area.desk_area != parent->desk_area.desk_area) + { + e_desk_area_ec_reassign(parent->desk_area.desk_area, ec); + } + } + } + intercepted = e_policy_interceptor_call(E_POLICY_INTERCEPT_STACK_TRANSIENT_FOR, ec); if (intercepted) @@ -250,40 +276,12 @@ _e_policy_stack_transient_for_tree_check(E_Client *child, E_Client *parent) return EINA_FALSE; } -static void -_e_policy_stack_fetch_transient(E_Client *ec) +EINTERN void +e_policy_stack_transient_for_fetch(E_Client *ec) { - E_Client *parent = NULL; - + if (!ec) return; if (!ec->icccm.fetch.transient_for) return; - - parent = e_pixmap_find_client(E_PIXMAP_TYPE_WL, ec->icccm.transient_for); - - if (parent != ec->parent) - { - ELOGF("POL", "CRITICAL. parent(win:%zx, ec:%p), ec->parent(win:%zx, ec:%p)...", ec, - e_client_util_win_get(parent), parent, e_client_util_win_get(ec->parent), ec->parent); - } - - if (ec->icccm.transient_for != e_client_util_win_get(ec->parent)) - { - ELOGF("POL", "CRITICAL. icccm.transient_for(%zx), ec->parent win(%zx)...", ec, - ec->icccm.transient_for, e_client_util_win_get(ec->parent)); - } - - if (parent) - { - if (ec->desk_area.desk_area && parent->desk_area.desk_area) - { - if (ec->desk_area.desk_area != parent->desk_area.desk_area) - { - e_desk_area_ec_reassign(parent->desk_area.desk_area, ec); - } - } - } - _e_policy_stack_transient_for_apply(ec); - ec->icccm.fetch.transient_for = EINA_FALSE; } @@ -291,7 +289,7 @@ EINTERN void e_policy_stack_transient_for_apply(E_Client *ec) { if (!ec) return; - _e_policy_stack_fetch_transient(ec); + _e_policy_stack_transient_for_apply(ec); } void