e_policy_visibility: add a function not to uniconify below window 99/195899/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Wed, 19 Dec 2018 05:34:21 +0000 (14:34 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Wed, 19 Dec 2018 08:26:31 +0000 (17:26 +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: I83cfdc45c0895ff1f9da3bee0c713d7bea5ac55d

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

index 757225f614a7aa2e062dbced5e64a25b73418d17..19bb66939bd848895d5ee8a1ffb7023193794cf9 100644 (file)
@@ -104,6 +104,18 @@ _e_vis_client_is_uniconify_render_running_done(E_Vis_Client *vc)
    return (vc->state == E_VIS_ICONIFY_STATE_RUNNING_UNICONIFY_RENDER_DONE);
 }
 
+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)
 {
@@ -1908,6 +1920,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;
+     }
+
    above_vis_type = _e_vis_ec_above_visible_type(ec, EINA_FALSE);
    if (above_vis_type == E_POL_VIS_TYPE_NON_ALPHA)
      {
@@ -2244,6 +2262,14 @@ e_policy_visibility_client_is_uniconify_render_running(E_Client *ec)
    return running;
 }
 
+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 bb5dcc95c856a59670eca428d8ae03261c9b04de..93752991386f5a3c3ec54842c5471e7543d08c5e 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 1a9ab917936d4689ed58ea970c96ad54bf3a29c2..adda1b5a72ddb81ba14e7e03ebad9453c5ad6043 100644 (file)
@@ -159,6 +159,8 @@ struct _E_Vis_Client
    } job;
    Eina_Bool prepare_emitted;
    E_Layer layer;
+
+   Eina_Bool skip_below_uniconify;
 };
 
 struct _E_Vis_Job_Group