e_policy_wl: update states(iconic, visibility) of transient below child while changin... 31/271931/1 accepted/tizen/6.5/unified/20220308.133611 submit/tizen_6.5/20220303.084929
authorDoyoun Kang <doyoun.kang@samsung.com>
Thu, 3 Mar 2022 07:27:30 +0000 (16:27 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Thu, 3 Mar 2022 08:39:36 +0000 (17:39 +0900)
There was a bug that the e didn't send an iconic state change event to the transient below child
when its parent's alpha value is changed.
This patch resolve this problem.

Change-Id: I5f08a85a230ecf48f1bb2a9ea500b87cf7746510

src/bin/e_policy_wl.c

index 37c6a646161a414d5d68f4491402eea1e4efa885..e2c340585eded53d916c6d8424b1407d1e0fcd81 100644 (file)
@@ -7776,6 +7776,27 @@ _e_policy_wl_cb_hook_shell_surface_ready(void *d, E_Client *ec)
      }
 }
 
+static void
+_e_policy_wl_cb_hook_alpha_change(void *data, E_Client *ec)
+{
+   if (!ec) return;
+   if (!ec->argb) return;
+   if (!ec->transients) return;
+   if (!e_policy_visibility_client_is_uniconify_render_running(ec)) return;
+
+   E_Client *child;
+   Eina_List *list = eina_list_clone(ec->transients);
+
+   EINA_LIST_FREE(list, child)
+     {
+        if (e_client_transient_policy_get(child) == E_TRANSIENT_BELOW)
+          {
+             ELOGF("POL_VIS", "Uniconify below child(win:%zx, ec:%p) by changing alpha", ec, e_client_util_win_get(child), child);
+             e_policy_client_uniconify_by_visibility(child);
+          }
+     }
+}
+
 void
 e_policy_wl_generate_request(E_Client *ec, E_Policy_Wl_Gen_Request type)
 {
@@ -8044,6 +8065,7 @@ e_policy_wl_init(void)
    E_LIST_HANDLER_APPEND(handlers, E_EVENT_SCREENSAVER_OFF, _e_policy_wl_cb_scrsaver_off, NULL);
 
    E_COMP_WL_HOOK_APPEND(hooks_cw, E_COMP_WL_HOOK_SHELL_SURFACE_READY, _e_policy_wl_cb_hook_shell_surface_ready, NULL);
+   E_COMP_WL_HOOK_APPEND(hooks_cw, E_COMP_WL_HOOK_CLIENT_ALPHA_CHANGE, _e_policy_wl_cb_hook_alpha_change, NULL);
 
    E_EVENT_POLICY_INDICATOR_STATE_CHANGE = ecore_event_type_new();
    E_EVENT_POLICY_INDICATOR_OPACITY_MODE_CHANGE = ecore_event_type_new();