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);
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)
{
_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;
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);
}
// --------------------------------------------------------
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;
}
}