e_policy_visibility: add a function not to uniconify below window 91/200491/1 tizen_4.0_tv
authorDoyoun Kang <doyoun.kang@samsung.com>
Tue, 26 Feb 2019 01:57:54 +0000 (10:57 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Tue, 26 Feb 2019 01:57:58 +0000 (10:57 +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: I9495fd0aa9481e0bf7e7d94e60d669d89d2b082d

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

index 167322973b2f596be0a5faea8253e913c800e267..4836899fe94b200f5bf1970f93a6c86bc3cc545b 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)
 {
@@ -1816,6 +1828,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.");
@@ -2129,6 +2147,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 96c9961f4bd057b571fd62d4d1cb06d3cb4aebd8..af30379e925027f73b03ef7b0cbb1b1e34d2d7c9 100644 (file)
@@ -35,6 +35,7 @@ E_API E_Pol_Vis_Hook             *e_policy_visibility_hook_add(E_Pol_Vis_Hook_Ty
 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);
 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