e_comp_wl_shell/e_policy: apply transient_for stack when the window is mapped 96/303396/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Wed, 27 Dec 2023 01:12:51 +0000 (10:12 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 27 Dec 2023 04:36:53 +0000 (13:36 +0900)
Change-Id: Ie17b5d7d09ff7cb5a885c14bd0c07469d132d26c

src/bin/e_comp_wl_shell.c
src/bin/e_policy.c
src/bin/e_policy.h
src/bin/e_policy_stack.c

index c2ea5c9..cc33d04 100644 (file)
@@ -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);
 
index 0d9f745..63f0c03 100644 (file)
@@ -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
index 5ddbcd4..99965d8 100644 (file)
@@ -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);
index 60a55b9..9b7fc77 100644 (file)
@@ -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