static void _e_vis_ec_job_exec(E_Client *ec, E_Vis_Job_Type type);
static void _e_vis_ec_setup(E_Client *ec);
static void _e_vis_ec_reset(E_Client *ec);
+static Eina_Bool _e_vis_ec_above_is_non_alpha_visible(E_Client *ec, Eina_Bool check_child);
static Eina_Bool _e_vis_ec_below_uniconify(E_Client *ec);
static void _e_vis_cb_child_launch_done(void *data, Evas_Object *obj, const char *signal, const char *source);
static void _e_vis_update_foreground_job_queue(void);
VS_INF(grab->vc->ec, "FORCE CLEAR! Grab %s, cur state:%d", grab->name, grab->vc->state);
if (grab->vc->state == E_VIS_ICONIFY_STATE_RUNNING_UNICONIFY)
- _e_vis_ec_below_uniconify(grab->vc->ec);
+ {
+ if (!_e_vis_ec_above_is_non_alpha_visible(grab->vc->ec, EINA_FALSE))
+ _e_vis_ec_below_uniconify(grab->vc->ec);
+ }
grab->deleted = 1;
_e_vis_client_grab_remove(grab->vc, grab);
}
static Eina_Bool
-_e_vis_ec_above_is_non_alpha_visible(E_Client *ec)
+_e_vis_ec_above_is_non_alpha_visible(E_Client *ec, Eina_Bool check_child)
{
E_Client *above;
Eina_Bool is_non_alpha_visible = EINA_FALSE;
{
if (e_client_util_ignored_get(above)) continue;
if (!E_CONTAINS(above->x, above->y, above->w, above->h, ec->x, ec->y, ec->w, ec->h)) continue;
+ if (check_child && (above->parent == ec)) continue;
if (above->visibility.obscured == E_VISIBILITY_UNOBSCURED)
{
{
E_Client *below;
- if (_e_vis_ec_above_is_non_alpha_visible(ec))
- return;
-
for (below = e_client_below_get(ec); below; below = e_client_below_get(below))
{
if (!_e_vis_ec_activity_check(below, EINA_FALSE)) continue;
return EINA_TRUE;
}
+ if (_e_vis_ec_above_is_non_alpha_visible(ec, EINA_FALSE))
+ {
+ VS_DBG(ec, "Obscured by above window.");
+ return EINA_TRUE;
+ }
+
if (!_e_vis_ec_below_uniconify(ec))
{
VS_DBG(ec, "Failed to uniconify below client");
return EINA_FALSE;
}
+ if (_e_vis_ec_above_is_non_alpha_visible(ec, EINA_TRUE))
+ {
+ VS_DBG(ec, "Obscured by above window.");
+ return EINA_FALSE;
+ }
+
if (!_e_vis_ec_below_uniconify(ec))
{
VS_DBG(ec, "Failed to uniconify below client");
return EINA_FALSE;
}
+ if (_e_vis_ec_above_is_non_alpha_visible(ec, EINA_TRUE))
+ {
+ VS_DBG(ec, "Obscured by above window.");
+ return EINA_FALSE;
+ }
+
if (!_e_vis_ec_below_uniconify(ec))
{
VS_DBG(ec, "Failed to uniconify below client");
return EINA_FALSE;
}
+ if (_e_vis_ec_above_is_non_alpha_visible(ec, EINA_TRUE))
+ {
+ VS_DBG(ec, "Obscured by above window.");
+ return EINA_FALSE;
+ }
+
if (!_e_vis_ec_below_uniconify(ec))
{
VS_DBG(ec, "Failed to uniconify below client");