If child window set the always_on_parent aux_hint, then it always has to be placed
on the parent window even if it request to lower window.
Currently, this feature can be set by below aux hint key.
- wm.policy.win.transient_for.always_on_parent
Change-Id: Icd26fabf437a976df52018f4ad9587ac9f0f3390
}
}
+ if (ec->parent)
+ {
+ if (ec->transient_for_always_on_parent)
+ {
+ E_Client *top_child = NULL;
+ top_child = e_client_transient_child_top_get(ec->parent, EINA_FALSE);
+ if (!top_child)
+ {
+ ELOGF("POL", "RAISE child window... Stack above on the parent (win:%zx, ec:%p)", ec, e_client_util_win_get(ec->parent), ec->parent);
+ e_client_stack_above(ec, ec->parent);
+ }
+ else
+ {
+ if (top_child != ec)
+ {
+ ELOGF("POL", "RAISE child window... Stack above on the top child (win:%zx, ec:%p)", ec, e_client_util_win_get(top_child), top_child);
+ e_client_stack_above(ec, top_child);
+ }
+ else
+ ELOGF("POL", "RAISE child window... already on the top. STAY", ec);
+ }
+ return;
+ }
+ }
+
evas_object_raise(ec->frame);
}
}
}
+ if (ec->parent)
+ {
+ if (ec->transient_for_always_on_parent)
+ {
+ ELOGF("POL", "LOWER child window... So, stack above on the parent (win:%zx, ec:%p)", ec, e_client_util_win_get(ec->parent), ec->parent);
+ e_client_stack_above(ec, ec->parent);
+ return;
+ }
+ }
+
evas_object_lower(ec->frame);
}
} desk_group;
Eina_Bool transient_for_always_on_top;
+ Eina_Bool transient_for_always_on_parent;
struct
{
int count;
E_POLICY_HINT_ROT_RENDER_NOPENDING = 10,
E_POLICY_HINT_ICONIFY_BUFFER_FLUSH = 11,
E_POLICY_HINT_TRANSIENT_FOR_ALWAYS_ON_TOP = 12,
+ E_POLICY_HINT_TRANSIENT_FOR_ALWAYS_ON_PARENT = 13,
};
static const char *hint_names[] =
"wm.policy.win.rot.render.nopending",
"wm.policy.win.iconify.buffer.flush",
"wm.policy.win.transient_for.always_on_top",
+ "wm.policy.win.transient_for.always_on_parent",
};
static void _e_policy_wl_surf_del(E_Policy_Wl_Surface *psurf);
ec->transient_for_always_on_top = EINA_FALSE;
}
}
+ else if (!strncmp(hint->hint, hint_names[E_POLICY_HINT_TRANSIENT_FOR_ALWAYS_ON_PARENT], strlen(hint->hint)))
+ {
+ if (!strncmp(hint->val, "1", 1))
+ {
+ ELOGF("TF_SET", "Transient for Always_on_parent enabled", ec);
+ ec->transient_for_always_on_parent = EINA_TRUE;
+ }
+ else
+ {
+ ELOGF("TF_SET", "Transient for Always_on_parent disabled", ec);
+ ec->transient_for_always_on_parent = EINA_FALSE;
+ }
+ }
}
}