From 340e02efb5999ab27d403921cf77e0cdc37ad61d Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 30 Jan 2014 11:44:48 -0500 Subject: [PATCH] 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 --- src/bin/e_comp_x.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c index c30d9c64b..bbb697cb1 100644 --- a/src/bin/e_comp_x.c +++ b/src/bin/e_comp_x.c @@ -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 */