policy: add code to rearrange stack of transient children 91/215791/2
authorDoyoun Kang <doyoun.kang@samsung.com>
Wed, 16 Oct 2019 02:06:24 +0000 (11:06 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Wed, 16 Oct 2019 06:48:46 +0000 (06:48 +0000)
When a transient child raise or lower by user request, then its parent rearranges
the stack of transient children.

Change-Id: I41193e8c52b534920acfb71b7af0bdb0afa54219

src/bin/e_policy.h
src/bin/e_policy_stack.c
src/bin/e_policy_wl.c

index 89d72f87438a00911f0a250083ea453c14b79d0c..33758b6d7e2c191adafa5b2bf7422589f43e6337 100644 (file)
@@ -235,6 +235,8 @@ EINTERN void             e_policy_stack_init(void);
 EINTERN void             e_policy_stack_shutdown(void);
 EINTERN void             e_policy_stack_transient_for_set(E_Client *child, E_Client *parent);
 EINTERN void             e_policy_stack_transient_for_apply(E_Client *ec);
+EINTERN void             e_policy_stack_transient_child_raise(E_Client *ec);
+EINTERN void             e_policy_stack_transient_child_lower(E_Client *ec);
 
 EINTERN void             e_policy_stack_cb_client_remove(E_Client *ec);
 EINTERN void             e_policy_stack_hook_pre_fetch(E_Client *ec);
index 885040161208f15b59166b8bc8a1417b7c8d0375..280c6e47fbad1922a6847240f517279e32170082 100644 (file)
@@ -330,6 +330,34 @@ e_policy_stack_transient_for_apply(E_Client *ec)
    _e_policy_stack_fetch_transient(ec);
 }
 
+void e_policy_stack_transient_child_raise(E_Client *ec)
+{
+   E_Client *parent;
+
+   if (!ec) return;
+   parent = ec->parent;
+
+   if (parent)
+     {
+        parent->transients = eina_list_remove(parent->transients, ec);
+        parent->transients = eina_list_append(parent->transients, ec);
+     }
+}
+
+void e_policy_stack_transient_child_lower(E_Client *ec)
+{
+   E_Client *parent;
+
+   if (!ec) return;
+   parent = ec->parent;
+
+   if (parent)
+     {
+        parent->transients = eina_list_remove(parent->transients, ec);
+        parent->transients = eina_list_prepend(parent->transients, ec);
+     }
+}
+
 void
 e_policy_stack_cb_client_remove(E_Client *ec)
 {
index 500cc8c57c2099a8db65bcb8be2274a4d38f097f..f9e683cc3b7edfa11abbcdecb622b4341c7e00de 100644 (file)
@@ -1517,6 +1517,9 @@ _tzpol_iface_cb_activate(struct wl_client *client EINA_UNUSED, struct wl_resourc
 
    ELOGF("TZPOL", "ACTIVATE", ec);
 
+   if (ec->parent)
+     e_policy_stack_transient_child_raise(ec);
+
    e_policy_hook_call(E_POLICY_HOOK_CLIENT_ACTIVE_REQ, ec);
 
    ec->post_lower = EINA_FALSE;
@@ -1708,6 +1711,9 @@ _tzpol_iface_cb_raise(struct wl_client *client EINA_UNUSED, struct wl_resource *
 
    ELOGF("TZPOL", "RAISE", ec);
 
+   if (ec->parent)
+     e_policy_stack_transient_child_raise(ec);
+
    e_policy_hook_call(E_POLICY_HOOK_CLIENT_RAISE_REQ, ec);
 
    e_client_raise(ec);
@@ -1732,6 +1738,9 @@ _tzpol_iface_cb_lower(struct wl_client *client EINA_UNUSED, struct wl_resource *
 
    ELOGF("TZPOL", "LOWER", ec);
 
+   if (ec->parent)
+     e_policy_stack_transient_child_lower(ec);
+
    e_policy_hook_call(E_POLICY_HOOK_CLIENT_LOWER_REQ, ec);
 
    if (e_policy_visibility_client_lower(ec))
@@ -1759,6 +1768,10 @@ _tzpol_iface_cb_lower_by_res_id(struct wl_client *client EINA_UNUSED, struct wl_
    EINA_SAFETY_ON_NULL_RETURN(ec->frame);
 
    ELOGF("TZPOL", "LOWER by res id:%d", ec, res_id);
+
+   if (ec->parent)
+     e_policy_stack_transient_child_lower(ec);
+
    e_client_lower(ec);
 
    if ((ec->comp_data) && (!ec->comp_data->mapped))