e_policy_visibility: Added e_policy_visibility_client_raising_job_cancel. 73/272473/1
authorJunseok Kim <juns.kim@samsung.com>
Mon, 14 Mar 2022 11:29:08 +0000 (20:29 +0900)
committerJunSeok Kim <juns.kim@samsung.com>
Thu, 17 Mar 2022 07:34:22 +0000 (07:34 +0000)
There was a bug that client shown after client request lower.
in detail, the client was a transient_for child and parent request activate.
During the deiconify render of parent and child, child requested unset transient_for and lower.
In this case, the child client have to be lower, but it shown after parent deiconify render done.

To fix this problem, added raising job cancel function and called in lower callback.

Change-Id: Ib66664d518a064567e43eb470929b0caa0620986
Signed-off-by: Junseok Kim <juns.kim@samsung.com>
(cherry picked from commit ce422032d5f1dc99739f1b5c305c0f302428cb45)

src/bin/e_policy_visibility.c
src/bin/e_policy_visibility.h

index 5226b311302600ae32b0fc59cfb559410930698b..492b36686c492fd986fd64b7da03d93c431404a7 100644 (file)
@@ -2351,6 +2351,39 @@ e_policy_visibility_client_uniconify_by_visibility_job_cancel(E_Client *ec)
    return ret;
 }
 
+EINTERN Eina_Bool
+e_policy_visibility_client_raising_job_cancel(E_Client *ec)
+{
+   Eina_Bool ret = EINA_FALSE;
+
+   if (!ec) return EINA_FALSE;
+   E_VIS_CLIENT_GET_OR_RETURN_VAL(vc, ec, EINA_FALSE);
+
+   if (_e_vis_job_find(vc, E_VIS_JOB_TYPE_RAISE))
+     {
+         VS_INF(ec, "Find and Cancel raising job: E_VIS_JOB_TYPE_RAISE");
+         ret = _e_vis_job_cancel(vc, E_VIS_JOB_TYPE_RAISE);
+     }
+   if (_e_vis_job_find(vc, E_VIS_JOB_TYPE_ACTIVATE))
+     {
+         VS_INF(ec, "Find and Cancel raising job: E_VIS_JOB_TYPE_ACTIVATE");
+         ret = _e_vis_job_cancel(vc, E_VIS_JOB_TYPE_ACTIVATE);
+     }
+   if (_e_vis_job_find(vc, E_VIS_JOB_TYPE_UNICONIFY))
+     {
+         VS_INF(ec, "Find and Cancel raising job: E_VIS_JOB_TYPE_UNICONIFY");
+         ret = _e_vis_job_cancel(vc, E_VIS_JOB_TYPE_UNICONIFY);
+     }
+
+   if (ret && e_policy_visibility_client_is_uniconify_render_running(ec))
+     {
+        vc->state = E_VIS_ICONIFY_STATE_ICONIC;
+        VS_INF(vc->ec, "UPDATE ICONIC STATE: %s", STATE_STR(vc));
+     }
+
+   return ret;
+}
+
 E_API Eina_Bool
 e_policy_visibility_client_raise(E_Client *ec)
 {
@@ -2410,6 +2443,8 @@ e_policy_visibility_client_lower(E_Client *ec)
    /* if vc has job grab, release them */
    _e_vis_client_grab_cancel(vc);
 
+   e_policy_visibility_client_raising_job_cancel(ec);
+
    if (ec->argb)
      {
         VS_DBG(ec, "Window is transparent.");
index 5f877c0c3e47e09143568ad26eee0d8b0e087011..538a11d64a0e74743638f6aa1ae115e0051c6a67 100644 (file)
@@ -63,6 +63,7 @@ E_API Eina_Bool                   e_policy_visibility_client_grab_cancel(E_Clien
 E_API Eina_Bool                   e_policy_visibility_client_hide_job_cancel(E_Client *ec);
 EINTERN Eina_Bool                 e_policy_visibility_client_lower_job_cancel(E_Client *ec);
 EINTERN Eina_Bool                 e_policy_visibility_client_uniconify_by_visibility_job_cancel(E_Client *ec);
+EINTERN Eina_Bool                 e_policy_visibility_client_raising_job_cancel(E_Client *ec);
 E_API E_Pol_Vis_Hook             *e_policy_visibility_hook_add(E_Pol_Vis_Hook_Type type, E_Pol_Vis_Hook_Cb cb, const void *data);
 E_API void                        e_policy_visibility_hook_del(E_Pol_Vis_Hook *h);
 E_API Eina_Bool                   e_policy_visibility_client_is_iconic(E_Client *ec);