e_policy_wl: implement callback function for tizen_policy's new requests 01/261501/1 accepted/tizen/unified/20210720.123331 submit/tizen/20210720.080518
authorDoyoun Kang <doyoun.kang@samsung.com>
Tue, 20 Jul 2021 07:46:29 +0000 (16:46 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Tue, 20 Jul 2021 07:46:33 +0000 (16:46 +0900)
we implement callback fuctions for below requests
- tizen_policy_set_transient_for_below
- tizen_policy_set_parent_with_below

Change-Id: I52d4b4ac17926699f51bebe7ea221012f311472e

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

index 6a2ab43..b6c3bd5 100644 (file)
@@ -267,6 +267,7 @@ E_API   void             e_policy_stack_transient_for_set(E_Client *child, E_Cli
 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);
+E_API   void             e_policy_stack_transient_for_below_set(E_Client *ec, E_Client *parent, Eina_Bool transient);
 
 EINTERN void             e_policy_stack_cb_client_remove(E_Client *ec);
 
index a54f2ad..0e89581 100644 (file)
@@ -285,8 +285,9 @@ _e_policy_stack_transient_for_set(E_Client *ec, E_Client *parent, Eina_Bool tran
 
    EINA_SAFETY_ON_NULL_RETURN(ec);
 
-   ELOGF("POL", "Set Transient_stack. new parent(win:%zx, ec:%p) old parent(win:%zx, ec:%p), is_transient_for:%d",
-         ec, e_client_util_win_get(parent), parent, e_client_util_win_get(ec->parent), ec->parent, transient);
+   ELOGF("POL", "Set Transient_stack. new parent(win:%zx, ec:%p) old parent(win:%zx, ec:%p), is_transient_for:%d, policy: %d",
+         ec, e_client_util_win_get(parent), parent, e_client_util_win_get(ec->parent), ec->parent,
+         transient, e_client_transient_policy_get(ec));
 
    if (!parent)
      {
@@ -372,6 +373,22 @@ e_policy_stack_transient_for_set(E_Client *ec, E_Client *parent)
    _e_policy_stack_transient_for_set(ec, parent, EINA_TRUE);
 }
 
+void
+e_policy_stack_transient_for_below_set(E_Client *ec, E_Client *parent, Eina_Bool transient)
+{
+   if (parent)
+     {
+        e_client_transient_policy_set(ec, E_TRANSIENT_BELOW);
+        e_client_belong_to_parent_set(ec, EINA_TRUE);
+     }
+   else
+     {
+        e_client_transient_policy_set(ec, E_TRANSIENT_ABOVE);
+        e_client_belong_to_parent_set(ec, EINA_FALSE);
+     }
+   _e_policy_stack_transient_for_set(ec, parent, transient);
+}
+
 void e_policy_stack_transient_child_raise(E_Client *ec)
 {
    E_Client *parent;
index 244df6c..3c8f8a8 100644 (file)
@@ -3254,13 +3254,44 @@ _tzpol_iface_cb_hide(struct wl_client *client EINA_UNUSED, struct wl_resource *r
 static void
 _tzpol_iface_cb_set_transient_for_below(struct wl_client *client EINA_UNUSED, struct wl_resource *res_tzpol, uint32_t child_id, uint32_t parent_id)
 {
-   // TODO: need to implement
+   E_Client *ec, *parent_ec;
+   E_Comp_Wl_Client_Data *cdata, *p_cdata;
+
+   ELOGF("TZPOL",
+         "TF_SET(B) |res_tzpol:%8p|parent_id:%8d  |child_id:8%d",
+         NULL, res_tzpol, parent_id, child_id);
+
+   ec = e_pixmap_find_client_by_res_id(child_id);
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+   parent_ec = e_pixmap_find_client_by_res_id(parent_id);
+
+   cdata = e_client_cdata_get(ec);
+   p_cdata = e_client_cdata_get(parent_ec);
+   ELOGF("TZPOL",
+         "          |res_tzpol:%8p|parent_surf:%8p|child_surf:%8p",
+         NULL, res_tzpol, (p_cdata ? p_cdata->surface : NULL), (cdata ? cdata->surface : NULL));
+
+   e_policy_stack_transient_for_below_set(ec, parent_ec, EINA_TRUE);
 }
 
 static void
 _tzpol_iface_cb_set_parent_with_below(struct wl_client *client, struct wl_resource *res_tzpol, struct wl_resource *child, struct wl_resource *parent)
 {
-   // TODO: need to implement
+   E_Client *ec, *parent_ec;
+
+   ELOGF("TZPOL",
+         "PARENT_SET(B)|res_tzpol:%8p|parent_surf:%8p|child_surf:%8p",
+         NULL, res_tzpol, parent, child);
+
+   ec = wl_resource_get_user_data(child);
+   EINA_SAFETY_ON_NULL_RETURN(ec);
+
+   if (parent)
+     parent_ec = wl_resource_get_user_data(parent);
+   else
+     parent_ec = NULL;
+
+   e_policy_stack_transient_for_below_set(ec, parent_ec, EINA_FALSE);
 }
 
 // --------------------------------------------------------
index 174166a..8fdd8af 100644 (file)
@@ -1168,16 +1168,12 @@ _e_test_helper_cb_set_transient_for_below(const Eldbus_Service_Interface *iface
 
         if (set)
           {
-             e_client_transient_policy_set(ec, E_TRANSIENT_BELOW);
-             e_client_belong_to_parent_set(ec, EINA_TRUE);
-             e_policy_stack_transient_for_set(ec, pec);
+             e_policy_stack_transient_for_below_set(ec, pec, EINA_TRUE);
              accept = EINA_TRUE;
           }
         else
           {
-             e_client_transient_policy_set(ec, E_TRANSIENT_ABOVE);
-             e_client_belong_to_parent_set(ec, EINA_FALSE);
-             e_policy_stack_transient_for_set(ec, NULL);
+             e_policy_stack_transient_for_below_set(ec, NULL, EINA_TRUE);
              accept = EINA_TRUE;
           }
      }