ignore non-internal override clients when stacking

this fixes the case where clients will briefly escape normal/expected stacking on startup if an override is visible
This commit is contained in:
Mike Blumenkrantz 2014-01-30 11:44:48 -05:00
parent 53e477a7d0
commit 340e02efb5
1 changed files with 19 additions and 10 deletions

View File

@ -613,22 +613,31 @@ _e_comp_x_client_stack(E_Client *ec)
ecore_x_window_shadow_tree_flush();
/* try stacking below */
ec2 = e_client_above_get(ec);
if (ec2)
ec2 = ec;
do
{
if (ec2->layer == ec->layer)
win = _e_comp_x_client_window_get(ec2);
}
ec2 = e_client_above_get(ec2);
if (ec2 && (e_client_util_is_stacking(ec2) || ((!ec2->override) || ec2->internal)))
{
if (ec2->layer != ec->layer) break;
win = _e_comp_x_client_window_get(ec2);
}
} while (ec2 && (!win));
/* try stacking above */
if (!win)
{
ec2 = e_client_below_get(ec);
if (ec2 && (ec2->layer == ec->layer))
ec2 = ec;
do
{
win = _e_comp_x_client_window_get(ec2);
mode = ECORE_X_WINDOW_STACK_ABOVE;
}
ec2 = e_client_below_get(ec2);
if (ec2 && (e_client_util_is_stacking(ec2) || ((!ec2->override) || ec2->internal)))
{
if (ec2->layer != ec->layer) break;
win = _e_comp_x_client_window_get(ec2);
mode = ECORE_X_WINDOW_STACK_ABOVE;
}
} while (ec2 && (!win));
}
/* just layer stack */