policy: add transient below feature
authorDoyoun Kang <doyoun.kang@samsung.com>
Tue, 27 Jun 2017 08:00:15 +0000 (17:00 +0900)
committerGwanglim Lee <gl77.lee@samsung.com>
Wed, 5 Jul 2017 08:48:09 +0000 (17:48 +0900)
Change-Id: Ia90d25af2b149c08513b8a75857493e06ad2574d

src/bin/e_client.c
src/bin/e_policy_visibility.c

index 9c351a6eb8f64af559c1314b65abf9e0038ffefd..3878bc5ad628eab70538a06ce7561a3d690cabf7 100644 (file)
@@ -1995,7 +1995,8 @@ _e_client_cb_evas_restack(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA
              /* Don't stack iconic transients. If the user wants these shown,
               * that's another option.
               */
-             if (child->iconic) continue;
+             if (child->iconic && child->exp_iconify.by_client) continue;
+
              if (child->transient_policy == E_TRANSIENT_ABOVE)
                {
                   if (below)
@@ -2889,8 +2890,11 @@ _e_client_transient_for_group_make(E_Client *ec, Eina_List **list)
              if (!child) continue;
              if (!child->iconic)
                {
-                  *list = eina_list_prepend(*list, child);
-                  _e_client_transient_for_group_make(child, list);
+                  if (child->transient_policy == E_TRANSIENT_ABOVE)
+                    {
+                       *list = eina_list_prepend(*list, child);
+                       _e_client_transient_for_group_make(child, list);
+                    }
                }
           }
      }
@@ -5381,6 +5385,22 @@ e_client_uniconify(E_Client *ec)
    desk = e_desk_current_get(ec->desk->zone);
    e_client_desk_set(ec, desk);
    not_raise = ec->exp_iconify.not_raise;
+
+   if (e_config->transient.iconify)
+     {
+        E_Client *child;
+        Eina_List *list = eina_list_clone(ec->transients);
+
+        EINA_LIST_FREE(list, child)
+          {
+             if (child->transient_policy == E_TRANSIENT_BELOW)
+               {
+                  child->exp_iconify.not_raise = not_raise;
+                  e_client_uniconify(child);
+               }
+          }
+     }
+
    if (!not_raise)
      evas_object_raise(ec->frame);
 
@@ -5410,8 +5430,11 @@ e_client_uniconify(E_Client *ec)
 
         EINA_LIST_FREE(list, child)
           {
-             child->exp_iconify.not_raise = not_raise;
-             e_client_uniconify(child);
+             if (child->transient_policy == E_TRANSIENT_ABOVE)
+               {
+                  child->exp_iconify.not_raise = not_raise;
+                  e_client_uniconify(child);
+               }
           }
      }
 
index be73ffe0a45e4053bfbc21ab9cc9058771a22a59..4dffc111b76eac6694277f1aea3a76ac8e74f257 100644 (file)
@@ -1225,6 +1225,10 @@ _e_vis_ec_below_activity_clients_get(E_Client *ec, Eina_List **below_list)
         E_VIS_CLIENT_GET(vc, below);
         if (!vc) continue;
 
+        if ((below->transient_policy == E_TRANSIENT_BELOW) &&
+            (below->parent == ec))
+          continue;
+
         *below_list = eina_list_prepend(*below_list, vc);
         if ((below->argb) && (below->visibility.opaque <= 0))
           continue;