e_policy_visibility: add a function not to uniconify below window 89/200489/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Tue, 26 Feb 2019 00:27:37 +0000 (09:27 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Tue, 26 Feb 2019 00:27:41 +0000 (09:27 +0900)
We add a e_policy_visibility_client_below_uniconify_skip_set() function.
If a window set the below_uniconify_skip, then the below window of it is not uniconified
when it is hidden.
This function can be used by a module such as effect module.

Change-Id: Icae9ca3c1fcd136228c0ab4e795f61928366387a

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

index 932a4430f8d1538f1c2623628e2c1678e9c769b8..d101e1124aab9dba8b652903b604dd138447f228 100644 (file)
@@ -91,6 +91,18 @@ _e_vis_client_is_uniconify_render_running(E_Vis_Client *vc)
    return (vc->state == E_VIS_ICONIFY_STATE_RUNNING_UNICONIFY);
 }
 
+static inline void
+_e_vis_client_below_uniconify_skip_set(E_Vis_Client *vc, Eina_Bool skip)
+{
+   vc->skip_below_uniconify = skip;
+}
+
+static inline Eina_Bool
+_e_vis_client_is_below_uniconify_skip(E_Vis_Client *vc)
+{
+   return (vc->skip_below_uniconify == EINA_TRUE);
+}
+
 static void
 _e_pol_vis_hooks_clean(void)
 {
@@ -1825,6 +1837,12 @@ _e_vis_intercept_hide(void *data EINA_UNUSED, E_Client *ec)
         return EINA_FALSE;
      }
 
+   if (_e_vis_client_is_below_uniconify_skip(vc))
+     {
+        VS_DBG(ec, "Skip to uniconify below client");
+        return EINA_TRUE;
+     }
+
    if (_e_vis_ec_above_is_non_alpha_visible(ec, EINA_FALSE))
      {
         VS_DBG(ec, "Obscured by above window.");
@@ -2146,6 +2164,14 @@ e_policy_visibility_client_is_uniconify_render_running(E_Client *ec)
    return _e_vis_client_is_uniconify_render_running(vc);
 }
 
+E_API void
+e_policy_visibility_client_below_uniconify_skip_set(E_Client *ec, Eina_Bool skip)
+{
+   E_VIS_CLIENT_GET_OR_RETURN(vc, ec);
+
+   _e_vis_client_below_uniconify_skip_set(vc, skip);
+}
+
 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)
 {
index 1d4217747dd5c69bc955ee5f80eb6be5dca28593..0602bf4a93fc3e63ffb4efe240c05e709be3b6ab 100644 (file)
@@ -36,6 +36,7 @@ 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);
 EINTERN Eina_Bool                 e_policy_visibility_client_is_uniconic(E_Client *ec);
 E_API Eina_Bool                   e_policy_visibility_client_is_uniconify_render_running(E_Client *ec);
+E_API void                        e_policy_visibility_client_below_uniconify_skip_set(E_Client *ec, Eina_Bool skip);
 
 EINTERN void                      e_policy_visibility_client_defer_move(E_Client *ec);
 EINTERN void                      e_vis_client_send_pre_visibility_event(E_Client *ec);
index eb57795b047c6ecf32386680351b7a600a6b0b8d..1ed4a25d1262ed04c7062669ef23f6431c3f2585 100644 (file)
@@ -157,6 +157,8 @@ struct _E_Vis_Client
    } job;
    Eina_Bool prepare_emitted;
    E_Layer layer;
+
+   Eina_Bool skip_below_uniconify;
 };
 
 struct _E_Vis_Job_Group